Modified:
branches/branch_3_1/connector-j/CHANGES
branches/branch_3_1/connector-j/src/com/mysql/jdbc/PreparedStatement.java
branches/branch_3_1/connector-j/src/testsuite/BaseTestCase.java
branches/branch_3_1/connector-j/src/testsuite/regression/StatementRegressionTest.java
Log:
Fix for BUG#19615, PreparedStatement.setObject(int, Object, int) doesn't respect scale of
BigDecimals.
Modified: branches/branch_3_1/connector-j/CHANGES
===================================================================
--- branches/branch_3_1/connector-j/CHANGES 2006-05-09 00:02:37 UTC (rev 5246)
+++ branches/branch_3_1/connector-j/CHANGES 2006-05-09 15:50:33 UTC (rev 5247)
@@ -1,7 +1,7 @@
# Changelog
# $Id$
-xx-xx-05 - Version 3.1.13
+05-04-05 - Version 3.1.13
- Fixed BUG#15464 - INOUT parameter does not store IN value.
@@ -105,7 +105,10 @@
- Driver now aware of fix for BIT type metadata that went into
MySQL-5.0.21 for server not reporting length consistently (bug
number 13601).
-
+
+ - Fixed BUG#19615, PreparedStatement.setObject(int, Object, int)
+ doesn't respect scale of BigDecimals.
+
- Fixed BUG#19282 - ResultSet.wasNull() returns incorrect value
when extracting native string from server-side prepared statement
generated result set.
Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/PreparedStatement.java
===================================================================
--- branches/branch_3_1/connector-j/src/com/mysql/jdbc/PreparedStatement.java 2006-05-09
00:02:37 UTC (rev 5246)
+++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/PreparedStatement.java 2006-05-09
15:50:33 UTC (rev 5247)
@@ -2744,7 +2744,12 @@
*/
public void setObject(int parameterIndex, Object parameterObj,
int targetSqlType) throws SQLException {
- setObject(parameterIndex, parameterObj, targetSqlType, 0);
+ if (!(parameterObj instanceof BigDecimal)) {
+ setObject(parameterIndex, parameterObj, targetSqlType, 0);
+ } else {
+ setObject(parameterIndex, parameterObj, targetSqlType,
+ ((BigDecimal)parameterObj).scale());
+ }
}
/**
Modified: branches/branch_3_1/connector-j/src/testsuite/BaseTestCase.java
===================================================================
--- branches/branch_3_1/connector-j/src/testsuite/BaseTestCase.java 2006-05-09 00:02:37
UTC (rev 5246)
+++ branches/branch_3_1/connector-j/src/testsuite/BaseTestCase.java 2006-05-09 15:50:33
UTC (rev 5247)
@@ -519,4 +519,28 @@
return false;
}
}
+
+ protected void closeMemberJDBCResources() {
+ if (this.rs != null) {
+ ResultSet toClose = this.rs;
+ this.rs = null;
+
+ try {
+ toClose.close();
+ } catch (SQLException sqlEx) {
+ // ignore
+ }
+ }
+
+ if (this.pstmt != null) {
+ PreparedStatement toClose = this.pstmt;
+ this.pstmt = null;
+
+ try {
+ toClose.close();
+ } catch (SQLException sqlEx) {
+ // ignore
+ }
+ }
+ }
}
Modified:
branches/branch_3_1/connector-j/src/testsuite/regression/StatementRegressionTest.java
===================================================================
---
branches/branch_3_1/connector-j/src/testsuite/regression/StatementRegressionTest.java 2006-05-09
00:02:37 UTC (rev 5246)
+++
branches/branch_3_1/connector-j/src/testsuite/regression/StatementRegressionTest.java 2006-05-09
15:50:33 UTC (rev 5247)
@@ -3112,4 +3112,44 @@
assertEquals("01000", sqlWarn.getNextWarning().getSQLState());
}
}
+
+ /**
+ * Tests fix for BUG#19615, PreparedStatement.setObject(int, Object, int)
+ * doesn't respect scale of BigDecimals.
+ *
+ * @throws Exception if the test fails.
+ */
+ public void testBug19615() throws Exception {
+ createTable("testBug19615", "(field1 DECIMAL(19, 12))");
+
+ try {
+ BigDecimal dec = new BigDecimal("1.234567");
+
+ this.pstmt = this.conn.prepareStatement("INSERT INTO testBug19615 VALUES (?)");
+ this.pstmt.setObject(1, dec, Types.DECIMAL);
+ this.pstmt.executeUpdate();
+ this.pstmt.close();
+
+
+ this.rs = this.stmt.executeQuery("SELECT field1 FROM testBug19615");
+ this.rs.next();
+ assertEquals(dec, this.rs.getBigDecimal(1).setScale(6));
+ this.rs.close();
+ this.stmt.executeUpdate("TRUNCATE TABLE testBug19615");
+
+ this.pstmt = ((com.mysql.jdbc.Connection)this.conn).clientPrepareStatement("INSERT
INTO testBug19615 VALUES (?)");
+ this.pstmt.setObject(1, dec, Types.DECIMAL);
+ this.pstmt.executeUpdate();
+ this.pstmt.close();
+
+
+ this.rs = this.stmt.executeQuery("SELECT field1 FROM testBug19615");
+ this.rs.next();
+ assertEquals(dec, this.rs.getBigDecimal(1).setScale(6));
+ this.rs.close();
+ } finally {
+ closeMemberJDBCResources();
+ }
+
+ }
}
| Thread |
|---|
| • Connector/J commit: r5247 - in branches/branch_3_1/connector-j: . src/com/mysql/jdbc src/testsuite src/testsuite/regression | mmatthews | 9 May |