From f503910201f12eba7417f3ae394ee65342987f72 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 27 Jan 2024 00:24:10 +0200 Subject: [PATCH] lib-sql: sqlite - Implement new init() API --- src/lib-sql/driver-sqlite.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index 79d57bc3b9..40d06155b6 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -10,6 +10,7 @@ #include "strfuncs.h" #include "str-parse.h" #include "settings.h" +#include "settings-parser.h" #ifdef BUILD_SQLITE #include @@ -51,11 +52,30 @@ struct sqlite_settings { bool parsed_journal_use_wal; }; +#undef DEF +#define DEF(type, name) \ + SETTING_DEFINE_STRUCT_##type("sqlite_"#name, name, struct sqlite_settings) +static const struct setting_define sqlite_setting_defines[] = { + DEF(STR, path), + DEF(ENUM, journal_mode), + DEF(BOOL, readonly), + + SETTING_DEFINE_LIST_END +}; static const struct sqlite_settings sqlite_default_settings = { .path = "", .journal_mode = "delete:wal", .readonly = FALSE, }; +const struct setting_parser_info sqlite_setting_parser_info = { + .name = "sqlite", + + .defines = sqlite_setting_defines, + .defaults = &sqlite_default_settings, + + .struct_size = sizeof(struct sqlite_settings), + .pool_offset1 = 1 + offsetof(struct sqlite_settings, pool), +}; extern const struct sql_db driver_sqlite_db; extern const struct sql_result driver_sqlite_result; @@ -142,6 +162,19 @@ driver_sqlite_init_common(struct event *event, return &db->api; } +static int +driver_sqlite_init_v(struct event *event, struct sql_db **db_r, + const char **error_r) +{ + const struct sqlite_settings *set; + + if (settings_get(event, &sqlite_setting_parser_info, 0, + &set, error_r) < 0) + return -1; + *db_r = driver_sqlite_init_common(event, set); + return 0; +} + static int driver_sqlite_parse_connect_string(pool_t pool, const char *connect_string, @@ -678,6 +711,7 @@ const struct sql_db driver_sqlite_db = { SQL_DB_FLAG_BLOCKING, .v = { + .init = driver_sqlite_init_v, .init_legacy_full = driver_sqlite_init_full_v, .deinit = driver_sqlite_deinit_v, .connect = driver_sqlite_connect, -- 2.47.3