Changeset: cc6425e98017 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/cc6425e98017
Modified Files:
        src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
        src/main/java/org/monetdb/mcl/net/ClientInfo.java
Branch: default
Log Message:

Implement DatabaseMetaData.getClientInfoProperties


diffs (76 lines):

diff --git a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java 
b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
--- a/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -12,6 +12,8 @@
 
 package org.monetdb.jdbc;
 
+import org.monetdb.mcl.net.ClientInfo;
+
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.Statement;
@@ -3917,17 +3919,36 @@ public final class MonetDatabaseMetaData
         */
        @Override
        public ResultSet getClientInfoProperties() throws SQLException {
-               // MonetDB currently does not support any client properties, so 
return an empty ResultSet
+               // This query combines the properties we know about with any 
additional properties that
+               // may have been added to sys.clientinfo_properties in the mean 
time.
                final String query =
-               "SELECT cast(null as varchar(64)) AS \"NAME\", " +
-                       "cast(0 as int) AS \"MAX_LEN\", " +
-                       "cast(null as varchar(128)) AS \"DEFAULT_VALUE\", " +
-                       "cast(null as varchar(128)) AS \"DESCRIPTION\" " +
-               "WHERE 1=0";
+                               "WITH jdbc_info AS (\n" +
+                               "    SELECT 'ApplicationName' AS \"NAME\", NULL 
AS \"MAX_LEN\", " + stringEscape(ClientInfo.defaultApplicationName) + " AS 
\"DEFAULT_VALUE\", 'Name of the application' AS \"DESCRIPTION\", 0 AS i\n" +
+                               "    UNION ALL\n" +
+                               "    SELECT 'ClientHostname' AS \"NAME\", NULL 
AS \"MAX_LEN\", " + stringEscape(ClientInfo.defaultHostname) + " AS 
\"DEFAULT_VALUE\", 'Host the application is running on' AS \"DESCRIPTION\", 1 
AS i\n" +
+                               "    UNION ALL\n" +
+                               "    SELECT 'ClientRemark' AS \"NAME\", 256 AS 
\"MAX_LEN\", R'' AS \"DEFAULT_VALUE\", 'Additional information' AS 
\"DESCRIPTION\", 2 AS i\n" +
+                               "    UNION ALL\n" +
+                               "    SELECT 'ClientLibrary' AS \"NAME\", NULL 
AS \"MAX_LEN\", " + stringEscape(ClientInfo.defaultClientLibrary) + " AS 
\"DEFAULT_VALUE\", 'Name and version of the driver' AS \"DESCRIPTION\", 3 AS 
i\n" +
+                               "    UNION ALL\n" +
+                               "    SELECT 'ClientPid' AS \"NAME\", 10 AS 
\"MAX_LEN\", " + stringEscape(ClientInfo.defaultPid) + " AS \"DEFAULT_VALUE\", 
'Process id of the application' AS \"DESCRIPTION\", 4 AS i\n" +
+                               ")\n" +
+                               "SELECT\n" +
+                               "    prop AS \"NAME\",\n" +
+                               "    COALESCE(\"MAX_LEN\", 24) AS 
\"MAX_LEN\",\n" +
+                               "    \"DEFAULT_VALUE\",\n" +
+                               "    \"DESCRIPTION\"\n" +
+                               "FROM sys.clientinfo_properties AS sys_info 
LEFT OUTER JOIN jdbc_info ON prop = \"NAME\"\n" +
+                               "ORDER BY COALESCE(i, 1000), \"NAME\"\n"
+                               ;
 
                return executeMetaDataQuery(query);
        }
 
+       private static String stringEscape(String s) {
+               return "R'" + s.replaceAll("'", "''") + "'";
+       }
+
        /**
         * Retrieves a description of the system and user functions
         * available in the given catalog.
diff --git a/src/main/java/org/monetdb/mcl/net/ClientInfo.java 
b/src/main/java/org/monetdb/mcl/net/ClientInfo.java
--- a/src/main/java/org/monetdb/mcl/net/ClientInfo.java
+++ b/src/main/java/org/monetdb/mcl/net/ClientInfo.java
@@ -21,13 +21,13 @@ import java.util.Set;
  * @{link SQLClientInfoException} if there is a failure
  */
 public class ClientInfo {
-       private static final String defaultHostname = findHostname();
+       public static final String defaultHostname = findHostname();
 
-       private static final String defaultClientLibrary = findClientLibrary();
+       public static final String defaultClientLibrary = findClientLibrary();
 
-       private static final String defaultApplicationName = 
findApplicationName();
+       public static final String defaultApplicationName = 
findApplicationName();
 
-       private static final String defaultPid = findPid();
+       public static final String defaultPid = findPid();
 
        private final Properties props;
        private HashMap<String, ClientInfoStatus> problems = null;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to