You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by zh...@apache.org on 2010/02/01 11:52:32 UTC

svn commit: r905244 - in /harmony/enhanced/classlib/branches/java6/modules/sql/src: main/java/javax/sql/rowset/SqlUtil.java test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java

Author: zhoukevin
Date: Mon Feb  1 10:52:31 2010
New Revision: 905244

URL: http://svn.apache.org/viewvc?rev=905244&view=rev
Log:
Fix SqlUtil.validateType(int) by using reflection of Types.class to search those public$static@final@int fields to be compliant to JDBC4

Modified:
    harmony/enhanced/classlib/branches/java6/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java
    harmony/enhanced/classlib/branches/java6/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java

Modified: harmony/enhanced/classlib/branches/java6/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java?rev=905244&r1=905243&r2=905244&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/sql/src/main/java/javax/sql/rowset/SqlUtil.java Mon Feb  1 10:52:31 2010
@@ -17,49 +17,31 @@
 
 package javax.sql.rowset;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.sql.SQLException;
 import java.sql.Types;
 import org.apache.harmony.sql.internal.nls.Messages;
 
 class SqlUtil {
-    /*
-     * FIXME:Validate column types is defined by java.sql.Types, current
-     * implementation is ugly, need to find an elegant and effient way to check
-     * all constants defined in java.util.sql.Types
-     */
+
     static void validateType(int type) throws SQLException {
-        switch (type) {
-        case Types.ARRAY:
-        case Types.BIGINT:
-        case Types.BINARY:
-        case Types.BIT:
-        case Types.BLOB:
-        case Types.BOOLEAN:
-        case Types.CHAR:
-        case Types.CLOB:
-        case Types.DATALINK:
-        case Types.DATE:
-        case Types.DECIMAL:
-        case Types.DISTINCT:
-        case Types.DOUBLE:
-        case Types.FLOAT:
-        case Types.INTEGER:
-        case Types.JAVA_OBJECT:
-        case Types.LONGVARBINARY:
-        case Types.LONGVARCHAR:
-        case Types.NULL:
-        case Types.NUMERIC:
-        case Types.OTHER:
-        case Types.REAL:
-        case Types.REF:
-        case Types.SMALLINT:
-        case Types.STRUCT:
-        case Types.TIME:
-        case Types.TIMESTAMP:
-        case Types.TINYINT:
-        case Types.VARBINARY:
-        case Types.VARCHAR:
-            return;
+        try {
+            int modifiers = -1;
+            Field[] fields = Types.class.getFields();
+            for (int index = 0; index < fields.length; index++) {
+                if (int.class == fields[index].getType()) {
+                    modifiers = fields[index].getModifiers();
+                    if (Modifier.isStatic(modifiers)
+                            && Modifier.isFinal(modifiers)) {
+                        if (type == fields[index].getInt(Types.class)) {
+                            return;
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // ignored: this should never happen
         }
         throw new SQLException(Messages.getString("sql.28")); //$NON-NLS-1$
     }

Modified: harmony/enhanced/classlib/branches/java6/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java?rev=905244&r1=905243&r2=905244&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/sql/src/test/java/org/apache/harmony/sql/tests/javax/sql/rowset/RowSetMetaDataImplTest.java Mon Feb  1 10:52:31 2010
@@ -826,6 +826,11 @@
         } catch (SQLException e) {
             // expected
         }
+        
+        // types compliant to JDBC4
+        metaDataImpl.setColumnType(2, Types.NCHAR);
+        metaDataImpl.setColumnType(2, Types.NCLOB);
+        metaDataImpl.setColumnType(2, Types.NVARCHAR);
     }
 
     /**