Modified:
trunk/
trunk/CHANGES
trunk/src/com/mysql/jdbc/PreparedStatement.java
trunk/src/testsuite/regression/StatementRegressionTest.java
Log:
Merged revisions 6626-6636,6638-6666 via svnmerge from
svn+ssh://mmatthews@stripped/connectors-svnroot/connector-j/branches/branch_5_0
.......
r6666 | mmatthews | 2007-11-16 10:31:48 -0600 (Fri, 16 Nov 2007) | 3 lines
Fixed an issue where PreparedStatement.setObject(int, Object, int)
didn't handle String values of "1" or "0" for the target SQL type
of BIT properly.
.......
Property changes on: trunk
___________________________________________________________________
Name: svnmerge-integrated
- /branches/branch_5_0:1-6625 /branches/branch_5_1:1-6582,6584-6664
+ /branches/branch_5_0:1-6636,6638-6666 /branches/branch_5_1:1-6582,6584-6664
Modified: trunk/CHANGES
===================================================================
--- trunk/CHANGES 2007-11-16 16:31:48 UTC (rev 6666)
+++ trunk/CHANGES 2007-11-16 16:50:29 UTC (rev 6667)
@@ -285,6 +285,10 @@
- Driver now calls SocketFactory.afterHandshake() at appropriate time.
+ - Fixed an issue where PreparedStatement.setObject(int, Object, int)
+ didn't handle String values of "1" or "0" for the target SQL type
+ of BIT properly.
+
10-09-07 - Version 5.0.8
- Fixed BUG#30550, executeBatch() would fail with an ArithmeticException
Modified: trunk/src/com/mysql/jdbc/PreparedStatement.java
===================================================================
--- trunk/src/com/mysql/jdbc/PreparedStatement.java 2007-11-16 16:31:48 UTC (rev 6666)
+++ trunk/src/com/mysql/jdbc/PreparedStatement.java 2007-11-16 16:50:29 UTC (rev 6667)
@@ -3380,8 +3380,12 @@
} else if (parameterObj instanceof String) {
switch (targetSqlType) {
case Types.BIT:
- boolean parameterAsBoolean = "true"
- .equalsIgnoreCase((String) parameterObj);
+ if ("1".equals((String) parameterObj)
+ || "0".equals((String) parameterObj)) {
+ parameterAsNum = Integer.valueOf((String) parameterObj);
+ } else {
+ boolean parameterAsBoolean = "true"
+ .equalsIgnoreCase((String) parameterObj);
parameterAsNum = parameterAsBoolean ? Constants.integerValueOf(1)
: Constants.integerValueOf(0);
@@ -5042,4 +5046,4 @@
public String getPreparedSql() {
return this.originalSql;
}
-}
\ No newline at end of file
+}
Modified: trunk/src/testsuite/regression/StatementRegressionTest.java
===================================================================
--- trunk/src/testsuite/regression/StatementRegressionTest.java 2007-11-16 16:31:48 UTC
(rev 6666)
+++ trunk/src/testsuite/regression/StatementRegressionTest.java 2007-11-16 16:50:29 UTC
(rev 6667)
@@ -4153,3 +4153,83 @@
}
}
}
+
+ public void testLancesBitMappingBug() throws Exception {
+ if (!versionMeetsMinimum(5, 0)) {
+ return;
+ }
+
+ createTable("Bit_TabXXX", "( `MAX_VAL` BIT default NULL, "
+ + "`MIN_VAL` BIT default NULL, `NULL_VAL` BIT default NULL) "
+ + "ENGINE=InnoDB DEFAULT CHARSET=latin1");
+
+
+ // add Bit_In_MinXXX procedure
+ createProcedure("Bit_In_MinXXX", "(MIN_PARAM TINYINT(1)) begin update Bit_TabXXX
set MIN_VAL=MIN_PARAM; end");
+
+ createProcedure("Bit_In_MaxXXX", "(MAX_PARAM TINYINT(1)) begin update Bit_TabXXX
set MAX_VAL=MAX_PARAM; end");
+
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+
+ String sPrepStmt = "{call Bit_In_MinXXX(?)}";
+ this.pstmt = conn.prepareStatement(sPrepStmt);
+ this.pstmt.setObject(1,"true",java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("true", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,"false",java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("false", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,"1",java.sql.Types.BIT); // fails
+ this.pstmt.executeUpdate();
+ assertEquals("true", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,"0",java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("false", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,Boolean.TRUE,java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("true", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,Boolean.FALSE,java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("false", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,new Boolean(true),java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("true", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,new Boolean(false),java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("false", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,new Byte("1"),java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("true", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ this.stmt.execute("TRUNCATE TABLE Bit_TabXXX");
+ this.stmt.execute("insert into Bit_TabXXX values(null,0,null)");
+
+ this.pstmt.setObject(1,new Byte("0"),java.sql.Types.BIT);
+ this.pstmt.executeUpdate();
+ assertEquals("false", getSingleIndexedValueWithQuery(1, "SELECT MIN_VAL FROM
Bit_TabXXX").toString());
+ }
+}
| Thread |
|---|
| • Connector/J commit: r6667 - in trunk: . src/com/mysql/jdbc src/testsuite/regression | mmatthews | 16 Nov |