changeset 730:ee061ab9ee32

Corrected DatabaseMetaData.getSQLKeywords() output. It used to return all MonetDB SQL keywords, but now it excludes the SQL:2003 keywords as defined by the Java JDBC API specification.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 09 Feb 2023 16:31:27 +0100 (2023-02-09)
parents 6c9abd326ad2
children 4b11238ebe15
files ChangeLog src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
diffstat 2 files changed, 48 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for monetdb-java
 # This file is updated with Maddlog
 
+* Thu Feb  9 2023 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
+- Corrected DatabaseMetaData.getSQLKeywords() output. It used to return
+  all MonetDB SQL keywords, but now it excludes the SQL:2003 keywords
+  as defined by the Java JDBC API specification.
+
 * Thu Jan 19 2023 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
 - Corrected DatabaseMetaData.getUDTs() output. It used to return rows
   for system types: inet, json, url and uuid. However those are not User
--- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -325,14 +325,53 @@ public final class MonetDatabaseMetaData
 	}
 
 	/**
-	 * Get a comma separated list of all a database's SQL keywords that
-	 * are NOT also SQL:2003 keywords.
+	 * Retrieves a comma-separated list of all of this database's
+	 * SQL keywords that are NOT also SQL:2003 keywords.
 	 *
-	 * @return a comma separated list of MonetDB keywords
+	 * @return a comma separated list of MonetDB keywords that are not also SQL:2003 keywords
 	 */
 	@Override
 	public String getSQLKeywords() {
-		final String keywords = getConcatenatedStringFromQuery("SELECT \"keyword\" FROM \"sys\".\"keywords\" ORDER BY 1");
+		final String keywords = getConcatenatedStringFromQuery(
+			"SELECT \"keyword\" FROM \"sys\".\"keywords\" " +
+			// exclude all SQL:2003 keywords
+			"WHERE \"keyword\" NOT IN (" +
+			"'ABS','ALL','ALLOCATE','ALTER','AND','ANY','ARE','ARRAY','AS'," +
+			"'ASENSITIVE','ASYMMETRIC','AT','ATOMIC','AUTHORIZATION','AVG'," +
+			"'BEGIN','BETWEEN','BIGINT','BINARY','BLOB','BOOLEAN','BOTH','BY'," +
+			"'CALL','CALLED','CARDINALITY','CASCADED','CASE','CAST','CEIL','CEILING'," +
+			"'CHAR','CHARACTER','CHARACTER_LENGTH','CHAR_LENGTH','CHECK','CLOB'," +
+			"'CLOSE','COALESCE','COLLATE','COLLECT','COLUMN','COMMIT','CONDITION'," +
+			"'CONNECT','CONSTRAINT','CONVERT','CORR','CORRESPONDING','COUNT'," +
+			"'COVAR_POP','COVAR_SAMP','CREATE','CROSS','CUBE','CUME_DIST','CURRENT','CURRENT_DATE'," +
+			"'CURRENT_DEFAULT_TRANSFORM_GROUP','CURRENT_PATH','CURRENT_ROLE','CURRENT_TIME'," +
+			"'CURRENT_TIMESTAMP','CURRENT_TRANSFORM_GROUP_FOR_TYPE','CURRENT_USER','CURSOR','CYCLE'," +
+			"'DATE','DAY','DEALLOCATE','DEC','DECIMAL','DECLARE','DEFAULT','DELETE','DENSE_RANK','DEREF'," +
+			"'DESCRIBE','DETERMINISTIC','DISCONNECT','DISTINCT','DOUBLE','DROP','DYNAMIC'," +
+			"'EACH','ELEMENT','ELSE','END','END-EXEC','ESCAPE','EVERY','EXCEPT','EXEC','EXECUTE','EXISTS','EXP','EXTERNAL','EXTRACT'," +
+			"'FALSE','FETCH','FILTER','FLOAT','FLOOR','FOR','FOREIGN','FREE','FROM','FULL','FUNCTION','FUSION'," +
+			"'GET','GLOBAL','GRANT','GROUP','GROUPING','HAVING','HOLD','HOUR'," +
+			"'IDENTITY','IN','INDICATOR','INNER','INOUT','INSENSITIVE','INSERT'," +
+			"'INT','INTEGER','INTERSECT','INTERSECTION','INTERVAL','INTO','IS','JOIN'," +
+			"'LANGUAGE','LARGE','LATERAL','LEADING','LEFT','LIKE','LN','LOCAL','LOCALTIME','LOCALTIMESTAMP','LOWER'," +
+			"'MATCH','MAX','MEMBER','MERGE','METHOD','MIN','MINUTE','MOD','MODIFIES','MODULE','MONTH','MULTISET'," +
+			"'NATIONAL','NATURAL','NCHAR','NCLOB','NEW','NO','NONE','NORMALIZE','NOT','NULL','NULLIF','NUMERIC'," +
+			"'OCTET_LENGTH','OF','OLD','ON','ONLY','OPEN','OR','ORDER','OUT','OUTER','OVER','OVERLAPS','OVERLAY'," +
+			"'PARAMETER','PARTITION','PERCENTILE_CONT','PERCENTILE_DISC','PERCENT_RANK'," +
+			"'POSITION','POWER','PRECISION','PREPARE','PRIMARY','PROCEDURE'," +
+			"'RANGE','RANK','READS','REAL','RECURSIVE','REF','REFERENCES','REFERENCING'," +
+			"'REGR_AVGX','REGR_AVGY','REGR_COUNT','REGR_INTERCEPT','REGR_R2','REGR_SLOPE','REGR_SXX','REGR_SXY','REGR_SYY'," +
+			"'RELEASE','RESULT','RETURN','RETURNS','REVOKE','RIGHT','ROLLBACK','ROLLUP','ROW','ROWS','ROW_NUMBER'," +
+			"'SAVEPOINT','SCOPE','SCROLL','SEARCH','SECOND','SELECT','SENSITIVE','SESSION_USER','SET'," +
+			"'SIMILAR','SMALLINT','SOME','SPECIFIC','SPECIFICTYPE','SQL','SQLEXCEPTION','SQLSTATE','SQLWARNING'," +
+			"'SQRT','START','STATIC','STDDEV_POP','STDDEV_SAMP','SUBMULTISET','SUBSTRING','SUM'," +
+			"'SYMMETRIC','SYSTEM','SYSTEM_USER'," +
+			"'TABLE','TABLESAMPLE','THEN','TIME','TIMESTAMP','TIMEZONE_HOUR','TIMEZONE_MINUTE'," +
+			"'TO','TRAILING','TRANSLATE','TRANSLATION','TREAT','TRIGGER','TRIM','TRUE'," +
+			"'UESCAPE','UNION','UNIQUE','UNKNOWN','UNNEST','UPDATE','UPPER','USER','USING'," +
+			"'VALUE','VALUES','VARCHAR','VARYING','VAR_POP','VAR_SAMP'," +
+			"'WHEN','WHENEVER','WHERE','WIDTH_BUCKET','WINDOW','WITH','WITHIN','WITHOUT','YEAR'" +
+			") ORDER BY 1");
 
 		/* An old MonetDB server (pre Jul2015 release) will not have a table sys.keywords and return an empty String */
 		return (keywords.isEmpty()) ?