Changeset: 1ae2a7fe23eb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1ae2a7fe23eb
Branch: simplify_scenario
Log Message:

merged with default


diffs (truncated from 726 to 300 lines):

diff --git a/clients/odbc/driver/SQLGetInfo.c b/clients/odbc/driver/SQLGetInfo.c
--- a/clients/odbc/driver/SQLGetInfo.c
+++ b/clients/odbc/driver/SQLGetInfo.c
@@ -839,7 +839,7 @@ MNDBGetInfo(ODBCDbc *dbc,
                sValue = MONETDB_SERVER_NAME;
                break;
        case SQL_SPECIAL_CHARACTERS:
-               sValue = "!$&'()*+,-./:;<=>?@[]^`{|}~";
+               sValue = "!#$%&'()*+,-./:;<=>?@[]^`{|}~";
                break;
        case SQL_SQL_CONFORMANCE:
                nValue = SQL_SC_SQL92_FULL;
@@ -1037,15 +1037,16 @@ MNDBGetInfo(ODBCDbc *dbc,
                break;
        case SQL_TIMEDATE_ADD_INTERVALS:
        case SQL_TIMEDATE_DIFF_INTERVALS:
-               /* SQL_FN_TSI_FRAC_SECOND |
-                * SQL_FN_TSI_SECOND |
-                * SQL_FN_TSI_MINUTE |
-                * SQL_FN_TSI_HOUR |
-                * SQL_FN_TSI_DAY |
-                * SQL_FN_TSI_WEEK |
-                * SQL_FN_TSI_MONTH |
-                * SQL_FN_TSI_QUARTER |
-                * SQL_FN_TSI_YEAR */
+               /* when server is 11.46 or higher */
+               nValue = SQL_FN_TSI_SECOND |
+                       SQL_FN_TSI_MINUTE |
+                       SQL_FN_TSI_HOUR |
+                       SQL_FN_TSI_DAY |
+                       SQL_FN_TSI_WEEK |
+                       SQL_FN_TSI_MONTH |
+                       SQL_FN_TSI_QUARTER |
+                       SQL_FN_TSI_YEAR;
+               /* SQL_FN_TSI_FRAC_SECOND | */
                break;
        case SQL_TIMEDATE_FUNCTIONS:
                nValue = SQL_FN_TD_CURRENT_DATE |
@@ -1053,7 +1054,7 @@ MNDBGetInfo(ODBCDbc *dbc,
                        SQL_FN_TD_CURRENT_TIMESTAMP |
                        SQL_FN_TD_CURDATE |
                        SQL_FN_TD_CURTIME |
-                       /* SQL_FN_TD_DAYNAME | */
+                       SQL_FN_TD_DAYNAME |     /* when server is 11.46 or 
higher */
                        SQL_FN_TD_DAYOFMONTH |
                        SQL_FN_TD_DAYOFWEEK |
                        SQL_FN_TD_DAYOFYEAR |
@@ -1061,12 +1062,12 @@ MNDBGetInfo(ODBCDbc *dbc,
                        SQL_FN_TD_HOUR |
                        SQL_FN_TD_MINUTE |
                        SQL_FN_TD_MONTH |
-                       /* SQL_FN_TD_MONTHNAME | */
+                       SQL_FN_TD_MONTHNAME |   /* when server is 11.46 or 
higher */
                        SQL_FN_TD_NOW |
                        SQL_FN_TD_QUARTER |
                        SQL_FN_TD_SECOND |
-                       /* SQL_FN_TD_TIMESTAMPADD | */
-                       /* SQL_FN_TD_TIMESTAMPDIFF | */
+                       SQL_FN_TD_TIMESTAMPADD |        /* when server is 11.46 
or higher */
+                       SQL_FN_TD_TIMESTAMPDIFF |       /* when server is 11.46 
or higher */
                        SQL_FN_TD_WEEK |
                        SQL_FN_TD_YEAR;
                break;
diff --git a/clients/odbc/tests/ODBCgetInfo.c b/clients/odbc/tests/ODBCgetInfo.c
--- a/clients/odbc/tests/ODBCgetInfo.c
+++ b/clients/odbc/tests/ODBCgetInfo.c
@@ -960,7 +960,7 @@ const struct {
                .info = SQL_SPECIAL_CHARACTERS,
                .name = "SQL_SPECIAL_CHARACTERS",
                .type = STRING,
-               .str = "!$&'()*+,-./:;<=>?@[]^`{|}~",
+               .str = "!#$%&'()*+,-./:;<=>?@[]^`{|}~",
        },
        {
                .info = SQL_SQL_CONFORMANCE,
@@ -1080,19 +1080,19 @@ const struct {
                .info = SQL_TIMEDATE_ADD_INTERVALS,
                .name = "SQL_TIMEDATE_ADD_INTERVALS",
                .type = INTEGER,
-               .i = 0,
+               .i = SQL_FN_TSI_SECOND | SQL_FN_TSI_MINUTE | SQL_FN_TSI_HOUR | 
SQL_FN_TSI_DAY | SQL_FN_TSI_WEEK | SQL_FN_TSI_MONTH | SQL_FN_TSI_QUARTER | 
SQL_FN_TSI_YEAR,
        },
        {
                .info = SQL_TIMEDATE_DIFF_INTERVALS,
                .name = "SQL_TIMEDATE_DIFF_INTERVALS",
                .type = INTEGER,
-               .i = 0,
+               .i = SQL_FN_TSI_SECOND | SQL_FN_TSI_MINUTE | SQL_FN_TSI_HOUR | 
SQL_FN_TSI_DAY | SQL_FN_TSI_WEEK | SQL_FN_TSI_MONTH | SQL_FN_TSI_QUARTER | 
SQL_FN_TSI_YEAR,
        },
        {
                .info = SQL_TIMEDATE_FUNCTIONS,
                .name = "SQL_TIMEDATE_FUNCTIONS",
                .type = INTEGER,
-               .i = SQL_FN_TD_CURRENT_DATE | SQL_FN_TD_CURRENT_TIME | 
SQL_FN_TD_CURRENT_TIMESTAMP | SQL_FN_TD_CURDATE | SQL_FN_TD_CURTIME | 
SQL_FN_TD_DAYOFMONTH | SQL_FN_TD_DAYOFWEEK | SQL_FN_TD_DAYOFYEAR | 
SQL_FN_TD_EXTRACT | SQL_FN_TD_HOUR | SQL_FN_TD_MINUTE | SQL_FN_TD_MONTH | 
SQL_FN_TD_NOW | SQL_FN_TD_QUARTER | SQL_FN_TD_SECOND | SQL_FN_TD_WEEK | 
SQL_FN_TD_YEAR,
+               .i = SQL_FN_TD_CURRENT_DATE | SQL_FN_TD_CURRENT_TIME | 
SQL_FN_TD_CURRENT_TIMESTAMP | SQL_FN_TD_CURDATE | SQL_FN_TD_CURTIME | 
SQL_FN_TD_DAYNAME | SQL_FN_TD_DAYOFMONTH | SQL_FN_TD_DAYOFWEEK | 
SQL_FN_TD_DAYOFYEAR | SQL_FN_TD_EXTRACT | SQL_FN_TD_HOUR | SQL_FN_TD_MINUTE | 
SQL_FN_TD_MONTH | SQL_FN_TD_MONTHNAME | SQL_FN_TD_NOW | SQL_FN_TD_QUARTER | 
SQL_FN_TD_SECOND | SQL_FN_TD_TIMESTAMPADD | SQL_FN_TD_TIMESTAMPDIFF | 
SQL_FN_TD_WEEK | SQL_FN_TD_YEAR,
        },
        {
                .info = SQL_TXN_CAPABLE,
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -19,8 +19,10 @@
   own query executions.
 
 * Wed Feb 15 2023 svetlin <svetlin.stali...@monetdbsolutions.com>
-- Added JDBC/ODBC escape sequences implementation to SQL layer. Now all
-  clients can forward them without further processing.
+- Added support of ODBC escape sequences syntax to SQL layer. Now all clients
+  (including ODBC/JDBC/pymonetdb) can use them without further processing.
+  For details on ODBC escape sequences syntax see:
+  
https://learn.microsoft.com/en-us/sql/odbc/reference/appendixes/odbc-escape-sequences
 
 * Thu Nov 10 2022 Martin van Dinther <martin.van.dint...@monetdbsolutions.com>
 - It is no longer allowed to create a merge table or remote table or
diff --git a/sql/test/miscellaneous/Tests/All b/sql/test/miscellaneous/Tests/All
--- a/sql/test/miscellaneous/Tests/All
+++ b/sql/test/miscellaneous/Tests/All
@@ -28,3 +28,4 @@ analyze_test
 blobs
 temp_tables
 table_alias_on_cte
+special_character_names
diff --git a/sql/test/miscellaneous/Tests/special_character_names.test 
b/sql/test/miscellaneous/Tests/special_character_names.test
new file mode 100644
--- /dev/null
+++ b/sql/test/miscellaneous/Tests/special_character_names.test
@@ -0,0 +1,229 @@
+# test usage of special characters in object names
+# ODBC function SQLGetInfo(SQL_SPECIAL_CHARACTERS) returns 
"!#$%&'()*+,-./:;<=>?@[]^`{|}~"
+
+statement ok
+start transaction
+
+statement ok
+create table "a!1" ("a!1" int )
+
+query I
+select "a!1" from "a!1"
+----
+
+statement ok
+create table "a#1" ("a#1" int )
+
+# next query gives Mtest.py execution error: too many values to unpack 
(expected 2)
+# but it works fine when issued via mclient or JDBC or ODBC
+# query I
+# select "a#1" from "a#1"
+# ----
+
+statement ok
+create table "a$1" ("a$1" int )
+
+query I
+select "a$1" from "a$1"
+----
+
+statement ok
+create table "a%1" ("a%1" int )
+
+query I
+select "a%1" from "a%1"
+----
+
+statement ok
+create table "a&1" ("a&1" int )
+
+query I
+select "a&1" from "a&1"
+----
+
+statement ok
+create table "a'1" ("a'1" int )
+
+query I
+select "a'1" from "a'1"
+----
+
+statement ok
+create table "a(1" ("a(1" int )
+
+query I
+select "a(1" from "a(1"
+----
+
+statement ok
+create table "a)1" ("a)1" int )
+
+query I
+select "a)1" from "a)1"
+----
+
+statement ok
+create table "a*1" ("a*1" int )
+
+query I
+select "a*1" from "a*1"
+----
+
+statement ok
+create table "a+1" ("a+1" int )
+
+query I
+select "a+1" from "a+1"
+----
+
+statement ok
+create table "a,1" ("a,1" int )
+
+query I
+select "a,1" from "a,1"
+----
+
+statement ok
+create table "a-1" ("a-1" int )
+
+query I
+select "a-1" from "a-1"
+----
+
+statement ok
+create table "a.1" ("a.1" int )
+
+query I
+select "a.1" from "a.1"
+----
+
+statement ok
+create table "a/1" ("a/1" int )
+
+query I
+select "a/1" from "a/1"
+----
+
+statement ok
+create table "a:1" ("a:1" int )
+
+query I
+select "a:1" from "a:1"
+----
+
+statement ok
+create table "a;1" ("a;1" int )
+
+query I
+select "a;1" from "a;1"
+----
+
+statement ok
+create table "a<1" ("a<1" int )
+
+query I
+select "a<1" from "a<1"
+----
+
+statement ok
+create table "a=1" ("a=1" int )
+
+query I
+select "a=1" from "a=1"
+----
+
+statement ok
+create table "a>1" ("a>1" int )
+
+query I
+select "a>1" from "a>1"
+----
+
+statement ok
+create table "a?1" ("a?1" int )
+
+query I
+select "a?1" from "a?1"
+----
+
+statement ok
+create table "a@1" ("a@1" int )
+
+query I
+select "a@1" from "a@1"
+----
+
+statement ok
+create table "a[1" ("a[1" int )
+
+query I
+select "a[1" from "a[1"
+----
+
+statement ok
+create table "a]1" ("a]1" int )
+
+query I
+select "a]1" from "a]1"
+----
+
+statement ok
+create table "a^1" ("a^1" int )
+
+query I
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to