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 dj...@apache.org on 2007/01/19 20:41:03 UTC

svn commit: r497919 - /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java

Author: djd
Date: Fri Jan 19 11:41:02 2007
New Revision: 497919

URL: http://svn.apache.org/viewvc?view=rev&rev=497919
Log:
DERBY-2242 (partial) Additional testing of getTypeInfo() for DatabaseMetaDataTest.

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java?view=diff&rev=497919&r1=497918&r2=497919
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/DatabaseMetaDataTest.java Fri Jan 19 11:41:02 2007
@@ -858,6 +858,221 @@
           }, true);
         rs.close();
     }
+    
+    /**
+     * Test getTypeInfo
+     * @throws SQLException 
+     */
+    public void testGetTypeInfo() throws SQLException
+    {
+        // Client returns BOOLEAN type from the engine as SMALLINT
+        int BOOLEAN = Types.BOOLEAN;      
+        if (usingDerbyNetClient())
+            BOOLEAN = Types.SMALLINT;
+        
+        ResultSet rs = getDMD().getTypeInfo();
+        assertMetaDataResultSet(rs,
+          new String[] {
+            "TYPE_NAME", "DATA_TYPE", "PRECISION", "LITERAL_PREFIX",
+            "LITERAL_SUFFIX", "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE",
+            
+            "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE",
+            "AUTO_INCREMENT", "LOCAL_TYPE_NAME",
+            
+            "MINIMUM_SCALE", "MAXIMUM_SCALE",
+            "SQL_DATA_TYPE", "SQL_DATETIME_SUB",
+            
+            "NUM_PREC_RADIX"          
+          },
+          new int[] {
+            Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.VARCHAR,
+            Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, BOOLEAN,
+            
+            Types.SMALLINT, BOOLEAN, BOOLEAN,
+            BOOLEAN, Types.VARCHAR,
+            
+            Types.SMALLINT, Types.SMALLINT,
+            Types.INTEGER, Types.INTEGER,
+            
+            Types.INTEGER
+          }
+        );
+        
+        int[] supportedTypes = new int[] {
+          Types.BIGINT, Types.BINARY, Types.BLOB,
+          Types.CHAR, Types.CHAR, Types.CLOB, Types.DATE,
+          Types.DECIMAL, Types.DOUBLE, Types.FLOAT,
+          Types.INTEGER, Types.LONGVARBINARY, Types.LONGVARCHAR, Types.LONGVARCHAR,
+          Types.NUMERIC, Types.REAL, Types.SMALLINT,
+          Types.TIME, Types.TIMESTAMP,  Types.VARBINARY,
+          Types.VARCHAR, Types.VARCHAR 
+        };
+        
+        // Rows are returned from getTypeInfo in order of
+        // "DATA_TYPE" (which is a constant from java.sql.Types)
+        Arrays.sort(supportedTypes);
+        
+        int offset = 0;
+        while (rs.next()) {
+            // TYPE_NAME (column 1)
+            String typeName = rs.getString("TYPE_NAME");
+            assertNotNull(typeName);
+            
+            // DATA_TYPE (column 2)
+            int type = rs.getInt("DATA_TYPE");
+            assertFalse(rs.wasNull());
+            if (supportedTypes[offset] != type)
+            {
+                fail("Unexpected type " + typeName);
+            }
+            else
+            {
+                offset++;
+            }
+            
+            // National types not supported, ignore them
+            // DERBY-2258
+            if (typeName.indexOf("NATIONAL") != -1)
+                continue;
+            if (typeName.indexOf("NVARCHAR") != -1)
+                continue;
+            
+            // PRECISION (column 3)
+            int precision = -1;
+            switch (type)
+            {
+            case Types.BINARY:
+            case Types.CHAR:
+                precision = 254;
+                break;
+            case Types.BLOB:
+            case Types.CLOB:
+                precision = Integer.MAX_VALUE;
+                break;
+            
+            case Types.DATE:
+                precision = 10;
+                break;
+            case Types.TIME:
+                precision = 8;
+                break;
+            case Types.TIMESTAMP:
+                precision = 26;
+                break;
+                                
+            case Types.DECIMAL:
+            case Types.NUMERIC:
+                precision = 31;
+                break;
+            case Types.DOUBLE:
+            case Types.FLOAT:
+                precision = 52;
+                break;
+            case Types.REAL:
+                precision = 23;
+                break;
+                
+            case Types.BIGINT:
+                precision = 19;
+                break;              
+            case Types.INTEGER:
+                precision = 10;
+                break;
+            case Types.SMALLINT:
+                precision = 5;
+                break;
+                
+            case Types.LONGVARBINARY:
+            case Types.LONGVARCHAR:
+                precision = 32700;
+                break;
+                        
+            case Types.VARBINARY:
+                precision = 32762; // BUG DERBY-2260
+                break;
+
+            case Types.VARCHAR:
+                precision = 32672;
+                break;
+            }
+            assertEquals("PRECISION " + typeName,
+                    precision, rs.getInt("PRECISION"));
+            assertFalse(rs.wasNull());
+            
+            // LITERAL_PREFIX (column 4)
+            // LITERAL_SUFFIX (column 5)
+            // CREATE_PARAMS (column 6)
+            
+            // NULLABLE (column 7) - all types are nullable in Derby
+            assertEquals("NULLABLE " + typeName,
+                    DatabaseMetaData.typeNullable, rs.getInt("NULLABLE"));
+            assertFalse(rs.wasNull());
+            
+            // CASE_SENSITIVE (column 8)
+            
+            // SEARCHABLE (column 9) - most types searchable
+            {
+            int searchable;
+            switch (type)
+            {
+            case Types.LONGVARBINARY:
+                searchable = DatabaseMetaData.typePredBasic; // BUG DERBY-2259
+                break;
+            case Types.LONGVARCHAR:
+                searchable = DatabaseMetaData.typeSearchable; // BUG DERBY-2259
+                break;
+                
+            case Types.BLOB:
+            case Types.CLOB:
+                searchable = // DatabaseMetaData.typePredNone;
+                    DatabaseMetaData.typePredChar; // BUG DERBY-2259
+                break;
+            case Types.CHAR:
+            case Types.VARCHAR:
+                searchable = DatabaseMetaData.typeSearchable;
+                break;
+            default:
+                searchable = DatabaseMetaData.typePredBasic;
+                break;  
+            }
+
+            assertEquals("SEARCHABLE " + typeName,
+                    searchable, rs.getInt("SEARCHABLE"));
+            }
+            
+            // UNSIGNED_ATTRIBUTE (column 10)
+            //assertFalse("UNSIGNED_ATTRIBUTE " + typeName,
+            //        rs.getBoolean("UNSIGNED_ATTRIBUTE"));
+            
+            
+            // FIXED_PREC_SCALE (column 11)
+            // AUTO_INCREMENT (column 12)
+            
+            // LOCAL_TYPE_NAME (column 13) always the same as TYPE_NAME
+            assertEquals("LOCAL_TYPE_NAME " + typeName,
+                    typeName, rs.getString("LOCAL_TYPE_NAME"));
+            
+            
+            // MINIMUM_SCALE (column 14)
+            // MAXIMUM_SCALE (column 15)
+            
+            // SQL_DATA_TYPE (column 16) - Unused
+            assertEquals("SQL_DATA_TYPE " + typeName,
+                    0, rs.getInt("SQL_DATA_TYPE"));
+            assertTrue(rs.wasNull());
+            
+            // SQL_DATETIME_SUB (column 17) - Unused
+            assertEquals("SQL_DATETIME_SUB " + typeName,
+                    0, rs.getInt("SQL_DATETIME_SUB"));
+            assertTrue(rs.wasNull());
+
+            // NUM_PREC_RADIX (column 18)
+            
+        }
+        
+        rs.close();
+    }
+    
     /**
      * Check the shape of the ResultSet from any getTables call.
      */
@@ -877,18 +1092,6 @@
         );        
     }
     
-   /* 
-    # TABLE_CAT String => table catalog (may be null)
-    # TABLE_SCHEM String => table schema (may be null)
-    # TABLE_NAME String => table name
-    # TABLE_TYPE String => table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
-    # REMARKS String => explanatory comment on the table
-    # TYPE_CAT String => the types catalog (may be null)
-    # TYPE_SCHEM String => the types schema (may be null)
-    # TYPE_NAME String => type name (may be null)
-    # SELF_REFERENCING_COL_NAME String => name of the designated "identifier" column of a typed table (may be null)
-    # REF_GENERATION
-*/
     /**
      * Check the shape of the ResultSet from any getCatlogs call.
      */