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 kr...@apache.org on 2007/05/14 17:33:47 UTC

svn commit: r537882 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java

Author: kristwaa
Date: Mon May 14 08:33:46 2007
New Revision: 537882

URL: http://svn.apache.org/viewvc?view=rev&rev=537882
Log:
DERBY-1484: Client and embedded behave differently when the table name is null in DatabaseMetaData methods.
Patch file: DERBY-1484-4_ExcFact.diff

Patch contributed by Jørgen Løland.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java?view=diff&rev=537882&r1=537881&r2=537882
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedDatabaseMetaData.java Mon May 14 08:33:46 2007
@@ -37,6 +37,7 @@
 import org.apache.derby.impl.sql.execute.GenericConstantActionFactory;
 import org.apache.derby.impl.sql.execute.GenericExecutionFactory;
 
+import org.apache.derby.iapi.reference.SQLState;
 import org.apache.derby.iapi.reference.Limits;
 import org.apache.derby.iapi.reference.JDBC20Translation;
 import org.apache.derby.iapi.reference.JDBC30Translation;
@@ -1960,10 +1961,16 @@
      */
 	public ResultSet getColumnPrivileges(String catalog, String schema,
 		String table, String columnNamePattern) throws SQLException {
+
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+
 		PreparedStatement s = getPreparedQuery("getColumnPrivileges");
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484; must match table name as stored
 		s.setString(4, swapNull(columnNamePattern));
 		return s.executeQuery();
 	}
@@ -2040,7 +2047,7 @@
      * @param catalogPattern a catalog name; "" retrieves those without a
      * catalog; null means drop catalog name from the selection criteria
      * @param schemaPattern a schema name; "" retrieves those without a schema
-     * @param tablePattern a table name
+     * @param table a table name
      * @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
