changeset 245:55375d489024

Corrected return values of DatabaseMetaData methods allTablesAreSelectable() and allProceduresAreCallable(). They used to return true but now return false. This issue is found when analysing bug 6617.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 28 Jun 2018 18:33:03 +0200 (2018-06-28)
parents 337a1292fe18
children 46385d8ff8c9
files ChangeLog src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
diffstat 2 files changed, 40 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,39 +1,8 @@
 # ChangeLog file for monetdb-java
 # This file is updated with Maddlog
 
-* Wed May 23 2018 Sjoerd Mullender <sjoerd@acm.org>
-- Compiled and released new jars: monetdb-jdbc-2.28.jar, monetdb-mcl-1.17.jar
-  and updated jdbcclient.jar
-
-* Thu Apr 26 2018 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
-- Corrected and extended output of DatabaseMetaData methods
-  getTimeDateFunctions() and getSystemFunctions().  The Date/Time functions
-  (curdate, current_date, current_time, current_timestamp, curtime,
-  local_timezone, localtime, localtimestamp) were returned by
-  getSystemFunctions() but are now returned by getTimeDateFunctions().
-  getTimeDateFunctions() now also lists functions: date_to_str, extract, now,
-  str_to_date, str_to_time, str_to_timestamp, time_to_str and timestamp_to_str.
-- Improved DatabaseMetaData methods getTablePrivileges() and
-  getColumnPrivileges() by returning also any combination of privileges
-  for the table or column in the PRIVILEGE result column. Previously only
-  single privileges (SELECT or UPDATE or INSERT or DELETE or EXECUTE or
-  GRANT) would be returned.
+* Thu Jun 28 2018 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
+- Corrected return values of DatabaseMetaData methods
+  allTablesAreSelectable() and allProceduresAreCallable().
+  They used to return true but now return false.
 
-* Thu Apr 19 2018 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
-- Corrected method DatabaseMetaData.getFunctions() for result column
-  FUNCTION_TYPE.  It used to return DatabaseMetaData.functionResultUnknown
-  value for Analytic (functions.type 6) and Loader function (functions type 7).
-  It now returns DatabaseMetaData.functionNoTable for Analytic functions and
-  DatabaseMetaData.functionReturnsTable for Loader functions.
-- DatabaseMetaData methods getTables(), getColumns(), getProcedures() and
-  getFunctions() now return the comment in the REMARKS result column when a
-  comment has been set for the table / view / column / procedure / function
-  via the SQL command COMMENT ON <db-object type> <qname> IS 'comment-text'.
-
-* Thu Dec 14 2017 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
-- Fixed a problem with retrieving Dates and Timestamps which contained a
-  year value less than 1000. It would throw an SQLDataException with message:
-   Could not convert value to a Date. Expected JDBC date escape format
-   yyyy-[m]m-[d]d.
-  See also: https://www.monetdb.org/bugzilla/show_bug.cgi?id=6468
-
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
@@ -107,25 +107,27 @@ public class MonetDatabaseMetaData exten
 	}
 
 	/**
-	 * Can all the procedures returned by getProcedures be called
-	 * by the current user?
+	 * Retrieves whether the current user can call all the procedures
+	 * returned by the method getProcedures.
 	 *
-	 * @return true if so
+	 * @return false because we currently return all procedures from sys.functions
+	 *    and do not filter on EXECUTE privilege or procedure ownership.
 	 */
 	@Override
 	public boolean allProceduresAreCallable() {
-		return true;
+		return false;
 	}
 
 	/**
-	 * Can all the tables returned by getTable be SELECTed by
-	 * the current user?
+	 * Retrieves whether the current user can use all the tables
+	 * returned by the method getTables in a SELECT statement.
 	 *
-	 * @return true because we only have one user a.t.m.
+	 * @return false because we currently return all tables from sys.tables
+	 *    and do not filter on SELECT privilege or table ownership.
 	 */
 	@Override
 	public boolean allTablesAreSelectable() {
-		return true;
+		return false;
 	}
 
 	/**
@@ -1698,6 +1700,7 @@ public class MonetDatabaseMetaData exten
 	 *	"" retrieves those without a schema;
 	 *	null means that the schema name should not be used to narrow the search
 	 * @param procedureNamePattern - a procedure name pattern; must match the procedure name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet - each row is a procedure description
 	 * @throws SQLException if a database access error occurs
 	 */
@@ -1807,7 +1810,9 @@ public class MonetDatabaseMetaData exten
 	 *	"" retrieves those without a schema;
 	 *	null means that the schema name should not be used to narrow the search
 	 * @param procedureNamePattern - a procedure name pattern; must match the procedure name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param columnNamePattern - a column name pattern; must match the column name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet - each row describes a stored procedure parameter or column
 	 * @throws SQLException if a database-access error occurs
 	 * @see #getSearchStringEscape
