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]>
