You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-dev@db.apache.org by to...@apache.org on 2008/11/04 00:49:01 UTC

svn commit: r711128 - /db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java

Author: tomdz
Date: Mon Nov  3 15:49:00 2008
New Revision: 711128

URL: http://svn.apache.org/viewvc?rev=711128&view=rev
Log:
Applied patch for DDLUTILS-217: Retrieve columns by name iso index

Modified:
    db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java

Modified: db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java
URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java?rev=711128&r1=711127&r2=711128&view=diff
==============================================================================
--- db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java (original)
+++ db/ddlutils/trunk/src/main/java/org/apache/ddlutils/platform/MetaDataColumnDescriptor.java Mon Nov  3 15:49:00 2008
@@ -103,44 +103,61 @@
      */
     public Object readColumn(ResultSet resultSet) throws SQLException
     {
-        ResultSetMetaData metaData = resultSet.getMetaData();
-        int               foundIdx = -1;
+        Object result = null;
 
-        for (int idx = 1; (foundIdx < 0) && (idx <= metaData.getColumnCount()); idx++)
-        {
-            if (_columnName.equals(metaData.getColumnName(idx).toUpperCase()))
-            {
-                foundIdx = idx;
-            }
-        }
-        if (foundIdx > 0)
+        try
         {
-            Object result = null;
-
             switch (_jdbcType)
             {
                 case Types.BIT:
-                    result = new Boolean(resultSet.getBoolean(foundIdx));
+                    result = new Boolean(resultSet.getBoolean(_columnName));
                     break;
                 case Types.INTEGER:
-                    result = new Integer(resultSet.getInt(foundIdx));
+                    result = new Integer(resultSet.getInt(_columnName));
                     break;
                 case Types.TINYINT:
-                    result = new Short(resultSet.getShort(foundIdx));
+                    result = new Short(resultSet.getShort(_columnName));
                     break;
                 default:
-                    result = resultSet.getString(foundIdx);
+                    result = resultSet.getString(_columnName);
                 break;
             }
             if (resultSet.wasNull())
             {
                 result = null;
             }
-            return result;
         }
-        else
+        catch (SQLException ex)
+        {
+            if (isColumnInResultSet(resultSet))
+            {
+                throw ex;
+            }
+            else
+            {
+                result = _defaultValue;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Determines whether a value for the specified column is present in the given result set.
+     * 
+     * @param resultSet The result set
+     * @return <code>true</code> if the column is present in the result set
+     */
+    private boolean isColumnInResultSet(ResultSet resultSet) throws SQLException
+    {
+        ResultSetMetaData metaData = resultSet.getMetaData();
+
+        for (int idx = 1; idx <= metaData.getColumnCount(); idx++)
         {
-            return _defaultValue;
+            if (_columnName.equals(metaData.getColumnName(idx).toUpperCase()))
+            {
+                return true;
+            }
         }
+        return false;
     }
 }