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

Extend getSystemFunctions() to also report system functions database() and 
ifnull() if they exist in sys.functions and can be called without odbc escape 
sequences.


diffs (36 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
@@ -433,7 +433,8 @@ public final class MonetDatabaseMetaData
        }
 
        // SQL query parts shared by four get<Type>Functions() below
-       private static final String FunctionsSelect = "SELECT DISTINCT CASE 
WHEN \"language\" > 0 THEN s.\"name\"||'.'||f.\"name\" ELSE f.\"name\" END FROM 
\"sys\".\"functions\" f JOIN \"sys\".\"schemas\" s ON f.\"schema_id\" = 
s.\"id\" WHERE ";
+       private static final String FunctionsSelect = "SELECT DISTINCT CASE 
WHEN f.\"language\" > 0 THEN s.\"name\"||'.'||f.\"name\" ELSE f.\"name\" END" +
+                                       " FROM \"sys\".\"functions\" f JOIN 
\"sys\".\"schemas\" s ON f.\"schema_id\" = s.\"id\" WHERE ";
        private static final String FunctionsWhere = "(f.\"id\" IN (SELECT 
\"func_id\" FROM \"sys\".\"args\" WHERE \"number\" = 1 AND \"name\" = 'arg_1' 
AND \"type\" IN ";
        // Scalar functions sql_max(x,y), sql_min(x,y), greatest(x,y) and 
least(x,y) are defined in sys.args for type 'any' and usable as num, str and 
timedate functions.
        private static final String OrFunctionsMaxMin = " OR f.\"name\" IN 
('sql_max','sql_min','least','greatest')";
@@ -471,11 +472,12 @@ public final class MonetDatabaseMetaData
        @Override
        public String getSystemFunctions() {
                final String wherePart =
-                       "f.\"name\" IN 
('columnsize','debug','get_value_for','hash','hashsize','heapsize'" +
-                       
",'ifthenelse','imprintsize','isaurl','isauuid','isnull','masterclock','mastertick'"
 +
+                       "f.\"name\" IN 
('columnsize','database','debug','get_value_for','hash','hashsize','heapsize'" +
+                       
",'ifnull','ifthenelse','imprintsize','isaurl','isauuid','isnull','masterclock','mastertick'"
 +
                        
",'newurl','next_value_for','password_hash','replicaclock','replicatick','uuid')"
 +
                        // add functions which are not listed in sys.functions 
but implemented in the SQL parser (see sql/server/sql_parser.y)
                        " UNION ALL SELECT * FROM 
(VALUES('cast'),('coalesce'),('convert'),('nullif')) as sf";
+                       // ToDo: from release 11.47.1 we also support function: 
ifnull, but only with odbc escape notation, so {fn ifnull(null, 2)}. Related 
issue: 6933.
                return getConcatenatedStringFromQuery(FunctionsSelect + 
wherePart + FunctionsOrderBy1);
        }
 
@@ -489,6 +491,7 @@ public final class MonetDatabaseMetaData
                        // add time date functions which are not listed in 
sys.functions but implemented in the SQL parser (see sql/server/sql_parser.y)
                        " UNION SELECT 'extract'" +
                        " UNION SELECT 'now'";
+                       // ToDo: from release 11.47.1 we also support 
functions: dayname and monthname, but only with odbc escape notation, so {fn 
dayname(current_date)}. Related issue: 7300.
                return getConcatenatedStringFromQuery(FunctionsSelect + 
wherePart + OrFunctionsMaxMin + unionPart + FunctionsOrderBy1);
        }
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to