From: Timo Sirainen Date: Fri, 8 Mar 2024 09:52:15 +0000 (+0200) Subject: lib-sql: Refactor sql driver initialization code X-Git-Tag: 2.4.1~990 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90bea24698e0eaaa7227ef2e205b763c9da04fb3;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: Refactor sql driver initialization code sql_drivers_init() now registers all the drivers. --- diff --git a/src/auth/main.c b/src/auth/main.c index bc203d7e4b..b45bb16253 100644 --- a/src/auth/main.c +++ b/src/auth/main.c @@ -154,7 +154,6 @@ static void main_preinit(void) /* Load built-in SQL drivers (if any) */ sql_drivers_init(); - sql_drivers_register_all(); /* Initialize databases so their configuration files can be readable only by root. Also load all modules here. */ diff --git a/src/dict/dict-expire.c b/src/dict/dict-expire.c index 3e6907606a..0bd8b60d52 100644 --- a/src/dict/dict-expire.c +++ b/src/dict/dict-expire.c @@ -94,7 +94,6 @@ static void main_preinit(void) { /* Load built-in SQL drivers (if any) */ sql_drivers_init(); - sql_drivers_register_all(); #ifdef HAVE_CDB dict_driver_register(&dict_driver_cdb); #endif diff --git a/src/dict/main.c b/src/dict/main.c index 8df58c2179..c90547a6ab 100644 --- a/src/dict/main.c +++ b/src/dict/main.c @@ -90,7 +90,6 @@ static void main_preinit(void) { /* Load built-in SQL drivers (if any) */ sql_drivers_init(); - sql_drivers_register_all(); #ifdef HAVE_CDB dict_driver_register(&dict_driver_cdb); #endif diff --git a/src/lib-sql/Makefile.am b/src/lib-sql/Makefile.am index 2dd91bc291..e59e5314ae 100644 --- a/src/lib-sql/Makefile.am +++ b/src/lib-sql/Makefile.am @@ -111,19 +111,21 @@ sql-drivers-register.c: $(top_builddir)/config.h Makefile.am $(AM_V_GEN)rm -f $@; \ echo '/* this file automatically generated by Makefile */' >$@; \ echo '#include "lib.h"' >>$@; \ - echo '#include "sql-api.h"' >>$@ + echo '#include "sql-api-private.h"' >>$@ + $(AM_V_at)echo 'void sql_drivers_init_all(void) {' >>$@ if ! SQL_PLUGINS $(AM_V_at)for i in $(sql_drivers) null; do \ if [ "$${i}" != "null" ]; then \ - echo "extern struct sql_db driver_$${i}_db;" >>$@ ; \ + echo "driver_$${i}_init();" >>$@ ; \ fi; \ done endif - $(AM_V_at)echo 'void sql_drivers_register_all(void) {' >>$@ + $(AM_V_at)echo '}' >>$@ + $(AM_V_at)echo 'void sql_drivers_deinit_all(void) {' >>$@ if ! SQL_PLUGINS $(AM_V_at)for i in $(sql_drivers) null; do \ if [ "$${i}" != "null" ]; then \ - echo "sql_driver_register(&driver_$${i}_db);" >>$@ ; \ + echo "driver_$${i}_deinit();" >>$@ ; \ fi; \ done endif diff --git a/src/lib-sql/driver-cassandra.c b/src/lib-sql/driver-cassandra.c index ee6f6ba0f4..a505f80b30 100644 --- a/src/lib-sql/driver-cassandra.c +++ b/src/lib-sql/driver-cassandra.c @@ -2926,9 +2926,6 @@ const struct sql_result driver_cassandra_result = { const char *driver_cassandra_version = DOVECOT_ABI_VERSION; -void driver_cassandra_init(void); -void driver_cassandra_deinit(void); - void driver_cassandra_init(void) { sql_driver_register(&driver_cassandra_db); diff --git a/src/lib-sql/driver-mysql.c b/src/lib-sql/driver-mysql.c index 94beef3140..19bbf21c9c 100644 --- a/src/lib-sql/driver-mysql.c +++ b/src/lib-sql/driver-mysql.c @@ -830,9 +830,6 @@ const struct sql_result driver_mysql_error_result = { const char *driver_mysql_version = DOVECOT_ABI_VERSION; -void driver_mysql_init(void); -void driver_mysql_deinit(void); - void driver_mysql_init(void) { sql_driver_register(&driver_mysql_db); diff --git a/src/lib-sql/driver-pgsql.c b/src/lib-sql/driver-pgsql.c index 0a0c257ecb..95b5cb9a04 100644 --- a/src/lib-sql/driver-pgsql.c +++ b/src/lib-sql/driver-pgsql.c @@ -1349,9 +1349,6 @@ const struct sql_result driver_pgsql_result = { const char *driver_pgsql_version = DOVECOT_ABI_VERSION; -void driver_pgsql_init(void); -void driver_pgsql_deinit(void); - void driver_pgsql_init(void) { sql_driver_register(&driver_pgsql_db); diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index 85bbb49b5b..6a8439401e 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -698,9 +698,6 @@ const struct sql_result driver_sqlite_error_result = { const char *driver_sqlite_version = DOVECOT_ABI_VERSION; -void driver_sqlite_init(void); -void driver_sqlite_deinit(void); - void driver_sqlite_init(void) { sql_driver_register(&driver_sqlite_db); diff --git a/src/lib-sql/sql-api-private.h b/src/lib-sql/sql-api-private.h index 5ed570c791..ca6da82099 100644 --- a/src/lib-sql/sql-api-private.h +++ b/src/lib-sql/sql-api-private.h @@ -270,4 +270,20 @@ struct event_passthrough * sql_query_finished_event(struct sql_db *db, struct event *event, const char *query, bool success, int *duration_r); struct event_passthrough *sql_transaction_finished_event(struct sql_transaction_context *ctx); + +void sql_drivers_init_without_drivers(void); +void sql_drivers_deinit_without_drivers(void); + +void sql_drivers_init_all(void); +void sql_drivers_deinit_all(void); + +void driver_cassandra_init(void); +void driver_cassandra_deinit(void); +void driver_mysql_init(void); +void driver_mysql_deinit(void); +void driver_pgsql_init(void); +void driver_pgsql_deinit(void); +void driver_sqlite_init(void); +void driver_sqlite_deinit(void); + #endif diff --git a/src/lib-sql/sql-api.c b/src/lib-sql/sql-api.c index 4864705e3c..d0d3334861 100644 --- a/src/lib-sql/sql-api.c +++ b/src/lib-sql/sql-api.c @@ -17,16 +17,28 @@ struct event_category event_category_sql = { struct sql_db_module_register sql_db_module_register = { 0 }; ARRAY_TYPE(sql_drivers) sql_drivers; -void sql_drivers_init(void) +void sql_drivers_init_without_drivers(void) { i_array_init(&sql_drivers, 8); } -void sql_drivers_deinit(void) +void sql_drivers_deinit_without_drivers(void) { array_free(&sql_drivers); } +void sql_drivers_init(void) +{ + sql_drivers_init_without_drivers(); + sql_drivers_init_all(); +} + +void sql_drivers_deinit(void) +{ + sql_drivers_deinit_all(); + sql_drivers_deinit_without_drivers(); +} + static const struct sql_db *sql_driver_lookup(const char *name) { const struct sql_db *const *drivers; diff --git a/src/lib-sql/sql-api.h b/src/lib-sql/sql-api.h index 7fed8ff9fe..f5636180c8 100644 --- a/src/lib-sql/sql-api.h +++ b/src/lib-sql/sql-api.h @@ -89,9 +89,6 @@ typedef void sql_commit_callback_t(const struct sql_commit_result *result, void void sql_drivers_init(void); void sql_drivers_deinit(void); -/* register all built-in SQL drivers */ -void sql_drivers_register_all(void); - void sql_driver_register(const struct sql_db *driver); void sql_driver_unregister(const struct sql_db *driver); diff --git a/src/lib-sql/test-sql-sqlite.c b/src/lib-sql/test-sql-sqlite.c index 2ad3ab9d95..2923fc7794 100644 --- a/src/lib-sql/test-sql-sqlite.c +++ b/src/lib-sql/test-sql-sqlite.c @@ -3,7 +3,7 @@ #include "lib.h" #include "sql-api-private.h" #include "test-common.h" -#include "sql-api.h" +#include "sql-api-private.h" void driver_sqlite_init(void); void driver_sqlite_deinit(void); @@ -31,7 +31,7 @@ static void test_sql_sqlite(void) struct sql_db *sql = NULL; const char *error = NULL; - sql_drivers_init(); + sql_drivers_init_without_drivers(); driver_sqlite_init(); test_assert(sql_init_full(&set, &sql, &error) == 0 && @@ -61,7 +61,7 @@ static void test_sql_sqlite(void) sql_unref(&sql); driver_sqlite_deinit(); - sql_drivers_deinit(); + sql_drivers_deinit_without_drivers(); test_end(); } diff --git a/src/lib-sql/test-sql.c b/src/lib-sql/test-sql.c index 9dcaaaa464..04db42b44a 100644 --- a/src/lib-sql/test-sql.c +++ b/src/lib-sql/test-sql.c @@ -2,7 +2,7 @@ #include "lib.h" #include "test-common.h" -#include "sql-api.h" +#include "sql-api-private.h" #include "driver-test.h" static struct sql_db *setup_sql(void) @@ -14,7 +14,7 @@ static struct sql_db *setup_sql(void) struct sql_db *sql = NULL; const char *error = NULL; - sql_drivers_init(); + sql_drivers_init_without_drivers(); sql_driver_test_register(); test_assert(sql_init_full(&set, &sql, &error) == 0 && @@ -37,7 +37,7 @@ static void deinit_sql(struct sql_db **_sql) sql_unref(&sql); sql_driver_test_unregister(); - sql_drivers_deinit(); + sql_drivers_deinit_without_drivers(); } #define setup_result_1(sql) \