Menu ▾ ▴

#1759 HSQLDB BIT VARYING- ResultSet.getBytes() fails despite column class being byte[]

version 2.5.x
open-fixed
bug (2)
5
9 hours ago
3 days ago
DB
No

ResultSet.getBytes() fails for BIT VARYING columns

HSQLDB reports the following metadata for a column defined as:

BIT_VARYING_COL BIT VARYING(16)

ResultSetMetaData reports:

COLUMN_NAME     = BIT_VARYING_COL
COLUMN_TYPE_NAME = BIT VARYING
COLUMN_TYPE      = -7 (java.sql.Types.BIT)
COLUMN_CLASS_NAME = [B (byte[])

However, calling:

resultSet.getBytes(columnIndex);

fails with:

org.hsqldb.HsqlException: incompatible data type in conversion:
from SQL type BIT VARYING to [B,
value: instance of org.hsqldb.types.BinaryData

The failure is particularly unexpected because:

ResultSetMetaData.getColumnClassName(columnIndex)

reports:

[B

indicating byte[] as the Java representation.

There may also be a separate metadata issue. BIT VARYING(n) and BIT(n) columns are reported as java.sql.Types.BIT (-7). It may be more appropriate to expose a binary/variable-binary JDBC type (java.sql.Type.BINARY = -2 and java.sql.Type.VARBINARY = -3), although the primary issue is that getBytes() fails despite the reported Java class being byte[].

Reproduction:

CREATE TABLE t (
    bit_varying_col BIT VARYING(16)
);

INSERT INTO t VALUES (B'11001100');

Then:

ResultSet rs = statement.executeQuery(
    "SELECT bit_varying_col FROM t"
);

ResultSetMetaData md = rs.getMetaData();

System.out.println(md.getColumnName(1));
System.out.println(md.getColumnTypeName(1));
System.out.println(md.getColumnType(1));
System.out.println(md.getColumnClassName(1));

rs.next();

byte[] value = rs.getBytes(1);

Observed:

BIT_VARYING_COL
BIT VARYING
-7
[B

followed by:

org.hsqldb.HsqlException:
incompatible data type in conversion:
from SQL type BIT VARYING to [B,
value: instance of org.hsqldb.types.BinaryData

HSQLDB version: 2.7.4
Java version: JDK 17

Discussion

  • Fred Toussi

    Fred Toussi - 9 hours ago
    • status: open --> open-fixed
    • assigned_to: Fred Toussi
     
  • Fred Toussi

    Fred Toussi - 9 hours ago

    Thanks for reporting. Fixed and committed for the next release.

     

Log in to post a comment.