Max Gekk created SPARK-57744:
--------------------------------

             Summary: Types Framework - migrate vectorized column population 
(ColumnVectorUtils.appendValue and Columnar row getters)
                 Key: SPARK-57744
                 URL: https://issues.apache.org/jira/browse/SPARK-57744
             Project: Spark
          Issue Type: Sub-task
          Components: SQL
    Affects Versions: 4.3.0
            Reporter: Max Gekk


h2. What
Migrate the vectorized-reader column-population code paths to dispatch through 
the Types Framework (TypeOps / PhysicalDataType) instead of hand-rolled 
per-type {{instanceof}} chains, so any framework-registered type (TimeType 
today, future types tomorrow) is handled without per-type edits.

h2. Where
* {{sql/core .../execution/vectorized/ColumnVectorUtils.java}} -- 
{{appendValue(WritableColumnVector, DataType, Object)}} (the {{toBatch}} path): 
route the external -> internal conversion through {{TypeOps.toCatalyst}} and 
append according to {{getPhysicalType}}, replacing the tail of the explicit 
{{instanceof}} chain.
* {{sql/catalyst .../vectorized/ColumnarRow.java}} and 
{{ColumnarBatchRow.java}} -- {{get(int, DataType)}}: delegate to 
{{SpecializedGettersReader.read(...)}} (which dispatches on 
{{PhysicalDataType}}), mirroring {{ColumnarArray.get}}, which already does this.

h2. Why
The populate path and the {{copy()}} methods already dispatch on 
{{PhysicalDataType}} and therefore support framework types for free, and 
{{ColumnarArray.get}} already delegates to {{SpecializedGettersReader}}. 
{{appendValue}} and the two row getters are the only remaining hand-maintained 
{{instanceof}} chains in this layer. Bringing them onto the framework removes 
duplicated dispatch and means new framework types need no edits here.

h2. Relationship
* Parent: SPARK-53504 (Types Framework umbrella).
* Related: SPARK-56076 (Phase 1b - Generic Row Access) overlaps with the 
{{get(int, DataType)}} delegation.
* Follows: SPARK-57570, which added an explicit TimeType case to 
{{appendValue}} as a focused fix; this task generalizes that case through the 
framework.

h2. Acceptance criteria
* {{appendValue}} and the columnar row getters no longer special-case 
individual framework types; TIME (and other framework types) flow through 
automatically via {{PhysicalDataType}} / {{TypeOps}}.
* Behavior preserved for existing types. Call out in review: delegating the 
getters changes the unsupported-type error code ({{_LEGACY_ERROR_TEMP_3152}} / 
{{_LEGACY_ERROR_TEMP_3155}} -> {{_LEGACY_ERROR_TEMP_3131}}), and 
{{ColumnarRow.get}} gains {{CalendarIntervalType}} support it currently lacks.
* {{ColumnVectorUtilsSuite}} / {{ColumnarBatchSuite}} continue to pass; the 
per-precision TIME {{testVector}} in {{ColumnarBatchSuite}} can then assert via 
{{batchRow.get(0, dt)}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to