Changeset: 901b7411bd8e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/901b7411bd8e
Modified Files:
        clients/odbc/driver/SQLGetInfo.c
        clients/odbc/tests/ODBCgetInfo.c
Branch: default
Log Message:

Correct information returned by SQLGetInfo(hdbc, SQL_KEYWORDS, ...)
It used to return all MonetDB keywords but it should not contain the ODBC 
reseved keywords, see
https://learn.microsoft.com/en-us/sql/odbc/reference/appendixes/reserved-keywords
https://learn.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetinfo-function


diffs (131 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
@@ -663,9 +663,46 @@ MNDBGetInfo(ODBCDbc *dbc,
                 * SQL_CA2_SIMULATE_UNIQUE */
                break;
        case SQL_KEYWORDS:
-               /* Returns the MonetDB keywords, i.e. a dump of
-                * sys.keywords */
-               if ((hdl = mapi_query(dbc->mid, "WITH x(k) AS (SELECT keyword 
FROM sys.keywords ORDER BY keyword) SELECT group_concat(k, ',') FROM x")) != 
NULL && mapi_fetch_row(hdl)) {
+               /* A character string that contains a comma-separated list of 
all data source-specific keywords.
+                * This list does not contain keywords specific to ODBC or 
keywords used by both the data source and ODBC.
+                * This list represents all the reserved keywords; 
interoperable applications should not use these words in object names.
+                * Returns the MonetDB sys.keywords minus the ODBC keywords: 
https://learn.microsoft.com/en-us/sql/odbc/reference/appendixes/reserved-keywords
 */
+               hdl = mapi_query(dbc->mid,
+                       "WITH x(k) AS (SELECT keyword FROM sys.keywords WHERE 
keyword NOT IN ("
+                       
"'ABSOLUTE','ACTION','ADA','ADD','ALL','ALLOCATE','ALTER','AND','ANY',"
+                       
"'ARE','AS','ASC','ASSERTION','AT','AUTHORIZATION','AVG',"
+                       "'BEGIN','BETWEEN','BIT','BIT_LENGTH','BOTH','BY',"
+                       
"'CASCADE','CASCADED','CASE','CAST','CATALOG','CHAR','CHAR_LENGTH',"
+                       
"'CHARACTER','CHARACTER_LENGTH','CHECK','CLOSE','COALESCE',"
+                       
"'COLLATE','COLLATION','COLUMN','COMMIT','CONNECT','CONNECTION','CONSTRAINT',"
+                       
"'CONSTRAINTS','CONTINUE','CONVERT','CORRESPONDING','COUNT','CREATE','CROSS',"
+                       
"'CURRENT','CURRENT_DATE','CURRENT_TIME','CURRENT_TIMESTAMP','CURRENT_USER','CURSOR',"
+                       
"'DATE','DAY','DEALLOCATE','DEC','DECIMAL','DECLARE','DEFAULT','DEFERRABLE',"
+                       
"'DEFERRED','DELETE','DESC','DESCRIBE','DESCRIPTOR','DIAGNOSTICS','DISCONNECT',"
+                       "'DISTINCT','DOMAIN','DOUBLE','DROP',"
+                       
"'ELSE','END','END-EXEC','ESCAPE','EXCEPT','EXCEPTION','EXEC','EXECUTE',"
+                       "'EXISTS','EXTERNAL','EXTRACT',"
+                       
"'FALSE','FETCH','FIRST','FLOAT','FOR','FOREIGN','FORTRAN','FOUND','FROM','FULL',"
+                       
"'GET','GLOBAL','GO','GOTO','GRANT','GROUP','HAVING','HOUR',"
+                       
"'IDENTITY','IMMEDIATE','IN','INCLUDE','INDEX','INDICATOR','INITIALLY','INNER','INPUT',"
+                       
"'INSENSITIVE','INSERT','INT','INTEGER','INTERSECT','INTERVAL','INTO','IS','ISOLATION',"
+                       
"'JOIN','KEY','LANGUAGE','LAST','LEADING','LEFT','LEVEL','LIKE','LOCAL','LOWER',"
+                       "'MATCH','MAX','MIN','MINUTE','MODULE','MONTH',"
+                       
"'NAMES','NATIONAL','NATURAL','NCHAR','NEXT','NO','NONE','NOT','NULL','NULLIF','NUMERIC',"
+                       
"'OCTET_LENGTH','OF','ON','ONLY','OPEN','OPTION','OR','ORDER','OUTER','OUTPUT','OVERLAPS',"
+                       
"'PAD','PARTIAL','PASCAL','PLI','POSITION','PRECISION','PREPARE','PRESERVE',"
+                       "'PRIMARY','PRIOR','PRIVILEGES','PROCEDURE','PUBLIC',"
+                       
"'READ','REAL','REFERENCES','RELATIVE','RESTRICT','REVOKE','RIGHT','ROLLBACK','ROWS',"
+                       
"'SCHEMA','SCROLL','SECOND','SECTION','SELECT','SESSION','SESSION_USER','SET',"
+                       
"'SIZE','SMALLINT','SOME','SPACE','SQL','SQLCA','SQLCODE','SQLERROR',"
+                       
"'SQLSTATE','SQLWARNING','SUBSTRING','SUM','SYSTEM_USER',"
+                       
"'TABLE','TEMPORARY','THEN','TIME','TIMESTAMP','TIMEZONE_HOUR','TIMEZONE_MINUTE',"
+                       
"'TO','TRAILING','TRANSACTION','TRANSLATE','TRANSLATION','TRIM','TRUE',"
+                       
"'UNION','UNIQUE','UNKNOWN','UPDATE','UPPER','USAGE','USER','USING',"
+                       "'VALUE','VALUES','VARCHAR','VARYING','VIEW',"
+                       "'WHEN','WHENEVER','WHERE','WITH','WORK','WRITE',"
+                       "'YEAR','ZONE') ORDER BY keyword) SELECT 
group_concat(k, ',') FROM x");
+               if (hdl != NULL && mapi_fetch_row(hdl)) {
                        sValue = mapi_fetch_field(hdl, 0);
                } else {
                        addDbcError(dbc, mapi_error(dbc->mid) == MTIMEOUT ? 
"HYT01" : "HY000", NULL, 0);
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
@@ -648,49 +648,33 @@ const struct {
                .info = SQL_KEYWORDS,
                .name = "SQL_KEYWORDS",
                .type = STRING,
-               .str = "ADD,ADMIN,AFTER,AGGREGATE,ALL,ALTER,ALWAYS,ANALYZE,AND,"
-                       "ANY,ASC,ASYMMETRIC,AT,ATOMIC,AUTHORIZATION,"
-                       "AUTO_INCREMENT,BEFORE,BEGIN,BEST,BETWEEN,BIG,BIGINT,"
-                       "BIGSERIAL,BINARY,BLOB,BY,CACHE,CALL,CASCADE,CASE,CAST,"
-                       "CENTURY,CHAIN,CHAR,CHARACTER,CHECK,CLIENT,CLOB,"
-                       "COALESCE,COLUMN,COMMENT,COMMIT,COMMITTED,CONSTRAINT,"
-                       "CONTINUE,CONVERT,COPY,CORRESPONDING,CREATE,CROSS,CUBE,"
-                       "CURRENT,CURRENT_DATE,CURRENT_ROLE,CURRENT_SCHEMA,"
-                       "CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_TIMEZONE,"
-                       "CURRENT_USER,CYCLE,DATA,DATE,DAY,DEALLOCATE,DEBUG,DEC,"
-                       "DECADE,DECIMAL,DECLARE,DEFAULT,DELETE,DELIMITERS,DESC,"
-                       "DIAGNOSTICS,DISTINCT,DO,DOUBLE,DOW,DOY,DROP,EACH,"
-                       "EFFORT,ELSE,ELSEIF,ENCRYPTED,END,ENDIAN,EPOCH,ESCAPE,"
-                       "EVERY,EXCEPT,EXCLUDE,EXEC,EXECUTE,EXISTS,EXPLAIN,"
-                       "EXTERNAL,EXTRACT,FALSE,FIRST,FLOAT,FOLLOWING,FOR,"
-                       "FOREIGN,FROM,FULL,FUNCTION,FWF,GENERATED,GLOBAL,GRANT,"
-                       "GROUP,GROUPING,GROUPS,HAVING,HOUR,HUGEINT,IDENTITY,IF,"
-                       "ILIKE,IMPRINTS,IN,INCREMENT,INDEX,INNER,INSERT,INT,"
-                       "INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,JOIN,KEY,"
-                       "LANGUAGE,LARGE,LAST,LATERAL,LEFT,LEVEL,LIKE,LIMIT,"
-                       "LITTLE,LOADER,LOCAL,LOCALTIME,LOCALTIMESTAMP,MATCH,"
-                       "MATCHED,MAXVALUE,MEDIUMINT,MERGE,MINUTE,MINVALUE,"
-                       "MONTH,NAME,NATIVE,NATURAL,NEW,NEXT,NO,NOT,NOW,NULL,"
-                       "NULLIF,NULLS,NUMERIC,OBJECT,OF,OFFSET,OLD,ON,ONLY,"
-                       "OPTION,OPTIONS,OR,ORDER,ORDERED,OTHERS,OUTER,OVER,"
-                       "PARTIAL,PARTITION,PASSWORD,PATH,PLAN,POSITION,"
-                       "PRECEDING,PRECISION,PREP,PREPARE,PRESERVE,PRIMARY,"
-                       "PRIVILEGES,PROCEDURE,PUBLIC,QUARTER,RANGE,READ,REAL,"
-                       "RECORDS,REFERENCES,REFERENCING,RELEASE,REMOTE,RENAME,"
-                       "REPEATABLE,REPLACE,REPLICA,RESTART,RESTRICT,RETURN,"
-                       "RETURNS,REVOKE,RIGHT,ROLE,ROLLBACK,ROLLUP,ROW,ROWS,"
-                       "SAMPLE,SAVEPOINT,SCHEMA,SECOND,SEED,SELECT,SEQUENCE,"
-                       "SERIAL,SERIALIZABLE,SERVER,SESSION,SESSION_USER,SET,"
-                       "SETS,SIMPLE,SIZE,SMALLINT,SOME,SPLIT_PART,START,"
-                       "STATEMENT,STDIN,STDOUT,STORAGE,STRING,SUBSTRING,"
-                       "SYMMETRIC,TABLE,TEMP,TEMPORARY,TEXT,THEN,TIES,TIME,"
-                       "TIMESTAMP,TINYINT,TO,TRACE,TRANSACTION,TRIGGER,TRUE,"
-                       "TRUNCATE,TYPE,UNBOUNDED,UNCOMMITTED,UNENCRYPTED,UNION,"
-                       "UNIQUE,UPDATE,USER,USING,VALUE,VALUES,VARCHAR,VARYING,"
-                       "VIEW,WEEK,WHEN,WHERE,WHILE,WINDOW,WITH,WORK,WRITE,"
+               .str = "ADMIN,AFTER,AGGREGATE,ALWAYS,ANALYZE,"
+                       "ASYMMETRIC,ATOMIC,AUTO_INCREMENT,"
+                       "BEFORE,BEST,BIG,BIGINT,BIGSERIAL,BINARY,BLOB,"
+                       "CACHE,CALL,CENTURY,CHAIN,CLIENT,CLOB,COMMENT,"
+                       "COMMITTED,COPY,CUBE,"
+                       "CURRENT_ROLE,CURRENT_SCHEMA,CURRENT_TIMEZONE,CYCLE,"
+                       "DATA,DEBUG,DECADE,DELIMITERS,DO,DOW,DOY,"
+                       "EACH,EFFORT,ELSEIF,ENCRYPTED,ENDIAN,EPOCH,EVERY,"
+                       "EXCLUDE,EXPLAIN,FOLLOWING,FUNCTION,FWF,"
+                       "GENERATED,GROUPING,GROUPS,"
+                       "HUGEINT,IF,ILIKE,IMPRINTS,INCREMENT,"
+                       
"LARGE,LATERAL,LIMIT,LITTLE,LOADER,LOCALTIME,LOCALTIMESTAMP,"
+                       "MATCHED,MAXVALUE,MEDIUMINT,MERGE,MINVALUE,"
+                       "NAME,NATIVE,NEW,NOW,NULLS,"
+                       "OBJECT,OFFSET,OLD,OPTIONS,ORDERED,OTHERS,OVER,"
+                       "PARTITION,PASSWORD,PATH,PLAN,PRECEDING,PREP,QUARTER,"
+                       
"RANGE,RECORDS,REFERENCING,RELEASE,REMOTE,RENAME,REPEATABLE,"
+                       
"REPLACE,REPLICA,RESTART,RETURN,RETURNS,ROLE,ROLLUP,ROW,"
+                       "SAMPLE,SAVEPOINT,SEED,SEQUENCE,SERIAL,SERIALIZABLE,"
+                       "SERVER,SETS,SIMPLE,SPLIT_PART,START,STATEMENT,"
+                       "STDIN,STDOUT,STORAGE,STRING,SYMMETRIC,"
+                       "TEMP,TEXT,TIES,TINYINT,TRACE,TRIGGER,TRUNCATE,TYPE,"
+                       "UNBOUNDED,UNCOMMITTED,UNENCRYPTED,"
+                       "WEEK,WHILE,WINDOW,"
                        "XMLAGG,XMLATTRIBUTES,XMLCOMMENT,XMLCONCAT,XMLDOCUMENT,"
                        "XMLELEMENT,XMLFOREST,XMLNAMESPACES,XMLPARSE,XMLPI,"
-                       "XMLQUERY,XMLSCHEMA,XMLTEXT,XMLVALIDATE,YEAR,ZONE",
+                       "XMLQUERY,XMLSCHEMA,XMLTEXT,XMLVALIDATE",
        },
        {
                .info = SQL_LIKE_ESCAPE_CLAUSE,
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to