Zoltan Borok-Nagy has uploaded a new patch set (#2). ( 
http://gerrit.cloudera.org:8080/24557 )

Change subject: WIP: IMPALA-15057: Add variant_get() builtin and first-class 
VARIANT expressions
......................................................................

WIP: IMPALA-15057: Add variant_get() builtin and first-class VARIANT expressions

Adds variant_get(VARIANT, STRING) -> VARIANT and the typed 3-arg form
variant_get(VARIANT, STRING, STRING) -> <type>, plus try_variant_get()
and variant_to_json(VARIANT).

Part A makes VARIANT a first-class expression type. It introduces the
VariantVal UDF ABI (two StringVals: metadata + value) and unblocks the
mechanisms that previously restricted VARIANT to a scan-only pass-through
SlotRef: AnyVal sizing/alignment/marshalling, symbol mangling, the
Get*Val eval dispatch and interpreted overrides, RawValue::WriteVariant
materialization, and the FE type-resolution and guard checks. Result
rendering (hs2-util, query-result-set) now consumes a VariantVal instead
of a raw slot.

Part B implements the function in variant-functions-ir.cc: the 2-arg form
returns a zero-copy slice (shared metadata, value sub-slice); the 3-arg
form coerces to BOOLEAN/TINYINT/SMALLINT/INT/BIGINT/FLOAT/DOUBLE/STRING/
DATE with widening, checked narrowing, and string parsing. Constant paths
are cached in Prepare/Close. The typed forms are registered under internal
names because the catalog cannot hold overloads that differ only by
return type; FunctionCallExpr maps the type tag to the internal overload.

Testing: adds a backend unit test (variant-functions-test.cc) and an
end-to-end test (iceberg-v3-variant-get.test).

Change-Id: I55bfed394ac2fb57135fadedd489f59e4cc10de4
Assisted-by: Claude Opus 4.8 (1M context) <[email protected]>
---
M be/src/exprs/CMakeLists.txt
M be/src/exprs/anyval-util.h
M be/src/exprs/expr-value.h
M be/src/exprs/null-literal.cc
M be/src/exprs/null-literal.h
M be/src/exprs/scalar-expr-evaluator-ir.cc
M be/src/exprs/scalar-expr-evaluator.cc
M be/src/exprs/scalar-expr-evaluator.h
M be/src/exprs/scalar-expr.cc
M be/src/exprs/scalar-expr.h
M be/src/exprs/scalar-expr.inline.h
M be/src/exprs/scalar-fn-call.cc
M be/src/exprs/scalar-fn-call.h
M be/src/exprs/slot-ref.cc
M be/src/exprs/slot-ref.h
M be/src/exprs/variant-functions-ir.cc
A be/src/exprs/variant-functions-test.cc
M be/src/exprs/variant-functions.h
M be/src/runtime/raw-value.cc
M be/src/service/hs2-util.cc
M be/src/service/query-result-set.cc
M be/src/udf/udf-internal.h
M be/src/util/symbols-util.cc
M be/src/util/variant-util.cc
M be/src/util/variant-util.h
M common/function-registry/impala_functions.py
M fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java
M fe/src/main/java/org/apache/impala/analysis/TupleIsNullPredicate.java
M fe/src/main/java/org/apache/impala/catalog/Function.java
M fe/src/main/java/org/apache/impala/catalog/Type.java
M fe/src/main/java/org/apache/impala/catalog/VariantType.java
A 
testdata/workloads/functional-query/queries/QueryTest/iceberg-v3-variant-get.test
M tests/query_test/test_iceberg.py
33 files changed, 1,521 insertions(+), 54 deletions(-)


  git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/57/24557/2
--
To view, visit http://gerrit.cloudera.org:8080/24557
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I55bfed394ac2fb57135fadedd489f59e4cc10de4
Gerrit-Change-Number: 24557
Gerrit-PatchSet: 2
Gerrit-Owner: Zoltan Borok-Nagy <[email protected]>

Reply via email to