Changeset: c15390a9cc27 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c15390a9cc27
Modified Files:
        java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
Branch: default
Log Message:

JDBC driver will now fetch the list of keywords from the server (querying table 
sys.keywords).

ToDo: also implement similar logic in odbc/driver/SQLGetInfo.c for case 
SQL_KEYWORDS


diffs (49 lines):

diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java 
b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
--- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -384,8 +384,43 @@ public class MonetDatabaseMetaData exten
         */
        @Override
        public String getSQLKeywords() {
-               /* return same list as returned in odbc/driver/SQLGetInfo.c 
case SQL_KEYWORDS: */
-               return  "ADMIN,AFTER,AGGREGATE,ALWAYS,ASYMMETRIC,ATOMIC," +
+               StringBuilder sb = new StringBuilder(1000);
+               Statement st = null;
+               ResultSet rs = null;
+               try {
+                       st = getStmt();
+                       rs = st.executeQuery("SELECT \"keyword\" FROM 
\"sys\".\"keywords\" ORDER BY 1");
+                       // Fetch the keywords and concatenate them into a 
StringBuffer separated by comma's
+                       boolean isfirst = true;
+                       while (rs.next()) {
+                               String keyword = rs.getString(1);
+                               if (keyword != null) {
+                                       if (isfirst) {
+                                               isfirst = false;
+                                       } else {
+                                               sb.append(",");
+                                       }
+                                       sb.append(keyword);
+                               }
+                       }
+               } catch (SQLException e) {
+                       /* This may occur for old (before Jul2015 release) 
MonetDB servers which do not have the sys.keywords table. */
+               } finally {
+                       if (rs != null) {
+                               try {
+                                       rs.close();
+                               } catch (SQLException e) { /* ignore */ }
+                       }
+                       if (st != null) {
+                               try {
+                                        st.close();
+                               } catch (SQLException e) { /* ignore */ }
+                       }
+               }
+
+               return (sb.length() > 0) ? sb.toString() :
+                       /* else fallback and return old static list (as 
returned in clients/odbc/driver/SQLGetInfo.c case SQL_KEYWORDS:) */
+                       "ADMIN,AFTER,AGGREGATE,ALWAYS,ASYMMETRIC,ATOMIC," +
                        "AUTO_INCREMENT,BEFORE,BIGINT,BIGSERIAL,BINARY,BLOB," +
                        "CALL,CHAIN,CLOB,COMMITTED,COPY,CORR,CUME_DIST," +
                        "CURRENT_ROLE,CYCLE,DATABASE,DELIMITERS,DENSE_RANK," +
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to