peterxcli opened a new issue, #5431:
URL: https://github.com/apache/datafusion-comet/issues/5431

   ### What is the problem the feature request solves?
   
   Spark 4.x exposes `to_variant_object` for converting a struct, array, or 
string-keyed map into a Variant object/array. Comet does not serialize or 
evaluate it, so construction from native columns falls back:
   
   ```sql
   SELECT to_variant_object(named_struct('id', id, 'tags', tags)) FROM t;
   SELECT to_variant_object(array(id, id + 1)) FROM t;
   ```
   
   The SQL function is named `to_variant_object`—there is no Spark 4.1.3 
function named `to_variant`. Spark registers the name in its [function 
registry](https://github.com/apache/spark/blob/v4.1.3/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala#L888-L896).
 Scalar-to-Variant conversion is expressed as `CAST(... AS VARIANT)`.
   
   Spark restricts the root input to struct, array, or map and recursively 
validates supported children in 
[`ToVariantObject`](https://github.com/apache/spark/blob/v4.1.3/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala#L121-L185).
 Its encoder handles supported scalar, Variant, array, string-keyed map, and 
struct values recursively in 
[`VariantExpressionEvalUtils`](https://github.com/apache/spark/blob/v4.1.3/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionEvalUtils.scala#L73-L151).
   
   ### Describe the potential solution
   
   Add Spark-4-specific serialization and a native recursive encoder that:
   
   - accepts exactly Spark's root and nested datatype set;
   - produces canonical Variant storage with Spark-compatible object-key 
ordering and metadata IDs;
   - preserves nested nulls as Variant null values while a null root remains 
SQL NULL;
   - preserves embedded Variant values without losing logical identity; and
   - returns the marked `[value, metadata]` output Field required by #5425.
   
   Add focused parity and native-plan tests for structs, arrays, maps, 
recursively nested combinations, Variant children, SQL/nested nulls, Unicode 
and empty object keys, duplicate map keys, unsupported map-key types, and field 
ordering.
   
   ### Additional context
   
   Related work: #4295, #5407, #5425, and the dedicated Variant-cast tracker.
   
   Non-goals: parsing JSON strings, general casts, nested Variant column 
transport, writing, shuffle/spill, C2R, Python transport, and Iceberg.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to