You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2006/03/02 14:28:58 UTC

svn commit: r382379 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/jdbc/ testing/org/apache/derbyTesting/functionTests/master/ testing/org/apache/derbyTesting/functionTests/tests/jdbc4/

Author: rhillegas
Date: Thu Mar  2 05:28:56 2006
New Revision: 382379

URL: http://svn.apache.org/viewcvs?rev=382379&view=rev
Log:
Dyre's patch for DERBY-924: Implementing new JDBC4 method for embedded case, DatabaseMetadata.getFunctions()

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/TestDbMetaData.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java?rev=382379&r1=382378&r2=382379&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData40.java Thu Mar  2 05:28:56 2006
@@ -66,13 +66,32 @@
     public boolean providesQueryObjectGenerator() throws SQLException {
         return false;
     }
-    
+
+    /**
+     * Implements DatabaseMetaData.getFunctions() for an
+     * embedded database. Queries the database to get information
+     * about functions (procedures returning values). Executes the
+     * 'getFunctions' query from metadata.properties to obtain the
+     * ResultSet to return.
+     * @param catalog limit the search to functions in this catalog 
+     * (not used)
+     * @param schemaPattern limit the search to functions in schemas 
+     * matching this pattern
+     * @param functionNamePattern limit the search to functions 
+     * matching this pattern
+     * @return a ResultSet with metadata information
+     * @throws SQLException if any of the underlying jdbc methods fail
+     */
     public ResultSet getFunctions(java.lang.String catalog,
-                       java.lang.String schemaPattern,
-                       java.lang.String functionNamePattern)
-                       throws SQLException
+                                  java.lang.String schemaPattern,
+                                  java.lang.String functionNamePattern)
+        throws SQLException
     {
-        return getSimpleQuery("getFunctions");
+        PreparedStatement s = getPreparedQuery("getFunctions");
+        s.setString(1, swapNull(catalog));
+        s.setString(2, swapNull(schemaPattern));
+        s.setString(3, swapNull(functionNamePattern));
+        return s.executeQuery();
     }
     
     public ResultSet getFunctionParameters(java.lang.String catalog,

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties?rev=382379&r1=382378&r2=382379&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/metadata.properties Thu Mar  2 05:28:56 2006
@@ -1032,17 +1032,28 @@
     FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR
 
 #
-# getFunctions - Not yet implemented.  Logged in JIRA as DERBY-924
-# Return an empty result set with the right shape.
+# getFunctions - From JDBC 4.0, JDK 1.6.  Returns NULL for
+# catalog. Returns fully qualified method name as REMARKS 
+# Param 1 catalog - dummy parameter that is not used
+# Param 2 schemaPattern - NULL=>any, "" => no schema (none) 
+# Param 3 functionNamePattern - NULL=>any 
+# Return a result set with the right shape.
 #
 getFunctions=SELECT \
-        CAST(NULL AS VARCHAR(128)) AS FUNCTION_CAT, \
-        CAST(NULL AS VARCHAR(128)) AS FUNCTION_SCHEM, \
-        CAST(NULL AS VARCHAR(128)) AS FUNCTION_NAME, \
-        CAST(NULL AS VARCHAR(128)) AS REMARKS, \
-        CAST(NULL AS VARCHAR(128)) AS SPECIFIC_NAME \
-    FROM SYSIBM.SYSDUMMY1 WHERE 1=0 WITH UR
-
+	CAST(NULL AS VARCHAR(128)) AS FUNCTION_CAT, \
+        SYS.SYSSCHEMAS.SCHEMANAME AS FUNCTION_SCHEM, \
+        SYS.SYSALIASES.ALIAS AS FUNCTION_NAME, \
+        CAST ((SYS.SYSALIASES.JAVACLASSNAME || '.' || \
+               SYS.SYSALIASES.ALIASINFO->getMethodName()) \
+             AS VARCHAR(32672)) AS REMARKS, \
+        SYS.SYSALIASES.SPECIFICNAME AS SPECIFIC_NAME \
+    FROM SYS.SYSSCHEMAS, SYS.SYSALIASES \
+    WHERE SYS.SYSALIASES.SCHEMAID = SYS.SYSSCHEMAS.SCHEMAID \
+    AND SYS.SYSALIASES.ALIASTYPE = 'F' \
+    AND ((1=1) OR ? IS NOT NULL) \
+    AND SYS.SYSSCHEMAS.SCHEMANAME LIKE ? \
+    AND SYS.SYSALIASES.ALIAS LIKE ? \
+    ORDER BY FUNCTION_SCHEM, FUNCTION_NAME, SPECIFIC_NAME
 #
 # getFunctionParameters - Not yet implemented.  Logged in JIRA as DERBY-925
 # Return an empty result set with the right shape.

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/TestDbMetaData.out
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/TestDbMetaData.out?rev=382379&r1=382378&r2=382379&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/TestDbMetaData.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/TestDbMetaData.out Thu Mar  2 05:28:56 2006
@@ -1,3 +1,26 @@
+FUNCTION_CAT,FUNCTION_SCHEM,FUNCTION_NAME,REMARKS,SPECIFIC_NAME
+null,APP,DUMMY1,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY2,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY3,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY4,java.some.func,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_CHECK_TABLE,org.apache.derby.catalog.SystemProcedures.SYSCS_CHECK_TABLE,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_DATABASE_PROPERTY,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_DATABASE_PROPERTY,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_RUNTIMESTATISTICS,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_RUNTIMESTATISTICS,xxxxGENERATED-IDxxxx
+FUNCTION_CAT,FUNCTION_SCHEM,FUNCTION_NAME,REMARKS,SPECIFIC_NAME
+null,APP,DUMMY1,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY2,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY3,java.some.func,xxxxGENERATED-IDxxxx
+null,APP,DUMMY4,java.some.func,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_CHECK_TABLE,org.apache.derby.catalog.SystemProcedures.SYSCS_CHECK_TABLE,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_DATABASE_PROPERTY,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_DATABASE_PROPERTY,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_RUNTIMESTATISTICS,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_RUNTIMESTATISTICS,xxxxGENERATED-IDxxxx
+FUNCTION_CAT,FUNCTION_SCHEM,FUNCTION_NAME,REMARKS,SPECIFIC_NAME
+null,SYSCS_UTIL,SYSCS_CHECK_TABLE,org.apache.derby.catalog.SystemProcedures.SYSCS_CHECK_TABLE,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_DATABASE_PROPERTY,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_DATABASE_PROPERTY,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_RUNTIMESTATISTICS,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_RUNTIMESTATISTICS,xxxxGENERATED-IDxxxx
+FUNCTION_CAT,FUNCTION_SCHEM,FUNCTION_NAME,REMARKS,SPECIFIC_NAME
+null,SYSCS_UTIL,SYSCS_GET_DATABASE_PROPERTY,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_DATABASE_PROPERTY,xxxxGENERATED-IDxxxx
+null,SYSCS_UTIL,SYSCS_GET_RUNTIMESTATISTICS,org.apache.derby.catalog.SystemProcedures.SYSCS_GET_RUNTIMESTATISTICS,xxxxGENERATED-IDxxxx
 TABLE_SCHEM,TABLE_CATALOG
 APP,null
 NULLID,null

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java
URL: http://svn.apache.org/viewcvs/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java?rev=382379&r1=382378&r2=382379&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/TestDbMetaData.java Thu Mar  2 05:28:56 2006
@@ -79,9 +79,37 @@
 
 			checkEmptyRS(met.getClientInfoProperties());
 
-			checkEmptyRS(met.getFunctions(null,null,null));
-        
+			// Create some functions in the default schema (app) to make the output
+			// from getFunctions() and getFunctionParameters more interesting
+			s.execute("CREATE FUNCTION DUMMY1 ( X SMALLINT ) RETURNS SMALLINT "+
+					  "PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL "+
+					  "NAME 'java.some.func'");
+			s.execute("CREATE FUNCTION DUMMY2 ( X INTEGER, Y SMALLINT ) RETURNS"+
+					  " INTEGER PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA "+
+					  "EXTERNAL NAME 'java.some.func'");
+			s.execute("CREATE FUNCTION DUMMY3 ( X VARCHAR(16), Y INTEGER ) "+
+					  "RETURNS VARCHAR(16) PARAMETER STYLE JAVA NO SQL LANGUAGE"+
+					  " JAVA EXTERNAL NAME 'java.some.func'");
+			s.execute("CREATE FUNCTION DUMMY4 ( X VARCHAR(128), Y INTEGER ) "+
+					  "RETURNS INTEGER PARAMETER STYLE JAVA NO SQL LANGUAGE "+
+					  "JAVA EXTERNAL NAME 'java.some.func'");
+
 			checkEmptyRS(met.getFunctionParameters(null,null,null,null));
+
+			// Any function in any schema in any catalog
+			dumpRS(met.getFunctions(null, null, null));
+			// Any function in any schema in "Dummy
+			// Catalog". Same as above since the catalog
+			// argument is ignored (is always null)
+			dumpRS(met.getFunctions("Dummy Catalog", null, null));
+			// Any function in a schema starting with "SYS"
+			dumpRS(met.getFunctions(null, "SYS%", null));
+			// All functions containing "GET" in any schema 
+			// (and any catalog)
+			dumpRS(met.getFunctions(null, null, "%GET%"));
+			// Any function that belongs to NO schema and 
+			// NO catalog (none)
+			checkEmptyRS(met.getFunctions("", "", null));
             
             // 
             // Test the new getSchemas() with no schema qualifiers