Expose Arrow `Struct` columns as JDBC `STRUCT` metadata in the Flight SQL JDBC driver.
- Dominant language
- Java
- Stars
- 94
- Forks
- 152
- Avg merge
- 3d 16h
- Merged PRs (30d)
- 11
Description
### 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:
- `19.0.0`
Contributor guide
Research direction
Start in flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java, where ArrowType.Struct is mapped to Types.JAVA_OBJECT, and review the related ArrowFlightJdbcStructVectorAccessor.java implementation. Update the metadata mapping so Struct columns report JDBC STRUCT and verify ResultSetMetaData returns STRUCT and "STRUCT" for those columns.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- database
- Issue type
- Feature
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 76/100