List:Commits« Previous MessageNext Message »
From:mmatthews Date:May 9 2006 5:50pm
Subject:Connector/J commit: r5247 - in branches/branch_3_1/connector-j: . src/com/mysql/jdbc src/testsuite src/testsuite/regression
View as plain text  
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/regressionmmatthews9 May