List:Commits« Previous MessageNext Message »
From:mmatthews Date:November 16 2007 5:50pm
Subject:Connector/J commit: r6667 - in trunk: . src/com/mysql/jdbc src/testsuite/regression
View as plain text  
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/regressionmmatthews16 Nov