This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-beanutils.git


The following commit(s) were added to refs/heads/master by this push:
     new e72057cd Resolve column name in ResultSetIterator.set (#426)
e72057cd is described below

commit e72057cd1dcc48d0e0e714446bdd8c4fa380e9cd
Author: Naveed Khan <[email protected]>
AuthorDate: Thu Jul 23 18:29:22 2026 +0000

    Resolve column name in ResultSetIterator.set (#426)
    
    * resolve column name in ResultSetIterator.set
    
    the read path resolves the dyna-property name to the real column name via 
getColumnName, but set passed the raw name to updateObject, so with the default 
lowerCase a mixed-case column update targeted the wrong column.
    
    * use AtomicReference to capture the updated column name in test
---
 .../commons/beanutils2/sql/ResultSetIterator.java  |  2 +-
 .../commons/beanutils2/sql/DynaResultSetTest.java  | 23 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/commons/beanutils2/sql/ResultSetIterator.java 
b/src/main/java/org/apache/commons/beanutils2/sql/ResultSetIterator.java
index 792f2ff2..53c8859c 100644
--- a/src/main/java/org/apache/commons/beanutils2/sql/ResultSetIterator.java
+++ b/src/main/java/org/apache/commons/beanutils2/sql/ResultSetIterator.java
@@ -249,7 +249,7 @@ public class ResultSetIterator implements DynaBean, 
Iterator<DynaBean> {
             throw new IllegalArgumentException(name);
         }
         try {
-            dynaClass.getResultSet().updateObject(name, value);
+            
dynaClass.getResultSet().updateObject(dynaClass.getColumnName(name), value);
         } catch (final SQLException e) {
             throw new IllegalArgumentException("set(" + name + "): 
SQLException: " + e);
         }
diff --git 
a/src/test/java/org/apache/commons/beanutils2/sql/DynaResultSetTest.java 
b/src/test/java/org/apache/commons/beanutils2/sql/DynaResultSetTest.java
index c98b7e94..73d07a3b 100644
--- a/src/test/java/org/apache/commons/beanutils2/sql/DynaResultSetTest.java
+++ b/src/test/java/org/apache/commons/beanutils2/sql/DynaResultSetTest.java
@@ -25,7 +25,10 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.beanutils2.DynaBean;
 import org.apache.commons.beanutils2.DynaProperty;
@@ -96,6 +99,26 @@ class DynaResultSetTest {
         assertEquals("org.apache.commons.beanutils2.sql.ResultSetDynaClass", 
dynaClass.getName(), "DynaClass name");
     }
 
+    /**
+     * With the default {@code lowerCase} option the property name differs 
from the real column name, and the read path resolves it through
+     * {@code getColumnName}. Verify that {@code set} resolves it the same 
way, so the update targets the real column name and not the lower-cased property
+     * name.
+     */
+    @Test
+    void testSetUsesColumnName() throws Exception {
+        final AtomicReference<String> updatedColumn = new AtomicReference<>();
+        final ResultSet resultSet = TestResultSet.createProxy(new 
TestResultSet() {
+            @Override
+            public void updateObject(final String columnName, final Object 
value) throws SQLException {
+                updatedColumn.set(columnName);
+            }
+        });
+        final ResultSetDynaClass rsdc = new ResultSetDynaClass(resultSet);
+        final DynaBean row = rsdc.iterator().next();
+        row.set("stringproperty", "new value");
+        assertEquals("stringProperty", updatedColumn.get(), "update targets 
the real column name");
+    }
+
     @Test
     void testIteratorCount() {
 

Reply via email to