Describe the enhancement requested
Please expose Arrow Struct columns as JDBC STRUCT metadata in the Flight SQL JDBC driver.
Today, Arrow Struct is mapped to java.sql.Types.JAVA_OBJECT, which makes
ResultSetMetaData report:
getColumnType(...) == Types.JAVA_OBJECT
getColumnTypeName(...) == "JAVA_OBJECT"
This hides the fact that the column is structurally a JDBC STRUCT, even though the driver
already has struct-specific accessor support.
Why this matters
JDBC clients often rely on ResultSetMetaData to understand result schemas before reading
rows. When STRUCT columns are reported as JAVA_OBJECT, clients cannot distinguish:
- struct/object-like columns
- generic opaque objects
This makes schema inspection, BI tooling, ORM adapters, and generic JDBC consumers harder.
Current upstream evidence
In
flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java:
ArrowType.Struct maps to Types.JAVA_OBJECT
In flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/accessor/impl/comple x/ArrowFlightJdbcStructVectorAccessor.java:
getStruct() is already implemented
- but
getObjectClass() returns Map.class
getObject() returns a Map
So the data path knows about structs, but metadata does not expose them as JDBC STRUCT.
Expected behavior
For Arrow Struct columns:
ResultSetMetaData.getColumnType(...) should return java.sql.Types.STRUCT
ResultSetMetaData.getColumnTypeName(...) should return STRUCT
Optionally, getObject() / object-class behavior could also be aligned with JDBC Struct, but
the most important gap is metadata.
Actual behavior
Arrow Struct columns are exposed as:
Types.JAVA_OBJECT
"JAVA_OBJECT"
Version
Observed with:
- Arrow Flight SQL JDBC driver
18.2.0
Confirmed in current upstream code and latest published artifact line:
Describe the enhancement requested
Please expose Arrow
Structcolumns as JDBCSTRUCTmetadata in the Flight SQL JDBC driver.Today, Arrow
Structis mapped tojava.sql.Types.JAVA_OBJECT, which makesResultSetMetaDatareport:getColumnType(...) == Types.JAVA_OBJECTgetColumnTypeName(...) == "JAVA_OBJECT"This hides the fact that the column is structurally a JDBC
STRUCT, even though the driveralready has struct-specific accessor support.
Why this matters
JDBC clients often rely on
ResultSetMetaDatato understand result schemas before readingrows. When
STRUCTcolumns are reported asJAVA_OBJECT, clients cannot distinguish:This makes schema inspection, BI tooling, ORM adapters, and generic JDBC consumers harder.
Current upstream evidence
In
flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java:ArrowType.Structmaps toTypes.JAVA_OBJECTIn
flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/accessor/impl/comple x/ArrowFlightJdbcStructVectorAccessor.java:getStruct()is already implementedgetObjectClass()returnsMap.classgetObject()returns aMapSo the data path knows about structs, but metadata does not expose them as JDBC
STRUCT.Expected behavior
For Arrow
Structcolumns:ResultSetMetaData.getColumnType(...)should returnjava.sql.Types.STRUCTResultSetMetaData.getColumnTypeName(...)should returnSTRUCTOptionally,
getObject()/ object-class behavior could also be aligned with JDBCStruct, butthe most important gap is metadata.
Actual behavior
Arrow
Structcolumns are exposed as:Types.JAVA_OBJECT"JAVA_OBJECT"Version
Observed with:
18.2.0Confirmed in current upstream code and latest published artifact line:
19.0.0