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