From: Timo Sirainen Date: Tue, 18 May 2021 14:21:59 +0000 (+0300) Subject: lib-sql: sqlpool: Implement get_flags() as a wrapper to the real db X-Git-Tag: 2.3.16~103 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6cc9bd8e2bbb9027cdd1e4c66bf48393cce6064b;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: sqlpool: Implement get_flags() as a wrapper to the real db --- diff --git a/src/lib-sql/driver-sqlpool.c b/src/lib-sql/driver-sqlpool.c index 8b72f48c82..78b372c035 100644 --- a/src/lib-sql/driver-sqlpool.c +++ b/src/lib-sql/driver-sqlpool.c @@ -417,6 +417,25 @@ driver_sqlpool_get_sync_connection(struct sqlpool_db *db, return FALSE; } +static enum sql_db_flags driver_sqlpool_get_flags(struct sql_db *_db) +{ + struct sqlpool_db *db = (struct sqlpool_db *)_db; + const struct sqlpool_connection *conn, *last_conn = NULL; + + /* try to use a connected db */ + array_foreach(&db->all_connections, conn) { + if (SQL_DB_IS_READY(conn->db)) + return sql_get_flags(conn->db); + last_conn = conn; + } + /* fallback to the last db, if there is any */ + if (last_conn != NULL) + return sql_get_flags(last_conn->db); + /* Just use the default flags. The flags shouldn't be worth having + to create a connection. */ + return _db->flags; +} + static int driver_sqlpool_parse_hosts(struct sqlpool_db *db, const char *connect_string, const char **error_r) @@ -870,6 +889,7 @@ struct sql_db driver_sqlpool_db = { "", .v = { + .get_flags = driver_sqlpool_get_flags, .deinit = driver_sqlpool_deinit, .connect = driver_sqlpool_connect, .disconnect = driver_sqlpool_disconnect,