Changeset: e9299d38c43e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e9299d38c43e Modified Files: sql/server/sql_parser.y sql/server/sql_scan.c sql/test/escape-sequences/Tests/scalar-functions.test Branch: escape-sequences Log Message:
odbc data types mapping diffs (180 lines): diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -723,6 +723,49 @@ SQLCODE SQLERROR UNDER WHENEVER %token X_BODY %token MAX_MEMORY MAX_WORKERS OPTIMIZER +/* odbc data type tokens */ +%token <sval> + SQL_BIGINT + SQL_BINARY + SQL_BIT + SQL_CHAR + SQL_DATE + SQL_DECIMAL + SQL_DOUBLE + SQL_FLOAT + SQL_GUID + SQL_HUGEINT + SQL_INTEGER + SQL_INTERVAL_DAY + SQL_INTERVAL_DAY_TO_HOUR + SQL_INTERVAL_DAY_TO_MINUTE + SQL_INTERVAL_DAY_TO_SECOND + SQL_INTERVAL_HOUR + SQL_INTERVAL_HOUR_TO_MINUTE + SQL_INTERVAL_HOUR_TO_SECOND + SQL_INTERVAL_MINUTE + SQL_INTERVAL_MINUTE_TO_SECOND + SQL_INTERVAL_MONTH + SQL_INTERVAL_SECOND + SQL_INTERVAL_YEAR + SQL_INTERVAL_YEAR_TO_MONTH + SQL_LONGVARBINARY + SQL_LONGVARCHAR + SQL_NUMERIC + SQL_REAL + SQL_SMALLINT + SQL_TIME + SQL_TIMESTAMP + SQL_TINYINT + SQL_VARBINARY + SQL_VARCHAR + SQL_WCHAR + SQL_WLONGVARCHAR + SQL_WVARCHAR + +%type <type> + odbc_data_type + /* odbc escape prefix tokens */ %token <sval> DATE_ESCAPE_PREFIX @@ -730,6 +773,7 @@ SQLCODE SQLERROR UNDER WHENEVER TIMESTAMP_ESCAPE_PREFIX GUID_ESCAPE_PREFIX ODBC_FUNC_ESCAPE_PREFIX + /* odbc symbolic types */ %type <sym> odbc_date_escape @@ -6344,6 +6388,88 @@ odbc_scalar_func_escape: odbc_scalar_func: func_ref { $$ = $1;} + | CONVERT '(' search_condition ',' odbc_data_type ')' + { dlist *l = L(); + append_symbol(l, $3); + append_type(l, &$5); + $$ = _symbol_create_list( SQL_CAST, l ); } +; + +odbc_data_type: + SQL_BIGINT + { sql_find_subtype(&$$, "bigint", 0, 0); } + | SQL_BINARY + { sql_find_subtype(&$$, "blob", 0, 0); } + | SQL_BIT + { sql_find_subtype(&$$, "boolean", 0, 0); } + | SQL_CHAR + { sql_find_subtype(&$$, "character", 1, 0); } + | SQL_DATE + { sql_find_subtype(&$$, "date", 0, 0); } + | SQL_DECIMAL + { sql_find_subtype(&$$, "decimal", 18, 3); } + | SQL_DOUBLE + { sql_find_subtype(&$$, "double", 0, 0); } + | SQL_FLOAT + { sql_find_subtype(&$$, "double", 0, 0); } + | SQL_GUID + { sql_find_subtype(&$$, "uuid", 0, 0); } + | SQL_HUGEINT + { sql_find_subtype(&$$, "hugeint", 0, 0); } + | SQL_INTEGER + { sql_find_subtype(&$$, "int", 0, 0); } + | SQL_INTERVAL_YEAR + { sql_find_subtype(&$$, "month_interval", 1, 0); } + | SQL_INTERVAL_YEAR_TO_MONTH + { sql_find_subtype(&$$, "month_interval", 2, 0); } + | SQL_INTERVAL_MONTH + { sql_find_subtype(&$$, "month_interval", 3, 0); } + | SQL_INTERVAL_DAY + { sql_find_subtype(&$$, "day_interval", 4, 0); } + | SQL_INTERVAL_DAY_TO_HOUR + { sql_find_subtype(&$$, "sec_interval", 5, 0); } + | SQL_INTERVAL_DAY_TO_MINUTE + { sql_find_subtype(&$$, "sec_interval", 6, 0); } + | SQL_INTERVAL_DAY_TO_SECOND + { sql_find_subtype(&$$, "sec_interval", 7, 0); } + | SQL_INTERVAL_HOUR + { sql_find_subtype(&$$, "sec_interval", 8, 0); } + | SQL_INTERVAL_HOUR_TO_MINUTE + { sql_find_subtype(&$$, "sec_interval", 9, 0); } + | SQL_INTERVAL_HOUR_TO_SECOND + { sql_find_subtype(&$$, "sec_interval", 10, 0); } + | SQL_INTERVAL_MINUTE + { sql_find_subtype(&$$, "sec_interval", 11, 0); } + | SQL_INTERVAL_MINUTE_TO_SECOND + { sql_find_subtype(&$$, "sec_interval", 12, 0); } + | SQL_INTERVAL_SECOND + { sql_find_subtype(&$$, "sec_interval", 13, 0); } + | SQL_LONGVARBINARY + { sql_find_subtype(&$$, "blob", 0, 0); } + | SQL_LONGVARCHAR + { sql_find_subtype(&$$, "clob", 0, 0); } + | SQL_NUMERIC + { sql_find_subtype(&$$, "decimal", 18, 3); } + | SQL_REAL + { sql_find_subtype(&$$, "real", 0, 0); } + | SQL_SMALLINT + { sql_find_subtype(&$$, "smallint", 0, 0); } + | SQL_TIME + { sql_find_subtype(&$$, "time", 0, 0); } + | SQL_TIMESTAMP + { sql_find_subtype(&$$, "timestamp", 0, 0); } + | SQL_TINYINT + { sql_find_subtype(&$$, "tinyint", 0, 0); } + | SQL_VARBINARY + { sql_find_subtype(&$$, "blob", 0, 0); } + | SQL_VARCHAR + { sql_find_subtype(&$$, "clob", 0, 0); } + | SQL_WCHAR + { sql_find_subtype(&$$, "char", 1, 0); } + | SQL_WLONGVARCHAR + { sql_find_subtype(&$$, "clob", 0, 0); } + | SQL_WVARCHAR + { sql_find_subtype(&$$, "clob", 0, 0); } ; %% diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -520,12 +520,13 @@ scanner_init_keywords(void) failed += keywords_insert("MULTILINESTRINGZM", GEOMETRYSUBTYPE); failed += keywords_insert("MULTIPOLYGONZM", GEOMETRYSUBTYPE); failed += keywords_insert("GEOMETRYCOLLECTIONZM", GEOMETRYSUBTYPE); - // escape sequence keywords + // odbc keywords failed += keywords_insert("d", DATE_ESCAPE_PREFIX); failed += keywords_insert("t", TIME_ESCAPE_PREFIX); failed += keywords_insert("ts", TIMESTAMP_ESCAPE_PREFIX); failed += keywords_insert("guid", GUID_ESCAPE_PREFIX); failed += keywords_insert("fn", ODBC_FUNC_ESCAPE_PREFIX); + failed += keywords_insert("SQL_INTERVAL_DAY", SQL_INTERVAL_DAY); return failed; } diff --git a/sql/test/escape-sequences/Tests/scalar-functions.test b/sql/test/escape-sequences/Tests/scalar-functions.test --- a/sql/test/escape-sequences/Tests/scalar-functions.test +++ b/sql/test/escape-sequences/Tests/scalar-functions.test @@ -3,3 +3,8 @@ select { fn abs(-3) } ---- 3 +query I rowsort +select { fn convert(date'2022-10-8' - date'2022-10-7', SQL_INTERVAL_DAY) } +---- +1 + _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org