apache / apache/arrow-java

Expose Arrow `Struct` columns as JDBC `STRUCT` metadata in the Flight SQL JDBC driver.

Abierto Apto para principiantes
#1,100 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Type: enhancement
Lenguaje dominante
Java
Estrellas
94
Forks
152
Merge medio
3 d 16 h
PR fusionados (30 d)
11

Descripción

### 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`

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comience en flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java, donde ArrowType.Struct se asigna a Types.JAVA_OBJECT, y revise la implementación relacionada de ArrowFlightJdbcStructVectorAccessor.java. Actualice la asignación de metadatos para que las columnas Struct indiquen JDBC STRUCT y verifique que ResultSetMetaData devuelva STRUCT y "STRUCT" para esas columnas.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java
Área
database
Tipo de issue
Nueva funcionalidad
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Tranquilo
Claridad
Bien especificado
Aptitud para principiantes
76/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.