Expose Arrow `Struct` columns as JDBC `STRUCT` metadata in the Flight SQL JDBC driver.
- Langage dominant
- Java
- Étoiles
- 94
- Forks
- 152
- Merge moyen
- 3 j 16 h
- PR mergées (30 j)
- 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`
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java, où ArrowType.Struct est mappé sur Types.JAVA_OBJECT, et examinez l’implémentation associée de ArrowFlightJdbcStructVectorAccessor.java. Mettez à jour le mappage des métadonnées afin que les colonnes Struct indiquent JDBC STRUCT et vérifiez que ResultSetMetaData renvoie STRUCT et "STRUCT" pour ces colonnes.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- database
- Type d'issue
- Fonctionnalité
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 76/100