@@ -1877,7 +1882,7 @@ public class MonetDatabaseMetaData exten
 
 	/**
 	 * Returns a SQL match part string where depending on the input value we
-	 * compose an exact match (use =) or match with wildcards (use LIKE)
+	 * compose an exact match (use =) or match with wildcards (use LIKE) or IS NULL
 	 *
 	 * @param in the string to match
 	 * @return the SQL match part string
@@ -1941,6 +1946,7 @@ public class MonetDatabaseMetaData exten
 	 *	null means that the schema name should not be used to narrow the search
 	 * @param tableNamePattern - a table name pattern; must match the table name as it is stored in the database
 	 *	For all tables this should be "%"
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param types - a list of table types, which must be from the list of table types returned
 	 *	from getTableTypes(),to include; null returns all types
 	 * @return ResultSet - each row is a table description
@@ -2199,7 +2205,9 @@ public class MonetDatabaseMetaData exten
 	 *	null means that the schema name should not be used to narrow the search
 	 * @param tableNamePattern - a table name pattern; must match the table name as it is stored in the database
 	 *	For all tables this should be "%"
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param columnNamePattern - a column name pattern; must match the column name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet - each row is a column description
 	 * @throws SQLException if a database error occurs
 	 * @see #getSearchStringEscape
@@ -2295,7 +2303,9 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schemaPattern a schema name; "" retrieves those without a schema
 	 * @param tableNamePattern a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param columnNamePattern a column name pattern
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a column privilege description
 	 * @see #getSearchStringEscape
 	 * @throws SQLException if a database error occurs
@@ -2394,6 +2404,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schemaPattern a schema name pattern; "" retrieves those without a schema
 	 * @param tableNamePattern a table name pattern
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a table privilege description
 	 * @see #getSearchStringEscape
 	 * @throws SQLException if a database error occurs
@@ -2491,6 +2502,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schema a schema name; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param scope the scope of interest; use same values as SCOPE
 	 * @param nullable include columns that are nullable?
 	 * @return ResultSet each row is a column description
@@ -2577,6 +2589,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schema a schema name; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a column description
 	 * @throws SQLException if a database error occurs
 	 */
@@ -2617,9 +2630,9 @@ public class MonetDatabaseMetaData exten
 	 *	</OL>
 	 *
 	 * @param catalog a catalog name; "" retrieves those without a catalog
-	 * @param schema a schema name pattern; "" retrieves those
-	 * without a schema
+	 * @param schema a schema name pattern; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a primary key column description
 	 * @throws SQLException if a database error occurs
 	 */
@@ -2754,6 +2767,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schema a schema name pattern; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a primary key column description
 	 * @see #getExportedKeys
 	 * @throws SQLException if a database error occurs
@@ -2838,6 +2852,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schema a schema name pattern; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a foreign key column description
 	 * @see #getImportedKeys
 	 * @throws SQLException if a database error occurs
@@ -2925,9 +2940,11 @@ public class MonetDatabaseMetaData exten
 	 * @param pcatalog primary key catalog name; "" retrieves those without a catalog
 	 * @param pschema primary key schema name pattern; "" retrieves those without a schema
 	 * @param ptable primary key table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param fcatalog foreign key catalog name; "" retrieves those without a catalog
 	 * @param fschema foreign key schema name pattern; "" retrieves those without a schema
 	 * @param ftable koreign key table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet each row is a foreign key column description
 	 * @throws SQLException if a database error occurs
 	 * @see #getImportedKeys
@@ -3102,6 +3119,7 @@ public class MonetDatabaseMetaData exten
 	 * @param catalog a catalog name; "" retrieves those without a catalog
 	 * @param schema a schema name pattern; "" retrieves those without a schema
 	 * @param table a table name
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param unique when true, return only indices for unique values;
 	 *	   when false, return indices regardless of whether unique or not
 	 * @param approximate when true, result is allowed to reflect approximate
@@ -3468,10 +3486,8 @@ public class MonetDatabaseMetaData exten
 	 *
 	 * @param catalog a catalog name; "" retrieves those without a catalog;
 	 *		  <code>null</code> means drop catalog name from the selection criteria
-	 * @param schemaPattern a schema name pattern; "" retrieves those
-	 *		  without a schema
-	 * @param typeNamePattern a UDT name pattern; may be a fully-qualified
-	 *		  name
+	 * @param schemaPattern a schema name pattern; "" retrieves those without a schema
+	 * @param typeNamePattern a UDT name pattern; may be a fully-qualified name
 	 * @return a <code>ResultSet</code> object in which a row gives information
 	 *		   about the designated UDT
 	 * @throws SQLException if a database access error occurs
@@ -3516,10 +3532,8 @@ public class MonetDatabaseMetaData exten
 	 *
 	 * @param catalog a catalog name; "" retrieves those without a catalog;
 	 *		  <code>null</code> means drop catalog name from the selection criteria
-	 * @param schemaPattern a schema name pattern; "" retrieves those
-	 *		  without a schema
-	 * @param tableNamePattern a table name pattern; may be a fully-qualified
-	 *		  name
+	 * @param schemaPattern a schema name pattern; "" retrieves those without a schema
+	 * @param tableNamePattern a table name pattern; may be a fully-qualified name
 	 * @return a <code>ResultSet</code> object in which each row is a type description
 	 * @throws SQLException if a database access error occurs
 	 */
@@ -3905,6 +3919,7 @@ public class MonetDatabaseMetaData exten
 	 *        not be used to narrow the search
 	 * @param functionNamePattern a function name pattern; must match
 	 *        the function name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet - each row is a function description
 	 * @throws SQLException if a database access error occurs
 	 */
@@ -4008,8 +4023,10 @@ public class MonetDatabaseMetaData exten
 	 *        not be used to narrow the search
 	 * @param functionNamePattern a procedure name pattern; must match the
 	 *        function name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @param columnNamePattern a parameter name pattern; must match the
 	 *        parameter or column name as it is stored in the database
+	 *   Note that our implementation allows this param to be null also (for efficiency as no extra LIKE "%" condition is added to be evaluated).
 	 * @return ResultSet - each row describes a user function parameter,
 	 *         column or return type
 	 * @throws SQLException - if a database access error occurs