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 <[email protected]>
-- 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 <[email protected]>
- 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 -- [email protected]
To unsubscribe send an email to [email protected]