Hello Impala Public Jenkins,
I'd like you to reexamine a change. Please visit
http://gerrit.cloudera.org:8080/24557
to look at the new patch set (#5).
Change subject: IMPALA-15057: Add variant_get() builtin and first-class VARIANT
expressions
......................................................................
IMPALA-15057: Add variant_get() builtin and first-class VARIANT expressions
The patch adds
variant_get(VARIANT, STRING) -> VARIANT
variant_get(VARIANT, STRING, STRING) -> <type>
try_variant_get() (2-args and 3-args as well)
variant_to_json(VARIANT).
There are two main parts: an infrastructure part that makes VARIANT a
first-class expression type, and a feature part that implements the
functions on top of it.
The infrastructure part 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. Because VARIANT codegen is
unimplemented, any expression tree that involves a VARIANT type is
forced onto the interpreted path.
The feature part implements the functions 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 primitive type with widening,
checked narrowing, and string parsing. STRING results are rendered
through the JSON serializer
* DATE is only produced from a DATE value, not silently reinterpreted
from an integer
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:
* backend tests added
* e2e tests added
Change-Id: I55bfed394ac2fb57135fadedd489f59e4cc10de4
Assisted-by: Claude Opus 4.8 (1M context) <[email protected]>
---
M be/src/exprs/CMakeLists.txt
M be/src/exprs/agg-fn-evaluator.cc
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/runtime/variant-value.cc
M be/src/runtime/variant-value.h
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/VariantType.java
A
testdata/workloads/functional-query/queries/QueryTest/iceberg-v3-variant-get.test
M tests/query_test/test_iceberg.py
35 files changed, 1,850 insertions(+), 55 deletions(-)
git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/57/24557/5
--
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: 5
Gerrit-Owner: Zoltan Borok-Nagy <[email protected]>
Gerrit-Reviewer: Impala Public Jenkins <[email protected]>