From 5f6977e40cd182d56aa0b6e792667408f122249a Mon Sep 17 00:00:00 2001 From: Tomas Zigo <50632337+tmszi@users.noreply.github.com> Date: Sat, 20 Apr 2024 21:29:14 +0200 Subject: [PATCH] db/drivers/odbc: set ODBC MySQL DB backend SQL ANSI_QUOTES MODE (#3635) Which allow to use SQL standard double quotes instead of backticks for escaping column name. --- db/drivers/odbc/db.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/db/drivers/odbc/db.c b/db/drivers/odbc/db.c index 6da5ebdd336..d27375a5ddc 100644 --- a/db/drivers/odbc/db.c +++ b/db/drivers/odbc/db.c @@ -13,6 +13,7 @@ int db__driver_open_database(dbHandle *handle) SQLRETURN ret; SQLINTEGER err; dbConnection connection; + SQLCHAR dbms_name[256]; /* Open connection */ if (open_connection() != DB_OK) @@ -39,6 +40,30 @@ int db__driver_open_database(dbHandle *handle) return DB_FAILED; } + /* Find ODBC DB driver */ + SQLGetInfo(ODconn, SQL_DBMS_NAME, (SQLPOINTER)dbms_name, sizeof(dbms_name), + NULL); + + if (strcmp((CHAR *)dbms_name, "MySQL") == 0 || + strcmp((CHAR *)dbms_name, "MariaDB") == 0) { + cursor *c; + + c = alloc_cursor(); + if (c == NULL) + return DB_FAILED; + + /* Set SQL ANSI_QUOTES MODE which allow to use double quotes instead of + * backticks */ + SQLExecDirect(c->stmt, (SQLCHAR *)"SET SQL_MODE=ANSI_QUOTES", SQL_NTS); + + G_debug( + 3, + "db__driver_open_database(): Set ODBC %s DB SQL ANSI_QUOTES MODE", + dbms_name); + + free_cursor(c); + } + return DB_OK; }