@@ -2050,12 +2057,12 @@
 	(
 		String catalogPattern,
 		String schemaPattern,
-		String tablePattern,
+		String table,
 		int scope,
 		boolean nullable
 	) throws SQLException
 	{
-		return doGetBestRowId(catalogPattern, schemaPattern, tablePattern,
+		return doGetBestRowId(catalogPattern, schemaPattern, table,
 			scope, nullable, "");
 	}
 
@@ -2066,10 +2073,10 @@
 	 * set will conform to ODBC specifications.
 	 */
 	public ResultSet getBestRowIdentifierForODBC(String catalogPattern,
-		String schemaPattern, String tablePattern, int scope,
+		String schemaPattern, String table, int scope,
 		boolean nullable) throws SQLException {
 
-		return doGetBestRowId(catalogPattern, schemaPattern, tablePattern,
+		return doGetBestRowId(catalogPattern, schemaPattern, table,
 			scope, nullable, "odbc_");
 	}
 
@@ -2083,9 +2090,14 @@
 	 *	JDBC or ODBC specifications.
 	 */
 	private ResultSet doGetBestRowId(String catalogPattern,
-		String schemaPattern, String tablePattern, int scope,
+		String schemaPattern, String table, int scope,
 		boolean nullable, String queryPrefix) throws SQLException {
 
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+        
 		int nullableInIntForm = 0;
 		if (nullable)
 			nullableInIntForm = 1;
@@ -2098,10 +2110,6 @@
 		{
 			schemaPattern = "%";
 		}
-		if (tablePattern == null)
-		{
-			tablePattern = "%";
-		}
 
 			PreparedStatement ps;
 			boolean done;
@@ -2116,7 +2124,7 @@
 			ps = getPreparedQuery("getBestRowIdentifierPrimaryKey");
 			ps.setString(1,catalogPattern);
 			ps.setString(2,schemaPattern);
-			ps.setString(3,tablePattern);
+			ps.setString(3,table);
 	
 			ResultSet rs = ps.executeQuery();
 			done = rs.next();
@@ -2145,7 +2153,7 @@
 			ps = getPreparedQuery("getBestRowIdentifierUniqueConstraint");
 			ps.setString(1,catalogPattern);
 			ps.setString(2,schemaPattern);
-			ps.setString(3,tablePattern);
+			ps.setString(3,table);
 	
 			rs = ps.executeQuery();
 			done = rs.next();
@@ -2175,7 +2183,7 @@
 			ps = getPreparedQuery("getBestRowIdentifierUniqueIndex");
 			ps.setString(1,catalogPattern);
 			ps.setString(2,schemaPattern);
-			ps.setString(3,tablePattern);
+			ps.setString(3,table);
 	
 			rs = ps.executeQuery();
 			done = rs.next();
@@ -2203,7 +2211,7 @@
 			ps = getPreparedQuery(queryPrefix + "getBestRowIdentifierAllColumns");
 			ps.setString(1,catalogPattern);
 			ps.setString(2,schemaPattern);
-			ps.setString(3,tablePattern);
+			ps.setString(3,table);
 			ps.setInt(4,scope);
 			ps.setInt(5,nullableInIntForm);
 			return ps.executeQuery();
@@ -2266,10 +2274,15 @@
 	private ResultSet doGetVersionCols(String catalog, String schema,
 		String table, String queryName) throws SQLException {
 
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+        
 		PreparedStatement s = getPreparedQuery(queryName);
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484: Must match table name as stored
 		return s.executeQuery();
 	}
 
@@ -2328,9 +2341,15 @@
 	public ResultSet getPrimaryKeys(String catalog, String schema,
 			String table) throws SQLException {
 		PreparedStatement s = getPreparedQuery("getPrimaryKeys");
+
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484: Must match table name as stored
 		return s.executeQuery();
 	}	
 
@@ -2404,10 +2423,15 @@
      */
 	public ResultSet getImportedKeys(String catalog, String schema,
 				String table) throws SQLException {
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+
 		PreparedStatement s = getPreparedQuery("getImportedKeys");
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484: Must match table name as stored
 		return s.executeQuery();
 	}
 
@@ -2482,10 +2506,16 @@
      */
 	public ResultSet getExportedKeys(String catalog, String schema,
 				String table) throws SQLException {
+
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+
 		PreparedStatement s = getPreparedQuery("getCrossReference");
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484: Must match table name as stored
 		s.setString(4, swapNull(null));
 		s.setString(5, swapNull(null));
 		s.setString(6, swapNull(null));
@@ -2725,12 +2755,17 @@
 		boolean unique, boolean approximate, String queryName)
 		throws SQLException {
 
+        if (table == null) {
+            throw Util.generateCsSQLException(
+                           SQLState.TABLE_NAME_CANNOT_BE_NULL);
+        }
+
 		int approximateInInt = 0;
 		if (approximate) approximateInInt = 1;
 		PreparedStatement s = getPreparedQuery(queryName);
 		s.setString(1, swapNull(catalog));
 		s.setString(2, swapNull(schema));
-		s.setString(3, swapNull(table));
+		s.setString(3, table); //DERBY-1484: Must match table name as stored
 		s.setBoolean(4, unique);
 		s.setInt(5, approximateInInt);
 		return s.executeQuery();

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java?view=diff&rev=537882&r1=537881&r2=537882
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/odbc_metadata.java Mon May 14 08:33:46 2007
@@ -413,13 +413,13 @@
 
 		System.out.println("SQLForeignKeys: getImportedKeys");
 		s.execute(
-			"call sysibm.sqlforeignkeys (null, null, null, null, null, null, " +
+			"call sysibm.sqlforeignkeys (null, null, null, null, null, 'Louie', " +
 					"'IMPORTEDKEY=1;DATATYPE=''ODBC''')");
 		checkODBCNamesAndTypes(s.getResultSet(), GET_IMPORTED_KEYS);
 
 		System.out.println("SQLForeignKeys: getExportedKeys");
 		s.execute(
-			"call sysibm.sqlforeignkeys (null, null, null, null, null, null, " +
+			"call sysibm.sqlforeignkeys (null, null, 'Louie', null, null, null, " +
 				"'EXPORTEDKEY=1;DATATYPE=''ODBC''')");
 		checkODBCNamesAndTypes(s.getResultSet(), GET_EXPORTED_KEYS);