]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Refactor sql driver initialization code
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 8 Mar 2024 09:52:15 +0000 (11:52 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
sql_drivers_init() now registers all the drivers.

13 files changed:
src/auth/main.c
src/dict/dict-expire.c
src/dict/main.c
src/lib-sql/Makefile.am
src/lib-sql/driver-cassandra.c
src/lib-sql/driver-mysql.c
src/lib-sql/driver-pgsql.c
src/lib-sql/driver-sqlite.c
src/lib-sql/sql-api-private.h
src/lib-sql/sql-api.c
src/lib-sql/sql-api.h
src/lib-sql/test-sql-sqlite.c
src/lib-sql/test-sql.c

index bc203d7e4bc7dd1dccc628c9c7729f455b351ebf..b45bb16253189f0a4bfbadc1f2e4e3f7a9f0a344 100644 (file)
@@ -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. */
index 3e6907606a371b3b2df7e1dcf29cfd3f43c1f57f..0bd8b60d52ce1d06b86dd0b10bad60c540262abe 100644 (file)
@@ -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
index 8df58c21798a0d72e243f8de2dd9c2589c56ada0..c90547a6ab0c52ba2d3b15f522f66ba7d6e44a8a 100644 (file)
@@ -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
index 2dd91bc2915964a4075d412271e480d709024e6a..e59e5314ae10f7a05155532757e9ad15d1b02ee1 100644 (file)
@@ -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
index ee6f6ba0f49a60531022a26bc2a1a78d24144c2a..a505f80b30a163ef022c447f31761c089c9aec1e 100644 (file)
@@ -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);
index 94beef3140216a9c53bbe0ca17ad76ef35cfb4be..19bbf21c9c6b9a83c478bfb20e50f01d16982870 100644 (file)
@@ -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);
index 0a0c257ecba2743e5021512e57f04e95c292e17d..95b5cb9a048556ed0eedaa445854f42e96e10fce 100644 (file)
@@ -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);
index 85bbb49b5b7d80e5ab6506714aa66a4986af6cc6..6a8439401e0dcb569c61e83f8a864abb1f965653 100644 (file)
@@ -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);
index 5ed570c791a1420dbac2fc8658cbc1f99175e0df..ca6da82099ca41d928623370ff0c0179ca7a71c0 100644 (file)
@@ -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
index 4864705e3cd440fd5c026adf60bab51915a1ec3e..d0d333486187bfa675cdf3cd73d1e92580d7ae8d 100644 (file)
@@ -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;
index 7fed8ff9fe0522f6138305fd31d5b3293e57ed7e..f5636180c875dc24e8ec749d2402188b63691c99 100644 (file)
@@ -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);
 
index 2ad3ab9d950c0b6951efee20afa2c4bec42157fa..2923fc779427ad02cc2629f9e227648953330c33 100644 (file)
@@ -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();
 }
index 9dcaaaa46495ebe6cb4a5ac752e2c69072946aba..04db42b44aa0ec0fbe962a31acc2d74abab09332 100644 (file)
@@ -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) \