You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by df...@apache.org on 2009/11/03 21:21:18 UTC

svn commit: r832535 - in /commons/proper/dbutils/trunk/src: java/org/apache/commons/dbutils/BeanProcessor.java test/org/apache/commons/dbutils/BeanProcessorTest.java test/org/apache/commons/dbutils/MockResultSetMetaData.java

Author: dfabulich
Date: Tue Nov  3 20:21:17 2009
New Revision: 832535

URL: http://svn.apache.org/viewvc?rev=832535&view=rev
Log:
[DBUTILS-57] BeanProcessor not able to map an alias column from a HSQLDB query to the any bean properties
Submitted by: Julien Aymé

Modified:
    commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/BeanProcessor.java
    commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/BeanProcessorTest.java
    commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/MockResultSetMetaData.java

Modified: commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/BeanProcessor.java
URL: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/BeanProcessor.java?rev=832535&r1=832534&r2=832535&view=diff
==============================================================================
--- commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/BeanProcessor.java (original)
+++ commons/proper/dbutils/trunk/src/java/org/apache/commons/dbutils/BeanProcessor.java Tue Nov  3 20:21:17 2009
@@ -390,7 +390,10 @@
         Arrays.fill(columnToProperty, PROPERTY_NOT_FOUND);
 
         for (int col = 1; col <= cols; col++) {
-            String columnName = rsmd.getColumnName(col);
+            String columnName = rsmd.getColumnLabel(col);
+            if (null == columnName || 0 == columnName.length()) {
+              columnName = rsmd.getColumnName(col);
+            }
             for (int i = 0; i < props.length; i++) {
 
                 if (columnName.equalsIgnoreCase(props[i].getName())) {

Modified: commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/BeanProcessorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/BeanProcessorTest.java?rev=832535&r1=832534&r2=832535&view=diff
==============================================================================
--- commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/BeanProcessorTest.java (original)
+++ commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/BeanProcessorTest.java Tue Nov  3 20:21:17 2009
@@ -16,6 +16,9 @@
  */
 package org.apache.commons.dbutils;
 
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 
 public class BeanProcessorTest extends BaseTestCase {
@@ -25,14 +28,58 @@
     public void testProcess() throws SQLException {
         TestBean b = null;
         assertTrue(this.rs.next());
-        b = (TestBean) beanProc.toBean(this.rs, TestBean.class);
+        b = beanProc.toBean(this.rs, TestBean.class);
         assertEquals(13.0, b.getColumnProcessorDoubleTest(), 0);
-        
+
         assertTrue(this.rs.next());
-        b = (TestBean) beanProc.toBean(this.rs, TestBean.class);
+        b = beanProc.toBean(this.rs, TestBean.class);
         assertEquals(13.0, b.getColumnProcessorDoubleTest(), 0);
 
         assertFalse(this.rs.next());
     }
 
+    public static class MapColumnToPropertiesBean {
+        private String one;
+
+        private String two;
+
+        private String three;
+
+        public String getOne() {
+            return one;
+        }
+
+        public void setOne(String one) {
+            this.one = one;
+        }
+
+        public String getTwo() {
+            return two;
+        }
+
+        public void setTwo(String two) {
+            this.two = two;
+        }
+
+        public String getThree() {
+            return three;
+        }
+
+        public void setThree(String three) {
+            this.three = three;
+        }
+    }
+
+    public void testMapColumnToProperties() throws Exception {
+        String[] columnNames = { "test", "test", "three" };
+        String[] columnLabels = { "one", "two", null };
+        ResultSetMetaData rsmd = ProxyFactory.instance().createResultSetMetaData(
+                new MockResultSetMetaData(columnNames, columnLabels));
+        PropertyDescriptor[] props = Introspector.getBeanInfo(MapColumnToPropertiesBean.class).getPropertyDescriptors();
+
+        int[] columns = beanProc.mapColumnsToProperties(rsmd, props);
+        for (int i = 1; i < columns.length; i++) {
+            assertTrue(columns[i] != BeanProcessor.PROPERTY_NOT_FOUND);
+        }
+    }
 }

Modified: commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/MockResultSetMetaData.java
URL: http://svn.apache.org/viewvc/commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/MockResultSetMetaData.java?rev=832535&r1=832534&r2=832535&view=diff
==============================================================================
--- commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/MockResultSetMetaData.java (original)
+++ commons/proper/dbutils/trunk/src/test/org/apache/commons/dbutils/MockResultSetMetaData.java Tue Nov  3 20:21:17 2009
@@ -27,6 +27,7 @@
 public class MockResultSetMetaData implements InvocationHandler {
 
     private String[] columnNames = null;
+    private String[] columnLabels = null;
 
     /**
      * Create a <code>MockResultSetMetaData</code> proxy object.  This is 
@@ -46,6 +47,14 @@
     public MockResultSetMetaData(String[] columnNames) {
         super();
         this.columnNames = columnNames;
+        this.columnLabels = new String[columnNames.length];
+
+    }
+    
+    public MockResultSetMetaData(String[] columnNames, String[] columnLabels) {
+        super();
+        this.columnNames = columnNames;
+        this.columnLabels = columnLabels;
 
     }
 
@@ -58,11 +67,16 @@
             return new Integer(this.columnNames.length);
 
         } else if (
-            methodName.equals("getColumnName")
-                || methodName.equals("getColumnLabel")) {
+                methodName.equals("getColumnName")) {
+
+                int col = ((Integer) args[0]).intValue() - 1;
+                return this.columnNames[col];
+
+        } else if (
+        		methodName.equals("getColumnLabel")) {
 
-            int col = ((Integer) args[0]).intValue() - 1;
-            return this.columnNames[col];
+                int col = ((Integer) args[0]).intValue() - 1;
+                return this.columnLabels[col];
 
         } else if (methodName.equals("hashCode")) {
             return new Integer(System.identityHashCode(proxy));