From bb76ff2d2e5ab5a596d3ac12640489849c4a3017 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 15 Sep 2019 21:52:39 +0300 Subject: [PATCH] lib-dict-backend: Remove cache for prepared statements --- src/lib-dict-backend/dict-sql-private.h | 3 --- src/lib-dict-backend/dict-sql.c | 32 +++---------------------- 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/src/lib-dict-backend/dict-sql-private.h b/src/lib-dict-backend/dict-sql-private.h index 8b1d148420..8c6ea392dc 100644 --- a/src/lib-dict-backend/dict-sql-private.h +++ b/src/lib-dict-backend/dict-sql-private.h @@ -9,9 +9,6 @@ struct sql_dict { const char *username; const struct dict_sql_settings *set; - /* query template => prepared statement */ - HASH_TABLE(const char *, struct sql_prepared_statement *) prep_stmt_hash; - bool has_on_duplicate_key:1; }; diff --git a/src/lib-dict-backend/dict-sql.c b/src/lib-dict-backend/dict-sql.c index 9c6c547170..74b4e5caf7 100644 --- a/src/lib-dict-backend/dict-sql.c +++ b/src/lib-dict-backend/dict-sql.c @@ -113,36 +113,14 @@ sql_dict_init(struct dict *driver, const char *uri, return -1; } - if ((sql_get_flags(dict->db) & SQL_DB_FLAG_PREP_STATEMENTS) != 0) { - hash_table_create(&dict->prep_stmt_hash, dict->pool, - 0, str_hash, strcmp); - } *dict_r = &dict->dict; return 0; } -static void sql_dict_prep_stmt_hash_free(struct sql_dict *dict) -{ - struct hash_iterate_context *iter; - struct sql_prepared_statement *prep_stmt; - const char *query; - - if (!hash_table_is_created(dict->prep_stmt_hash)) - return; - - iter = hash_table_iterate_init(dict->prep_stmt_hash); - while (hash_table_iterate(iter, dict->prep_stmt_hash, &query, &prep_stmt)) - sql_prepared_statement_unref(&prep_stmt); - hash_table_iterate_deinit(&iter); - - hash_table_destroy(&dict->prep_stmt_hash); -} - static void sql_dict_deinit(struct dict *_dict) { struct sql_dict *dict = (struct sql_dict *)_dict; - sql_dict_prep_stmt_hash_free(dict); sql_unref(&dict->db); pool_unref(&dict->pool); } @@ -276,14 +254,10 @@ sql_dict_statement_init(struct sql_dict *dict, const char *query, struct sql_prepared_statement *prep_stmt; const struct sql_dict_param *param; - if (hash_table_is_created(dict->prep_stmt_hash)) { - prep_stmt = hash_table_lookup(dict->prep_stmt_hash, query); - if (prep_stmt == NULL) { - const char *query_dup = p_strdup(dict->pool, query); - prep_stmt = sql_prepared_statement_init(dict->db, query); - hash_table_insert(dict->prep_stmt_hash, query_dup, prep_stmt); - } + if ((sql_get_flags(dict->db) & SQL_DB_FLAG_PREP_STATEMENTS) != 0) { + prep_stmt = sql_prepared_statement_init(dict->db, query); stmt = sql_statement_init_prepared(prep_stmt); + sql_prepared_statement_unref(&prep_stmt); } else { /* Prepared statements not supported by the backend. Just use regular statements to avoid wasting memory. */ -- 2.47.3