changeset 19:7acc09f59b21

Added missing scalar functions sql_max and sql_min to the lists returned by getNumericFunctions(), getStringFunctions() and getTimeDateFunctions().
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 13 Oct 2016 17:22:24 +0200 (2016-10-13)
parents 8e57d20b5e80
children dbb8e7c2dbbf
files src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -476,9 +476,13 @@ public class MonetDatabaseMetaData exten
 		return sb.toString();
 	}
 
-	// SQL query parts shared in below four getXxxxFunctions() methods
+	// SQL query parts shared by four get<Type>Functions() below
 	private final static String FunctionsSelect = "SELECT DISTINCT \"name\" FROM \"sys\".\"functions\" ";
 	private final static String FunctionsWhere = "WHERE \"id\" IN (SELECT \"func_id\" FROM \"sys\".\"args\" WHERE \"number\" = 1 AND \"name\" = 'arg_1' AND \"type\" IN ";
+	// Scalar functions sql_max(x, y) and sql_min(x, y) are defined in sys.args only for type 'any'.
+	// Easiest way to include them in the Num, Str and TimeDate lists is to add them explicitly via UNION SQL:
+	private final static String AddFunctionsMaxMin = " UNION SELECT 'sql_max' UNION SELECT 'sql_min'";
+	private final static String FunctionsOrderBy1 = " ORDER BY 1";
 
 	@Override
 	public String getNumericFunctions() {
@@ -486,7 +490,7 @@ public class MonetDatabaseMetaData exten
 			"('tinyint', 'smallint', 'int', 'bigint', 'hugeint', 'decimal', 'double', 'real') )" +
 			// exclude functions which belong to the 'str' module
 			" AND \"mod\" <> 'str'";
-		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + " ORDER BY 1");
+		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + AddFunctionsMaxMin + FunctionsOrderBy1);
 	}
 
 	@Override
@@ -495,7 +499,7 @@ public class MonetDatabaseMetaData exten
 			"('char', 'varchar', 'clob', 'json') )" +
 			// include functions which belong to the 'str' module
 			" OR \"mod\" = 'str'";
-		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + " ORDER BY 1");
+		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + AddFunctionsMaxMin + FunctionsOrderBy1);
 	}
 
 	@Override
@@ -512,14 +516,14 @@ public class MonetDatabaseMetaData exten
 			" UNION SELECT 'ifthenelse'" +
 			" UNION SELECT 'isnull'" +
 			" UNION SELECT 'nullif'";
-		return getConcatenatedStringFromQuery(FunctionsSelect + wherePart + " ORDER BY 1");
+		return getConcatenatedStringFromQuery(FunctionsSelect + wherePart + FunctionsOrderBy1);
 	}
 
 	@Override
 	public String getTimeDateFunctions() {
 		String match =
 			"('date', 'time', 'timestamp', 'timetz', 'timestamptz', 'sec_interval', 'month_interval') )";
-		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + " ORDER BY 1");
+		return getConcatenatedStringFromQuery(FunctionsSelect + FunctionsWhere + match + AddFunctionsMaxMin + FunctionsOrderBy1);
 	}
 
 	/**