Describe the bug
The array_replace benchmark calls expr_fn::array_replace_all, which only constructs an Expr::ScalarFunction node, it does not execute the underlying array_replace_all_inner kernel.
As a result, the benchmark measures Expr construction and cloning, not kernel performance. It cannot detect regressions in the function it was originally introduced to protect (added in #8337 — "Avoid concat for array_replace").
To Reproduce
expr_fn::array_replace_all is generated by make_udf_expr_and_func! and returns:
Expr::ScalarFunction { fun: array_replace_all_udf, args: [...] }
It never invokes array_replace_all_inner.
Expected behavior
The benchmark should invoke the kernel on ArrayRef inputs, for example via the ScalarUDFImpl::invoke_* path or by calling array_replace_all_inner directly so that it measures actual replacement performance and guards against kernel regressions.
Additional context
Discovered while investigating #18447.
Describe the bug
The
array_replacebenchmark callsexpr_fn::array_replace_all, which only constructs anExpr::ScalarFunctionnode, it does not execute the underlyingarray_replace_all_innerkernel.As a result, the benchmark measures
Exprconstruction and cloning, not kernel performance. It cannot detect regressions in the function it was originally introduced to protect (added in #8337 — "Avoid concat for array_replace").To Reproduce
expr_fn::array_replace_allis generated bymake_udf_expr_and_func!and returns:It never invokes array_replace_all_inner.
Expected behavior
The benchmark should invoke the kernel on ArrayRef inputs, for example via the ScalarUDFImpl::invoke_* path or by calling array_replace_all_inner directly so that it measures actual replacement performance and guards against kernel regressions.
Additional context
Discovered while investigating #18447.