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() {