From: Aki Tuomi Date: Mon, 3 Sep 2018 11:12:05 +0000 (+0300) Subject: lib-sql: Add sql_db_cache_new2 that uses the new sql_init_full initializer X-Git-Tag: 2.3.9~1449 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad165d14fbc9dcdae0edae5bd5504929035534b1;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: Add sql_db_cache_new2 that uses the new sql_init_full initializer --- diff --git a/src/lib-sql/sql-db-cache.c b/src/lib-sql/sql-db-cache.c index 655b9c8337..c0c6ad4c27 100644 --- a/src/lib-sql/sql-db-cache.c +++ b/src/lib-sql/sql-db-cache.c @@ -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; } diff --git a/src/lib-sql/sql-db-cache.h b/src/lib-sql/sql-db-cache.h index 668747532c..94bef74b16 100644 --- a/src/lib-sql/sql-db-cache.h +++ b/src/lib-sql/sql-db-cache.h @@ -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);