]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Add SQL_DB_FLAG_ON_CONFICT_DO for new enough sqlite and pgsql
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 18 May 2021 14:40:00 +0000 (17:40 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Tue, 25 May 2021 09:42:16 +0000 (09:42 +0000)
src/lib-sql/driver-pgsql.c
src/lib-sql/driver-sqlite.c
src/lib-sql/driver-test.c
src/lib-sql/sql-api.h

index ab0d2ea0c30e68628bc3318ee33dac965a62fbe8..d04c20d831392acab6cd1aba3ab563638fe16f17 100644 (file)
@@ -194,6 +194,10 @@ static void connect_callback(struct pgsql_db *db)
        if (io_dir == 0) {
                db->connect_state = "connected";
                timeout_remove(&db->to_connect);
+               if (PQserverVersion(db->pg) >= 90500) {
+                       /* v9.5+ */
+                       db->api.flags |= SQL_DB_FLAG_ON_CONFLICT_DO;
+               }
                driver_pgsql_set_state(db, SQL_DB_STATE_IDLE);
                if (db->ioloop != NULL) {
                        /* driver_pgsql_sync_init() waiting for connection to
index dd5a6b8bee6ddfa2bf5c3179ebfea5ba8b818b3c..e05ed1843d78a8b790e2373c47457cdd0062cf9e 100644 (file)
@@ -481,7 +481,11 @@ driver_sqlite_escape_blob(struct sql_db *_db ATTR_UNUSED,
 
 const struct sql_db driver_sqlite_db = {
        .name = "sqlite",
-       .flags = SQL_DB_FLAG_BLOCKING,
+       .flags =
+#if SQLITE_VERSION_NUMBER >= 3024000
+               SQL_DB_FLAG_ON_CONFLICT_DO |
+#endif
+               SQL_DB_FLAG_BLOCKING,
 
        .v = {
                .init_full = driver_sqlite_init_full_v,
index f267c14a365007a0563136320841434404c218b4..9d4db76ae1e164599d04656d67cf40a574d7f23c 100644 (file)
@@ -132,6 +132,7 @@ const struct sql_db driver_test_cassandra_db = {
 
 const struct sql_db driver_test_sqlite_db = {
        .name = "sqlite",
+       .flags = SQL_DB_FLAG_ON_CONFLICT_DO | SQL_DB_FLAG_BLOCKING,
 
        .v = {
                .init = driver_test_sqlite_init,
index 1478b1268ba9a4fd8927d49e706a62156f00f590..9a74fc64524aa91c03cefc4934b91c31f287986a 100644 (file)
@@ -17,6 +17,8 @@ enum sql_db_flags {
        SQL_DB_FLAG_PREP_STATEMENTS     = 0x04,
        /* Database supports INSERT .. ON DUPLICATE KEY syntax. */
        SQL_DB_FLAG_ON_DUPLICATE_KEY    = 0x08,
+       /* Database supports INSERT .. ON CONFLICT DO UPDATE syntax. */
+       SQL_DB_FLAG_ON_CONFLICT_DO      = 0x10,
 };
 
 enum sql_field_type {