]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Add sql_db_cache_new2 that uses the new sql_init_full initializer
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 3 Sep 2018 11:12:05 +0000 (14:12 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Nov 2018 08:12:47 +0000 (10:12 +0200)
src/lib-sql/sql-db-cache.c
src/lib-sql/sql-db-cache.h

index 655b9c83372802f1fdc5be10549d6e0db557d744..c0c6ad4c273263489ff4c13414c7bdaca535e9dc 100644 (file)
@@ -88,15 +88,14 @@ static void sql_db_cache_drop_oldest(struct sql_db_cache *cache)
                sql_db_cache_free_tail(cache);
 }
 
-struct sql_db *
-sql_db_cache_new(struct sql_db_cache *cache,
-                const char *db_driver, const char *connect_string)
+int sql_db_cache_new2(struct sql_db_cache *cache, const struct sql_settings *set,
+                     struct sql_db **db_r, const char **error_r)
 {
        struct sql_db_cache_context *ctx;
        struct sql_db *db;
        char *key;
 
-       key = i_strdup_printf("%s\t%s", db_driver, connect_string);
+       key = i_strdup_printf("%s\t%s", set->driver, set->connect_string);
        db = hash_table_lookup(cache->dbs, key);
        if (db != NULL) {
                ctx = SQL_DB_CACHE_CONTEXT(db);
@@ -108,11 +107,14 @@ sql_db_cache_new(struct sql_db_cache *cache,
        } else {
                sql_db_cache_drop_oldest(cache);
 
+               if (sql_init_full(set, &db, error_r) < 0) {
+                       i_free(key);
+                       return -1;
+               }
+
                ctx = i_new(struct sql_db_cache_context, 1);
                ctx->cache = cache;
                ctx->key = key;
-
-               db = sql_init(db_driver, connect_string);
                ctx->orig_deinit = db->v.deinit;
                db->v.deinit = sql_db_cache_db_deinit;
 
@@ -121,6 +123,24 @@ sql_db_cache_new(struct sql_db_cache *cache,
        }
 
        ctx->refcount++;
+       *db_r = db;
+       return 0;
+}
+
+struct sql_db *
+sql_db_cache_new(struct sql_db_cache *cache,
+                const char *db_driver, const char *connect_string)
+{
+       const char *error;
+       struct sql_db *db;
+       struct sql_settings set = {
+               .driver = db_driver,
+               .connect_string = connect_string,
+       };
+
+       if (sql_db_cache_new2(cache, &set, &db, &error) < 0)
+               i_fatal("%s", error);
+
        return db;
 }
 
index 668747532c111d257480524107f67673c83630e4..94bef74b168f9ebd9e2e60f43de2ea6ae1029d9d 100644 (file)
@@ -7,6 +7,8 @@ struct sql_db_cache;
 struct sql_db *
 sql_db_cache_new(struct sql_db_cache *cache,
                 const char *db_driver, const char *connect_string);
+int sql_db_cache_new2(struct sql_db_cache *cache, const struct sql_settings *set,
+                     struct sql_db **db_r, const char **error_r);
 
 struct sql_db_cache *sql_db_cache_init(unsigned int max_unused_connections);
 void sql_db_cache_deinit(struct sql_db_cache **cache);