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 (#4).
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). This lands in two 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 BOOLEAN/TINYINT/SMALLINT/INT/BIGINT/FLOAT/
DOUBLE/STRING/DATE 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: adds a backend unit test and an end-to-end 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/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/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
35 files changed, 1,836 insertions(+), 52 deletions(-)
git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/57/24557/4
--
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: 4
Gerrit-Owner: Zoltan Borok-Nagy <[email protected]>
Gerrit-Reviewer: Impala Public Jenkins <[email protected]>