Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[CONJ-299] PreparedStatement.setObject(Type.BIT, "1") should register…
… as true
  • Loading branch information
rusher committed Aug 23, 2016
1 parent ff7b1db commit 18fac06
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
Expand Up @@ -866,7 +866,8 @@ private void setInternalObject(final int parameterIndex, final Object obj, final
try {
switch (targetSqlType) {
case Types.BIT:
setBoolean(parameterIndex, Boolean.valueOf(str));
case Types.BOOLEAN:
setBoolean(parameterIndex, !("false".equalsIgnoreCase(str) || "0".equals(str)));
break;
case Types.TINYINT:
setByte(parameterIndex, Byte.parseByte(str));
Expand Down
62 changes: 62 additions & 0 deletions src/test/java/org/mariadb/jdbc/DatatypeTest.java
Expand Up @@ -42,6 +42,8 @@ public static void initClass() throws SQLException {
createTable("blabla", "valsue varchar(20)");
createTable("TestBigIntType", "t1 bigint(20), t2 bigint(20), t3 bigint(20), t4 bigint(20)");
createTable("time_period", "ID int unsigned NOT NULL, START time NOT NULL, END time NOT NULL, PRIMARY KEY (ID)");
createTable("bitBoolTest", "d1 BOOLEAN, d2 BIT");


}

Expand Down Expand Up @@ -371,6 +373,66 @@ public void testBadParamlist() throws SQLException {
ps.execute();
}

/**
* CONJ-299 - PreparedStatement.setObject(Type.BIT, "1") should register as true.
*/

@Test
public void setBitBoolObjectTest() throws SQLException, IOException, ClassNotFoundException {
PreparedStatement ps = sharedConnection.prepareStatement("insert into bitBoolTest values (?,?)");
ps.setObject(1, 0);
ps.setObject(2, 0);
ps.addBatch();

ps.setObject(1, 1);
ps.setObject(2, 1);
ps.addBatch();

ps.setObject(1, "0", Types.BOOLEAN);
ps.setObject(2, "0", Types.BIT);
ps.addBatch();

ps.setObject(1, "1", Types.BOOLEAN);
ps.setObject(2, "1", Types.BIT);
ps.addBatch();

ps.setObject(1, "true", Types.BOOLEAN);
ps.setObject(2, "true", Types.BIT);
ps.addBatch();

ps.setObject(1, "truee", Types.BOOLEAN);
ps.setObject(2, "truee", Types.BIT);
ps.addBatch();

ps.setObject(1, "false", Types.BOOLEAN);
ps.setObject(2, "false", Types.BIT);
ps.addBatch();

ps.executeBatch();

try (ResultSet rs = sharedConnection.createStatement().executeQuery("select * from bitBoolTest")) {
assertValue(rs, false);
assertValue(rs, true);
assertValue(rs, false);
assertValue(rs, true);
assertValue(rs, true);
assertValue(rs, true);
assertValue(rs, false);
assertFalse(rs.next());
}
}

private void assertValue(ResultSet rs, boolean bool) throws SQLException {
assertTrue(rs.next());
if (bool) {
assertTrue(rs.getBoolean(1));
assertTrue(rs.getBoolean(2));
} else {
assertFalse(rs.getBoolean(1));
assertFalse(rs.getBoolean(2));
}
}

@Test
public void setObjectTest() throws SQLException, IOException, ClassNotFoundException {
PreparedStatement ps = sharedConnection.prepareStatement("insert into objecttest values (?,?,?,?)");
Expand Down

0 comments on commit 18fac06

Please sign in to comment.