]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict-backend: Remove cache for prepared statements
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sun, 15 Sep 2019 18:52:39 +0000 (21:52 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 16 Sep 2019 08:00:54 +0000 (08:00 +0000)
src/lib-dict-backend/dict-sql-private.h
src/lib-dict-backend/dict-sql.c

index 8b1d148420cb673ed39b10932cc27ce43d406a58..8c6ea392dc68d8aaaa788961107f3ccc9f1359f4 100644 (file)
@@ -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;
 };
 
index 9c6c54717022f13c3604cd3ebd488310beecc56b..74b4e5caf73d7132179c6911cd59c0ed4fa292a8 100644 (file)
@@ -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. */