From: Timo Sirainen Date: Tue, 18 May 2021 14:40:00 +0000 (+0300) Subject: lib-sql: Add SQL_DB_FLAG_ON_CONFICT_DO for new enough sqlite and pgsql X-Git-Tag: 2.3.16~102 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5329cd3af4a459d12d7710fd1d42fb9a93bd6fe5;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: Add SQL_DB_FLAG_ON_CONFICT_DO for new enough sqlite and pgsql --- diff --git a/src/lib-sql/driver-pgsql.c b/src/lib-sql/driver-pgsql.c index ab0d2ea0c3..d04c20d831 100644 --- a/src/lib-sql/driver-pgsql.c +++ b/src/lib-sql/driver-pgsql.c @@ -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 diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index dd5a6b8bee..e05ed1843d 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -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, diff --git a/src/lib-sql/driver-test.c b/src/lib-sql/driver-test.c index f267c14a36..9d4db76ae1 100644 --- a/src/lib-sql/driver-test.c +++ b/src/lib-sql/driver-test.c @@ -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, diff --git a/src/lib-sql/sql-api.h b/src/lib-sql/sql-api.h index 1478b1268b..9a74fc6452 100644 --- a/src/lib-sql/sql-api.h +++ b/src/lib-sql/sql-api.h @@ -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 {