Skip to content

Commit

Permalink
[CONJ-987] resultset.getObject() for BINARY data return byte[]
Browse files Browse the repository at this point in the history
  • Loading branch information
rusher committed Jul 20, 2022
1 parent d8febd3 commit fa8dc79
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 15 deletions.
Expand Up @@ -444,13 +444,14 @@ public int getColumnType(Configuration conf) {
public Codec<?> getDefaultCodec(Configuration conf) {
switch (dataType) {
case JSON:
case VARCHAR:
case ENUM:
return StringCodec.INSTANCE;
case NULL:
case SET:
case ENUM:
case VARCHAR:
case VARSTRING:
case STRING:
case NULL:
return StringCodec.INSTANCE;
return isBinary() ? ByteArrayCodec.INSTANCE : StringCodec.INSTANCE;
case TINYINT:
if (conf.tinyInt1isBit() && this.length == 1) return BooleanCodec.INSTANCE;
return IntCodec.INSTANCE;
Expand Down
Expand Up @@ -86,12 +86,12 @@ public void getObjectPrepare() throws SQLException {
}

public void getObject(ResultSet rs) throws SQLException {
assertEquals("0", rs.getObject(1));
assertArrayEquals("0".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(1));
assertFalse(rs.wasNull());
assertEquals("1", rs.getObject(2));
assertEquals("1", rs.getObject("t2alias"));
assertArrayEquals("1".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(2));
assertArrayEquals("1".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject("t2alias"));
assertFalse(rs.wasNull());
assertEquals("some🌟", rs.getObject(3));
assertArrayEquals("some🌟".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(3));
assertFalse(rs.wasNull());
assertNull(rs.getObject(4));
assertTrue(rs.wasNull());
Expand Down Expand Up @@ -735,7 +735,7 @@ public void getMetaData() throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
assertEquals("VARBINARY", meta.getColumnTypeName(1));
assertEquals(sharedConn.getCatalog(), meta.getCatalogName(1));
assertEquals("java.lang.String", meta.getColumnClassName(1));
assertEquals("byte[]", meta.getColumnClassName(1));
assertEquals("t1alias", meta.getColumnLabel(1));
assertEquals("t1", meta.getColumnName(1));
assertEquals(Types.VARBINARY, meta.getColumnType(1));
Expand Down
Expand Up @@ -29,6 +29,7 @@ public class EnumCodecTest extends CommonCodecTest {
public static void drop() throws SQLException {
Statement stmt = sharedConn.createStatement();
stmt.execute("DROP TABLE IF EXISTS EnumCodec");
stmt.execute("DROP TABLE IF EXISTS EnumCodec2");
}

@BeforeAll
Expand All @@ -44,6 +45,8 @@ public static void beforeAll2() throws SQLException {
stmt.execute(
"INSERT INTO EnumCodec VALUES ('0', '1', 'some🌟', null), ('2011-01-01', '2010-12-31 23:59:59.152',"
+ " '23:54:51.840010', null)");
stmt.execute("CREATE TABLE EnumCodec2 (t1 ENUM('0', '1', '2')) CHARACTER SET binary");
stmt.execute("INSERT INTO EnumCodec2 VALUES ('0'), ('1'), (null)");
stmt.execute("FLUSH TABLES");
}

Expand Down Expand Up @@ -96,6 +99,51 @@ public void getObject(ResultSet rs) throws SQLException {
assertTrue(rs.wasNull());
}

private ResultSet getBinary() throws SQLException {
Statement stmt = sharedConn.createStatement();
stmt.execute("START TRANSACTION"); // if MAXSCALE ensure using WRITER
ResultSet rs = stmt.executeQuery("select t1 as t1alias from EnumCodec2");
assertTrue(rs.next());
sharedConn.commit();
return rs;
}

private ResultSet getBinaryPrepare(Connection con) throws SQLException {
java.sql.Statement stmt = con.createStatement();
stmt.execute("START TRANSACTION"); // if MAXSCALE ensure using WRITER
PreparedStatement preparedStatement =
con.prepareStatement("select t1 as t1alias from EnumCodec2" + " WHERE 1 > ?");
preparedStatement.closeOnCompletion();
preparedStatement.setInt(1, 0);
ResultSet rs = preparedStatement.executeQuery();
assertTrue(rs.next());
con.commit();
return rs;
}

@Test
public void getBinaryObject() throws SQLException {
getBinaryObject(getBinary());
}

@Test
public void getBinaryObjectPrepare() throws SQLException {
getBinaryObject(getBinaryPrepare(sharedConn));
getBinaryObject(getBinaryPrepare(sharedConnBinary));
}

public void getBinaryObject(ResultSet rs) throws SQLException {
assertArrayEquals("0".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(1));
assertFalse(rs.wasNull());
assertTrue(rs.next());
assertArrayEquals("1".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(1));
assertFalse(rs.wasNull());
assertFalse(rs.wasNull());
assertTrue(rs.next());
assertNull(rs.getObject(1));
assertTrue(rs.wasNull());
}

@Test
public void getObjectType() throws Exception {
getObjectType(get());
Expand Down
Expand Up @@ -730,7 +730,7 @@ public void getMetaData() throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
assertEquals("NULL", meta.getColumnTypeName(1));
assertEquals("", meta.getCatalogName(1));
assertEquals("java.lang.String", meta.getColumnClassName(1));
assertEquals("byte[]", meta.getColumnClassName(1));
assertEquals("t1alias", meta.getColumnLabel(1));
assertEquals("t1alias", meta.getColumnName(1));
assertEquals(Types.NULL, meta.getColumnType(1));
Expand Down
Expand Up @@ -82,12 +82,12 @@ public void getObjectPrepare() throws Exception {
}

public void getObject(ResultSet rs) throws Exception {
assertEquals("0", rs.getObject(1));
assertArrayEquals("0".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(1));
assertFalse(rs.wasNull());
assertEquals("1", rs.getObject(2));
assertEquals("1", rs.getObject("t2alias"));
assertArrayEquals("1".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(2));
assertArrayEquals("1".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject("t2alias"));
assertFalse(rs.wasNull());
assertEquals("some🌟", rs.getObject(3));
assertArrayEquals("some🌟".getBytes(StandardCharsets.UTF_8), (byte[]) rs.getObject(3));
assertFalse(rs.wasNull());
assertNull(rs.getBlob(4));
assertTrue(rs.wasNull());
Expand Down Expand Up @@ -712,7 +712,7 @@ public void getMetaData() throws SQLException {
ResultSetMetaData meta = rs.getMetaData();
assertEquals("VARBINARY", meta.getColumnTypeName(1));
assertEquals(sharedConn.getCatalog(), meta.getCatalogName(1));
assertEquals("java.lang.String", meta.getColumnClassName(1));
assertEquals("byte[]", meta.getColumnClassName(1));
assertEquals("t1alias", meta.getColumnLabel(1));
assertEquals("t1", meta.getColumnName(1));
assertEquals(Types.VARBINARY, meta.getColumnType(1));
Expand Down

0 comments on commit fa8dc79

Please sign in to comment.