From: Date: July 18 2006 6:01pm Subject: Connector/J commit: r5524 - in branches: branch_3_1/connector-j branch_3_1/connector-j/src/com/mysql/jdbc branch_3_1/connector-j/src/testsuite/regression branch_5_0/connector-j branch_5_0/connector-j/src/com/mysql/jdbc branch_5_0/connector-j/src/testsuite/regression List-Archive: http://lists.mysql.com/commits/9283 X-Bug: 21062 Message-Id: <200607181601.k6IG14Lf028429@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: branches/branch_3_1/connector-j/CHANGES branches/branch_3_1/connector-j/src/com/mysql/jdbc/ResultSet.java branches/branch_3_1/connector-j/src/testsuite/regression/ResultSetRegressionTest.java branches/branch_5_0/connector-j/CHANGES branches/branch_5_0/connector-j/src/com/mysql/jdbc/ResultSet.java branches/branch_5_0/connector-j/src/testsuite/regression/ResultSetRegressionTest.java Log: Fixed BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1). Modified: branches/branch_3_1/connector-j/CHANGES =================================================================== --- branches/branch_3_1/connector-j/CHANGES 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_3_1/connector-j/CHANGES 2006-07-18 16:00:59 UTC (rev 5524) @@ -23,6 +23,8 @@ - Fixed BUG#20687 - Can't pool server-side prepared statements, exception raised when re-using them. + - Fixed BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1). + 05-26-06 - Version 3.1.13 - Fixed BUG#15464 - INOUT parameter does not store IN value. Modified: branches/branch_3_1/connector-j/src/com/mysql/jdbc/ResultSet.java =================================================================== --- branches/branch_3_1/connector-j/src/com/mysql/jdbc/ResultSet.java 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_3_1/connector-j/src/com/mysql/jdbc/ResultSet.java 2006-07-18 16:00:59 UTC (rev 5524) @@ -4693,12 +4693,13 @@ byte[] asBytes = (byte[])this.thisRow[columnIndex - 1]; + int shift = 0; long[] steps = new long[asBytes.length]; - for (int i = asBytes.length; i >= 0; i--) { - steps[i] = (long)(asBytes[i] & 0xff) << 48; + for (int i = asBytes.length - 1; i >= 0; i--) { + steps[i] = (long)(asBytes[i] & 0xff) << shift; shift += 8; } Modified: branches/branch_3_1/connector-j/src/testsuite/regression/ResultSetRegressionTest.java =================================================================== --- branches/branch_3_1/connector-j/src/testsuite/regression/ResultSetRegressionTest.java 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_3_1/connector-j/src/testsuite/regression/ResultSetRegressionTest.java 2006-07-18 16:00:59 UTC (rev 5524) @@ -2596,6 +2596,38 @@ } } + /** + * Tests fix for BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1) + * + * @throws Exception if the test fails. + */ + public void testBug21062() throws Exception { + if (versionMeetsMinimum(5, 0, 5)) { + createTable("testBug21062", "(bit_7_field BIT(7), bit_31_field BIT(31), bit_12_field BIT(12))"); + + int max7Bits = 127; + long max31Bits = 2147483647L; + int max12Bits = 4095; + + this.stmt.executeUpdate("INSERT INTO testBug21062 VALUES (" + max7Bits + "," + max31Bits + "," + max12Bits + ")"); + + this.rs = this.stmt.executeQuery("SELECT * FROM testBug21062"); + + this.rs.next(); + + assertEquals(127, this.rs.getInt(1)); + assertEquals(127, this.rs.getShort(1)); + assertEquals(127, this.rs.getLong(1)); + + assertEquals(2147483647, this.rs.getInt(2)); + assertEquals(2147483647, this.rs.getLong(2)); + + assertEquals(4095, this.rs.getInt(3)); + assertEquals(4095, this.rs.getShort(3)); + assertEquals(4095, this.rs.getLong(3)); + } + } + private void traverseResultSetBug14562() throws SQLException { assertTrue(this.rs.next()); Modified: branches/branch_5_0/connector-j/CHANGES =================================================================== --- branches/branch_5_0/connector-j/CHANGES 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_5_0/connector-j/CHANGES 2006-07-18 16:00:59 UTC (rev 5524) @@ -185,6 +185,8 @@ - Fixed BUG#20687 - Can't pool server-side prepared statements, exception raised when re-using them. + - Fixed BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1). + 05-26-06 - Version 3.1.13 - Fixed BUG#15464 - INOUT parameter does not store IN value. Modified: branches/branch_5_0/connector-j/src/com/mysql/jdbc/ResultSet.java =================================================================== --- branches/branch_5_0/connector-j/src/com/mysql/jdbc/ResultSet.java 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_5_0/connector-j/src/com/mysql/jdbc/ResultSet.java 2006-07-18 16:00:59 UTC (rev 5524) @@ -5163,12 +5163,13 @@ byte[] asBytes = (byte[])this.thisRow[columnIndex - 1]; + int shift = 0; long[] steps = new long[asBytes.length]; - for (int i = asBytes.length; i >= 0; i--) { - steps[i] = (long)(asBytes[i] & 0xff) << 48; + for (int i = asBytes.length - 1; i >= 0; i--) { + steps[i] = (long)(asBytes[i] & 0xff) << shift; shift += 8; } Modified: branches/branch_5_0/connector-j/src/testsuite/regression/ResultSetRegressionTest.java =================================================================== --- branches/branch_5_0/connector-j/src/testsuite/regression/ResultSetRegressionTest.java 2006-07-18 00:01:23 UTC (rev 5523) +++ branches/branch_5_0/connector-j/src/testsuite/regression/ResultSetRegressionTest.java 2006-07-18 16:00:59 UTC (rev 5524) @@ -3415,4 +3415,36 @@ assertEquals(133.0, this.rs.getDouble(2), 0); assertEquals(133, this.rs.getBigDecimal(2).intValue()); } + + /** + * Tests fix for BUG#21062 - ResultSet.getSomeInteger() doesn't work for BIT(>1) + * + * @throws Exception if the test fails. + */ + public void testBug21062() throws Exception { + if (versionMeetsMinimum(5, 0, 5)) { + createTable("testBug21062", "(bit_7_field BIT(7), bit_31_field BIT(31), bit_12_field BIT(12))"); + + int max7Bits = 127; + long max31Bits = 2147483647L; + int max12Bits = 4095; + + this.stmt.executeUpdate("INSERT INTO testBug21062 VALUES (" + max7Bits + "," + max31Bits + "," + max12Bits + ")"); + + this.rs = this.stmt.executeQuery("SELECT * FROM testBug21062"); + + this.rs.next(); + + assertEquals(127, this.rs.getInt(1)); + assertEquals(127, this.rs.getShort(1)); + assertEquals(127, this.rs.getLong(1)); + + assertEquals(2147483647, this.rs.getInt(2)); + assertEquals(2147483647, this.rs.getLong(2)); + + assertEquals(4095, this.rs.getInt(3)); + assertEquals(4095, this.rs.getShort(3)); + assertEquals(4095, this.rs.getLong(3)); + } + } }