This is an automated email from the ASF dual-hosted git repository.
eldenmoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 7a34ebbccdc [feature](array-func)support array_match_all/any (#40605)
7a34ebbccdc is described below
commit 7a34ebbccdcb3e1f151a48f3cd139bee420094ea
Author: amory <[email protected]>
AuthorDate: Thu Sep 12 16:57:57 2024 +0800
[feature](array-func)support array_match_all/any (#40605)
array_match_all
means that every element in array column should all match filter
according to lambda expr
array_match_any
means that any element in array column match filter according to lambda
expr
---
.../functions/array/function_array_register.cpp | 2 +
.../vec/functions/array/varray_match_function.cpp | 145 +++
.../doris/analysis/LambdaFunctionCallExpr.java | 4 +-
.../doris/catalog/BuiltinScalarFunctions.java | 4 +
.../glue/translator/ExpressionTranslator.java | 7 +-
.../functions/scalar/ArrayMatchAll.java | 68 +
.../functions/scalar/ArrayMatchAny.java | 68 +
.../expressions/visitor/ScalarFunctionVisitor.java | 10 +
.../data/nereids_function_p0/fn_test_am.csv | 102 ++
.../nereids_function_p0/scalar_function/Array.out | 1320 ++++++++++++++++++++
.../suites/nereids_function_p0/load.groovy | 23 +
.../scalar_function/Array.groovy | 42 +
12 files changed, 1787 insertions(+), 8 deletions(-)
diff --git a/be/src/vec/functions/array/function_array_register.cpp
b/be/src/vec/functions/array/function_array_register.cpp
index ea8a2bda397..7b4103c54df 100644
--- a/be/src/vec/functions/array/function_array_register.cpp
+++ b/be/src/vec/functions/array/function_array_register.cpp
@@ -57,6 +57,7 @@ void register_function_array_count(SimpleFunctionFactory&);
void register_function_array_filter_function(SimpleFunctionFactory&);
void register_function_array_splits(SimpleFunctionFactory&);
void register_function_array_contains_all(SimpleFunctionFactory&);
+void register_function_array_match(SimpleFunctionFactory&);
void register_function_array(SimpleFunctionFactory& factory) {
register_function_array_shuffle(factory);
@@ -94,6 +95,7 @@ void register_function_array(SimpleFunctionFactory& factory) {
register_function_array_filter_function(factory);
register_function_array_splits(factory);
register_function_array_contains_all(factory);
+ register_function_array_match(factory);
}
} // namespace doris::vectorized
diff --git a/be/src/vec/functions/array/varray_match_function.cpp
b/be/src/vec/functions/array/varray_match_function.cpp
new file mode 100644
index 00000000000..c322fea7566
--- /dev/null
+++ b/be/src/vec/functions/array/varray_match_function.cpp
@@ -0,0 +1,145 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <vec/functions/simple_function_factory.h>
+
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "common/status.h"
+#include "vec/aggregate_functions/aggregate_function.h"
+#include "vec/columns/column.h"
+#include "vec/columns/column_array.h"
+#include "vec/columns/column_nullable.h"
+#include "vec/columns/column_vector.h"
+#include "vec/columns/columns_number.h"
+#include "vec/common/assert_cast.h"
+#include "vec/core/block.h"
+#include "vec/core/column_numbers.h"
+#include "vec/core/column_with_type_and_name.h"
+#include "vec/utils/util.hpp"
+
+namespace doris::vectorized {
+
+///* bool array_match_all/any(array<boolean>) *///
+template <bool MATCH_ALL>
+class ArrayMatchFunction : public IFunction {
+public:
+ static constexpr auto name = MATCH_ALL ? "array_match_all" :
"array_match_any";
+ static FunctionPtr create() { return
std::make_shared<ArrayMatchFunction>(); }
+
+ std::string get_name() const override { return name; }
+
+ bool is_variadic() const override { return false; }
+
+ size_t get_number_of_arguments() const override { return 1; }
+
+ bool is_use_default_implementation_for_constants() const override { return
false; }
+
+ bool use_default_implementation_for_nulls() const override { return false;
}
+
+ DataTypePtr get_return_type_impl(const DataTypes& arguments) const
override {
+ return make_nullable(std::make_shared<DataTypeUInt8>());
+ }
+
+ Status execute_impl(FunctionContext* context, Block& block, const
ColumnNumbers& arguments,
+ size_t result, size_t input_rows_count) const override
{
+ // here is executed by array_map filtered and arg[0] is bool result
column
+ const auto& [src_column, src_const] =
+ unpack_if_const(block.get_by_position(arguments[0]).column);
+ const ColumnArray* array_column = nullptr;
+ const UInt8* array_null_map = nullptr;
+ if (src_column->is_nullable()) {
+ auto nullable_array = assert_cast<const
ColumnNullable*>(src_column.get());
+ array_column = assert_cast<const
ColumnArray*>(&nullable_array->get_nested_column());
+ array_null_map =
nullable_array->get_null_map_column().get_data().data();
+ } else {
+ array_column = assert_cast<const ColumnArray*>(src_column.get());
+ }
+
+ if (!array_column) {
+ return Status::RuntimeError("unsupported types for function
{}({})", get_name(),
+
block.get_by_position(arguments[0]).type->get_name());
+ }
+
+ const auto& offsets = array_column->get_offsets();
+ ColumnPtr nested_column = nullptr;
+ const UInt8* nested_null_map = nullptr;
+ if (array_column->get_data().is_nullable()) {
+ const auto& nested_null_column =
+ assert_cast<const
ColumnNullable&>(array_column->get_data());
+ nested_null_map =
nested_null_column.get_null_map_column().get_data().data();
+ nested_column = nested_null_column.get_nested_column_ptr();
+ } else {
+ nested_column = array_column->get_data_ptr();
+ }
+
+ if (!nested_column) {
+ return Status::RuntimeError("unsupported types for function
{}({})", get_name(),
+
block.get_by_position(arguments[0]).type->get_name());
+ }
+
+ const auto& nested_data = assert_cast<const
ColumnUInt8&>(*nested_column).get_data();
+
+ // result is nullable bool column for every array column
+ auto result_data_column = ColumnUInt8::create(input_rows_count, 1);
+ auto result_null_column = ColumnUInt8::create(input_rows_count, 0);
+
+ // iterate over all arrays with bool elements
+ for (int row = 0; row < input_rows_count; ++row) {
+ if (array_null_map && array_null_map[row]) {
+ // current array is null, this is always null
+ result_null_column->get_data()[row] = 1;
+ result_data_column->get_data()[row] = 0;
+ } else {
+ // we should calculate the bool result for current array
+ // has_null in current array
+ bool has_null_elem = false;
+ // res for current array
+ bool res_for_array = MATCH_ALL;
+ for (auto off = offsets[row - 1]; off < offsets[row]; ++off) {
+ if (nested_null_map && nested_null_map[off]) {
+ has_null_elem = true;
+ } else {
+ if (nested_data[off] != MATCH_ALL) { // not match
+ res_for_array = !MATCH_ALL;
+ break;
+ } // default is MATCH_ALL
+ }
+ }
+ result_null_column->get_data()[row] = has_null_elem &&
res_for_array == MATCH_ALL;
+ result_data_column->get_data()[row] = res_for_array;
+ }
+ }
+
+ // insert the result column to block
+ DCHECK(block.get_by_position(result).type->is_nullable());
+ ColumnPtr dst_column =
ColumnNullable::create(std::move(result_data_column),
+
std::move(result_null_column));
+ block.replace_by_position(result, std::move(dst_column));
+ return Status::OK();
+ }
+};
+
+void register_function_array_match(SimpleFunctionFactory& factory) {
+ factory.register_function<ArrayMatchFunction<true>>(); // MATCH_ALL = true
means array_match_all
+ factory.register_function<
+ ArrayMatchFunction<false>>(); // MATCH_ALL = false means
array_match_any
+}
+} // namespace doris::vectorized
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/LambdaFunctionCallExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/LambdaFunctionCallExpr.java
index 5fcb62f76ee..707f76f9672 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/LambdaFunctionCallExpr.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/LambdaFunctionCallExpr.java
@@ -46,8 +46,8 @@ public class LambdaFunctionCallExpr extends FunctionCallExpr {
public static final ImmutableSet<String> LAMBDA_MAPPED_FUNCTION_SET = new
ImmutableSortedSet.Builder(
String.CASE_INSENSITIVE_ORDER).add("array_exists").add("array_sortby")
.add("array_first_index").add("array_last_index").add("array_first").add("array_last").add("array_count")
- .add("element_at").add("array_split").add("array_reverse_split")
- .build();
+
.add("element_at").add("array_split").add("array_reverse_split").add("array_match_any")
+ .add("array_match_all").build();
private static final Logger LOG =
LogManager.getLogger(LambdaFunctionCallExpr.class);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
index 86ed6e55ab5..bd0b9fe4e87 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinScalarFunctions.java
@@ -47,6 +47,8 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayJoin;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayLast;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayLastIndex;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMap;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMatchAll;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMatchAny;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMax;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMin;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayPopBack;
@@ -501,6 +503,8 @@ public class BuiltinScalarFunctions implements
FunctionHelper {
scalar(ArrayLast.class, "array_last"),
scalar(ArrayLastIndex.class, "array_last_index"),
scalar(ArrayMap.class, "array_map"),
+ scalar(ArrayMatchAll.class, "array_match_all"),
+ scalar(ArrayMatchAny.class, "array_match_any"),
scalar(ArrayMax.class, "array_max"),
scalar(ArrayMin.class, "array_min"),
scalar(ArrayPopBack.class, "array_popback"),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
index e876b30280b..c9e49b7535b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
@@ -88,7 +88,6 @@ import
org.apache.doris.nereids.trees.expressions.functions.combinator.UnionComb
import
org.apache.doris.nereids.trees.expressions.functions.generator.TableGeneratingFunction;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMap;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ElementAt;
-import
org.apache.doris.nereids.trees.expressions.functions.scalar.HighOrderFunction;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Lambda;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ScalarFunction;
import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdaf;
@@ -507,11 +506,7 @@ public class ExpressionTranslator extends
DefaultExpressionVisitor<Expr, PlanTra
FunctionCallExpr functionCallExpr;
// create catalog FunctionCallExpr without analyze again
- if (function instanceof HighOrderFunction) {
- functionCallExpr = new LambdaFunctionCallExpr(catalogFunction, new
FunctionParams(false, arguments));
- } else {
- functionCallExpr = new FunctionCallExpr(catalogFunction, new
FunctionParams(false, arguments));
- }
+ functionCallExpr = new FunctionCallExpr(catalogFunction, new
FunctionParams(false, arguments));
functionCallExpr.setNullableFromNereids(function.nullable());
return functionCallExpr;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAll.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAll.java
new file mode 100644
index 00000000000..adc0452b726
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAll.java
@@ -0,0 +1,68 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.ArrayType;
+import org.apache.doris.nereids.types.BooleanType;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'array_match_all'.
+ */
+public class ArrayMatchAll extends ScalarFunction
+ implements HighOrderFunction, AlwaysNullable {
+
+ public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(BooleanType.INSTANCE).args(ArrayType.of(BooleanType.INSTANCE))
+ );
+
+ /**
+ * constructor with arguments.
+ * array_match_all(lambda, a1, ...) = array_match(a1, array_map(lambda,
a1, ...))
+ */
+ public ArrayMatchAll(Expression arg) {
+ super("array_match_all", arg instanceof Lambda ? new ArrayMap(arg) :
arg);
+ }
+
+ @Override
+ public ArrayMatchAll withChildren(List<Expression> children) {
+ if (children.size() != 1) {
+ throw new AnalysisException(
+ String.format("The number of args of %s must be 1 but is
%d", getName(), children.size()));
+ }
+ return new ArrayMatchAll(children.get(0));
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitArrayMatchAll(this, context);
+ }
+
+ @Override
+ public List<FunctionSignature> getImplSignature() {
+ return SIGNATURES;
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAny.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAny.java
new file mode 100644
index 00000000000..bd42bbb3f8c
--- /dev/null
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/ArrayMatchAny.java
@@ -0,0 +1,68 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.expressions.functions.scalar;
+
+import org.apache.doris.catalog.FunctionSignature;
+import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.AlwaysNullable;
+import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
+import org.apache.doris.nereids.types.ArrayType;
+import org.apache.doris.nereids.types.BooleanType;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.List;
+
+/**
+ * ScalarFunction 'array_match_any'.
+ */
+public class ArrayMatchAny extends ScalarFunction
+ implements HighOrderFunction, AlwaysNullable {
+
+ public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
+
FunctionSignature.ret(BooleanType.INSTANCE).args(ArrayType.of(BooleanType.INSTANCE))
+ );
+
+ /**
+ * constructor with arguments.
+ * array_match_any(lambda, a1, ...) = array_match_any(a1,
array_map(lambda, a1, ...))
+ */
+ public ArrayMatchAny(Expression arg) {
+ super("array_match_any", arg instanceof Lambda ? new ArrayMap(arg) :
arg);
+ }
+
+ @Override
+ public ArrayMatchAny withChildren(List<Expression> children) {
+ if (children.size() != 1) {
+ throw new AnalysisException(
+ String.format("The number of args of %s must be 1 but is
%d", getName(), children.size()));
+ }
+ return new ArrayMatchAny(children.get(0));
+ }
+
+ @Override
+ public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
+ return visitor.visitArrayMatchAny(this, context);
+ }
+
+ @Override
+ public List<FunctionSignature> getImplSignature() {
+ return SIGNATURES;
+ }
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
index 8741da5c7d6..a8deb97ef4e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ScalarFunctionVisitor.java
@@ -47,6 +47,8 @@ import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayIntersec
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayJoin;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayLastIndex;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMap;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMatchAll;
+import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMatchAny;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMax;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayMin;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ArrayPopBack;
@@ -661,6 +663,14 @@ public interface ScalarFunctionVisitor<R, C> {
return visitScalarFunction(arraySort, context);
}
+ default R visitArrayMatchAll(ArrayMatchAll arrayMatchAll, C context) {
+ return visitScalarFunction(arrayMatchAll, context);
+ }
+
+ default R visitArrayMatchAny(ArrayMatchAny arrayMatchAny, C context) {
+ return visitScalarFunction(arrayMatchAny, context);
+ }
+
default R visitArrayRepeat(ArrayRepeat arrayRepeat, C context) {
return visitScalarFunction(arrayRepeat, context);
}
diff --git a/regression-test/data/nereids_function_p0/fn_test_am.csv
b/regression-test/data/nereids_function_p0/fn_test_am.csv
new file mode 100644
index 00000000000..de0524a3ef6
--- /dev/null
+++ b/regression-test/data/nereids_function_p0/fn_test_am.csv
@@ -0,0 +1,102 @@
+1 ["a", "b", "c"] []
+2 ["a", null, "c"] [1, 2, 3]
+3 [] []
+4 \N [1, null, 3]
+5 [null, null] \N
+6 \N \N
+7 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[1]
+8 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[7]
+9 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[11]
+10 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+11 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
+12 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+13 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[3]
+14 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+15 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+16 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[4]
+17 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[6]
+18 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+19 \N \N
+20 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+21 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+22 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+23 ["a", "b", "c"] []
+24 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[1]
+25 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
+26 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[3]
+27 [] []
+28 [null, null] \N
+29 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[11]
+30 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+31 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[6]
+32 ["a", null, "c"] [1, 2, 3]
+33 \N [1, null, 3]
+34 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[7]
+35 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+36 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[4]
+37 \N \N
+38 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+39 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+40 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+41 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+42 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[1]
+43 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+44 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+45 ["a", "b", "c"] []
+46 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[1]
+47 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
+48 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[3]
+49 \N \N
+50 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+51 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
+52 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[6]
+53 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[7]
+54 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[4]
+55 [] []
+56 [null, null] \N
+57 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[11]
+58 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+59 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[6]
+60 ["a", "b", "c"] []
+61 [] []
+62 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[11]
+63 ["a", null, "c"] [1, 2, 3]
+64 ["a", null, "c"] [1, 2, 3]
+65 \N [1, null, 3]
+66 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[7]
+67 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+68 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[4]
+69 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+70 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[3]
+71 [null, null] \N
+72 \N [1, null, 3]
+73 \N \N
+74 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+75 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+76 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+77 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+78 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[1]
+79 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+80 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+81 \N \N
+82 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[2]
+83 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
+84 \N \N
+85 [] []
+86 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[6]
+87 [] []
+88 \N [1, null, 3]
+89 [null, null] \N
+90 ["a", null, "c"] [1, 2, 3]
+91 \N [1, null, 3]
+92 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[7]
+93 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[5]
+94 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[4]
+95 ["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"]
[10]
+96 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[3]
+97 [null, null] \N
+98 \N [1, null, 3]
+99 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[12]
+100 ["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"]
[9]
+101 ["a", "b", "c"] []
+102 ["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"]
[8]
diff --git a/regression-test/data/nereids_function_p0/scalar_function/Array.out
b/regression-test/data/nereids_function_p0/scalar_function/Array.out
index 17e8db9a68d..dc519c96ad3 100644
--- a/regression-test/data/nereids_function_p0/scalar_function/Array.out
+++ b/regression-test/data/nereids_function_p0/scalar_function/Array.out
@@ -14454,3 +14454,1323 @@ true
-- !sql_array_map --
[1, 1, 1, 1]
+-- !sql_array_match_any_1 --
+["a", "b", "c"] true
+["a", null, "c"] true
+[] false
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", "b", "c"] true
+[] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["a", null, "c"] true
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+\N \N
+[] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[] false
+\N \N
+[null, null] \N
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", "b", "c"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+
+-- !sql_array_match_all_1 --
+["a", "b", "c"] true
+["a", null, "c"] \N
+[] true
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", "b", "c"] true
+[] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["a", null, "c"] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+\N \N
+[] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[] true
+\N \N
+[null, null] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] true
+["a", "b", "c"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] true
+
+-- !sql_array_match_any_2 --
+["a", "b", "c"] \N
+["a", null, "c"] \N
+[] false
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["a", "b", "c"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["a", "b", "c"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", "b", "c"] \N
+[] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["a", null, "c"] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+\N \N
+[] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[] false
+\N \N
+[null, null] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", "b", "c"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+
+-- !sql_array_match_all_2 --
+["a", "b", "c"] \N
+["a", null, "c"] \N
+[] true
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["a", "b", "c"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["a", "b", "c"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", "b", "c"] \N
+[] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["a", null, "c"] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+\N \N
+[] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[] true
+\N \N
+[null, null] \N
+["a", null, "c"] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] \N
+["a", "b", "c"] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] \N
+
+-- !sql_array_match_any_3 --
+[] false
+[1, 2, 3] \N
+[] false
+[1, null, 3] \N
+\N \N
+\N \N
+[1] \N
+[7] \N
+[11] \N
+[2] \N
+[8] \N
+[12] \N
+[3] \N
+[5] \N
+[9] \N
+[4] \N
+[6] \N
+[10] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[] false
+[1] \N
+[8] \N
+[3] \N
+[] false
+\N \N
+[11] \N
+[9] \N
+[6] \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[2] \N
+[1] \N
+[9] \N
+[5] \N
+[] false
+[1] \N
+[8] \N
+[3] \N
+\N \N
+[12] \N
+[8] \N
+[6] \N
+[7] \N
+[4] \N
+[] false
+\N \N
+[11] \N
+[9] \N
+[6] \N
+[] false
+[] false
+[11] \N
+[1, 2, 3] \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+[10] \N
+[3] \N
+\N \N
+[1, null, 3] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[2] \N
+[1] \N
+[9] \N
+[5] \N
+\N \N
+[2] \N
+[8] \N
+\N \N
+[] false
+[6] \N
+[] false
+[1, null, 3] \N
+\N \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+[10] \N
+[3] \N
+\N \N
+[1, null, 3] \N
+[12] \N
+[9] \N
+[] false
+[8] \N
+
+-- !sql_array_match_all_3 --
+[] true
+[1, 2, 3] \N
+[] true
+[1, null, 3] \N
+\N \N
+\N \N
+[1] \N
+[7] \N
+[11] \N
+[2] \N
+[8] \N
+[12] \N
+[3] \N
+[5] \N
+[9] \N
+[4] \N
+[6] \N
+[10] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[] true
+[1] \N
+[8] \N
+[3] \N
+[] true
+\N \N
+[11] \N
+[9] \N
+[6] \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[2] \N
+[1] \N
+[9] \N
+[5] \N
+[] true
+[1] \N
+[8] \N
+[3] \N
+\N \N
+[12] \N
+[8] \N
+[6] \N
+[7] \N
+[4] \N
+[] true
+\N \N
+[11] \N
+[9] \N
+[6] \N
+[] true
+[] true
+[11] \N
+[1, 2, 3] \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+[10] \N
+[3] \N
+\N \N
+[1, null, 3] \N
+\N \N
+[2] \N
+[12] \N
+[10] \N
+[2] \N
+[1] \N
+[9] \N
+[5] \N
+\N \N
+[2] \N
+[8] \N
+\N \N
+[] true
+[6] \N
+[] true
+[1, null, 3] \N
+\N \N
+[1, 2, 3] \N
+[1, null, 3] \N
+[7] \N
+[5] \N
+[4] \N
+[10] \N
+[3] \N
+\N \N
+[1, null, 3] \N
+[12] \N
+[9] \N
+[] true
+[8] \N
+
+-- !sql_array_match_any_4 --
+["a", "b", "c"] true
+["a", null, "c"] true
+[] false
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["a", "b", "c"] true
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+[] false
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", "b", "c"] true
+[] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["a", null, "c"] true
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+\N \N
+[] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[] false
+\N \N
+[null, null] \N
+["a", null, "c"] true
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", "b", "c"] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+
+-- !sql_array_match_all_4 --
+["a", "b", "c"] false
+["a", null, "c"] false
+[] true
+\N \N
+[null, null] \N
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["a", "b", "c"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", null, "c"] false
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["a", "b", "c"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+[] true
+[null, null] \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", "b", "c"] false
+[] true
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["a", null, "c"] false
+["a", null, "c"] false
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[null, null] \N
+\N \N
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+\N \N
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+\N \N
+[] true
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[] true
+\N \N
+[null, null] \N
+["a", null, "c"] false
+\N \N
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char21", "char31", "varchar11", "varchar21", "varchar31", "string1"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+[null, null] \N
+\N \N
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["char23", "char33", "varchar13", "varchar23", "varchar33", "string3"] false
+["a", "b", "c"] false
+["char22", "char32", "varchar12", "varchar22", "varchar32", "string2"] false
+
+-- !sql_array_match_any_5 --
+[] false
+[1, 2, 3] true
+[] false
+[1, null, 3] \N
+\N \N
+\N \N
+[1] false
+[7] false
+[11] false
+[2] true
+[8] false
+[12] false
+[3] false
+[5] false
+[9] false
+[4] false
+[6] false
+[10] false
+\N \N
+[2] true
+[12] false
+[10] false
+[] false
+[1] false
+[8] false
+[3] false
+[] false
+\N \N
+[11] false
+[9] false
+[6] false
+[1, 2, 3] true
+[1, null, 3] \N
+[7] false
+[5] false
+[4] false
+\N \N
+[2] true
+[12] false
+[10] false
+[2] true
+[1] false
+[9] false
+[5] false
+[] false
+[1] false
+[8] false
+[3] false
+\N \N
+[12] false
+[8] false
+[6] false
+[7] false
+[4] false
+[] false
+\N \N
+[11] false
+[9] false
+[6] false
+[] false
+[] false
+[11] false
+[1, 2, 3] true
+[1, 2, 3] true
+[1, null, 3] \N
+[7] false
+[5] false
+[4] false
+[10] false
+[3] false
+\N \N
+[1, null, 3] \N
+\N \N
+[2] true
+[12] false
+[10] false
+[2] true
+[1] false
+[9] false
+[5] false
+\N \N
+[2] true
+[8] false
+\N \N
+[] false
+[6] false
+[] false
+[1, null, 3] \N
+\N \N
+[1, 2, 3] true
+[1, null, 3] \N
+[7] false
+[5] false
+[4] false
+[10] false
+[3] false
+\N \N
+[1, null, 3] \N
+[12] false
+[9] false
+[] false
+[8] false
+
+-- !sql_array_match_all_5 --
+[] true
+[1, 2, 3] false
+[] true
+[1, null, 3] false
+\N \N
+\N \N
+[1] false
+[7] false
+[11] false
+[2] true
+[8] false
+[12] false
+[3] false
+[5] false
+[9] false
+[4] false
+[6] false
+[10] false
+\N \N
+[2] true
+[12] false
+[10] false
+[] true
+[1] false
+[8] false
+[3] false
+[] true
+\N \N
+[11] false
+[9] false
+[6] false
+[1, 2, 3] false
+[1, null, 3] false
+[7] false
+[5] false
+[4] false
+\N \N
+[2] true
+[12] false
+[10] false
+[2] true
+[1] false
+[9] false
+[5] false
+[] true
+[1] false
+[8] false
+[3] false
+\N \N
+[12] false
+[8] false
+[6] false
+[7] false
+[4] false
+[] true
+\N \N
+[11] false
+[9] false
+[6] false
+[] true
+[] true
+[11] false
+[1, 2, 3] false
+[1, 2, 3] false
+[1, null, 3] false
+[7] false
+[5] false
+[4] false
+[10] false
+[3] false
+\N \N
+[1, null, 3] false
+\N \N
+[2] true
+[12] false
+[10] false
+[2] true
+[1] false
+[9] false
+[5] false
+\N \N
+[2] true
+[8] false
+\N \N
+[] true
+[6] false
+[] true
+[1, null, 3] false
+\N \N
+[1, 2, 3] false
+[1, null, 3] false
+[7] false
+[5] false
+[4] false
+[10] false
+[3] false
+\N \N
+[1, null, 3] false
+[12] false
+[9] false
+[] true
+[8] false
+
+-- !sql_array_match_any_6 --
+[] false
+[1, 2, 3] true
+[] false
+[1, null, 3] true
+\N \N
+\N \N
+[1] true
+[7] true
+[11] true
+[2] false
+[8] true
+[12] true
+[3] true
+[5] true
+[9] true
+[4] true
+[6] true
+[10] true
+\N \N
+[2] false
+[12] true
+[10] true
+[] false
+[1] true
+[8] true
+[3] true
+[] false
+\N \N
+[11] true
+[9] true
+[6] true
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+\N \N
+[2] false
+[12] true
+[10] true
+[2] false
+[1] true
+[9] true
+[5] true
+[] false
+[1] true
+[8] true
+[3] true
+\N \N
+[12] true
+[8] true
+[6] true
+[7] true
+[4] true
+[] false
+\N \N
+[11] true
+[9] true
+[6] true
+[] false
+[] false
+[11] true
+[1, 2, 3] true
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+[10] true
+[3] true
+\N \N
+[1, null, 3] true
+\N \N
+[2] false
+[12] true
+[10] true
+[2] false
+[1] true
+[9] true
+[5] true
+\N \N
+[2] false
+[8] true
+\N \N
+[] false
+[6] true
+[] false
+[1, null, 3] true
+\N \N
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+[10] true
+[3] true
+\N \N
+[1, null, 3] true
+[12] true
+[9] true
+[] false
+[8] true
+
+-- !sql_array_match_all_6 --
+[] false
+[1, 2, 3] true
+[] false
+[1, null, 3] true
+\N \N
+\N \N
+[1] true
+[7] true
+[11] true
+[2] false
+[8] true
+[12] true
+[3] true
+[5] true
+[9] true
+[4] true
+[6] true
+[10] true
+\N \N
+[2] false
+[12] true
+[10] true
+[] false
+[1] true
+[8] true
+[3] true
+[] false
+\N \N
+[11] true
+[9] true
+[6] true
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+\N \N
+[2] false
+[12] true
+[10] true
+[2] false
+[1] true
+[9] true
+[5] true
+[] false
+[1] true
+[8] true
+[3] true
+\N \N
+[12] true
+[8] true
+[6] true
+[7] true
+[4] true
+[] false
+\N \N
+[11] true
+[9] true
+[6] true
+[] false
+[] false
+[11] true
+[1, 2, 3] true
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+[10] true
+[3] true
+\N \N
+[1, null, 3] true
+\N \N
+[2] false
+[12] true
+[10] true
+[2] false
+[1] true
+[9] true
+[5] true
+\N \N
+[2] false
+[8] true
+\N \N
+[] false
+[6] true
+[] false
+[1, null, 3] true
+\N \N
+[1, 2, 3] true
+[1, null, 3] true
+[7] true
+[5] true
+[4] true
+[10] true
+[3] true
+\N \N
+[1, null, 3] true
+[12] true
+[9] true
+[] false
+[8] true
+
+-- !sql_array_match_any_7 --
+\N
+
+-- !sql_array_match_all_7 --
+\N
+
+-- !sql_array_match_any_8 --
+\N
+
+-- !sql_array_match_all_8 --
+\N
+
+-- !sql_array_match_any_9 --
+false
+
+-- !sql_array_match_all_9 --
+true
+
+-- !sql_array_match_any_10 --
+\N
+
+-- !sql_array_match_all_10 --
+\N
+
+-- !sql_array_match_any_11 --
+true
+
+-- !sql_array_match_all_11 --
+false
+
+-- !sql_array_match_any_12 --
+true
+
+-- !sql_array_match_all_12 --
+false
+
+-- !sql_array_match_any_13 --
+\N
+
+-- !sql_array_match_all_13 --
+false
+
+-- !sql_array_match_any_14 --
+false
+
+-- !sql_array_match_all_14 --
+true
+
+-- !sql_array_match_any_15 --
+\N
+
+-- !sql_array_match_all_15 --
+\N
+
+-- !sql_array_match_any_16 --
+true
+
+-- !sql_array_match_all_16 --
+false
+
+-- !sql_array_match_any_17 --
+\N
+
+-- !sql_array_match_all_17 --
+false
+
+-- !sql_array_match_any_18 --
+false
+
+-- !sql_array_match_all_18 --
+true
+
diff --git a/regression-test/suites/nereids_function_p0/load.groovy
b/regression-test/suites/nereids_function_p0/load.groovy
index 104c2d30788..8a54b3bc250 100644
--- a/regression-test/suites/nereids_function_p0/load.groovy
+++ b/regression-test/suites/nereids_function_p0/load.groovy
@@ -264,4 +264,27 @@ suite("load") {
sql """
insert into fn_test_bitmap_not_nullable select * from fn_test_bitmap
where id is not null
"""
+
+ // array_match_any && array_match_all
+ sql """ drop table if exists fn_test_am """
+ sql """ CREATE TABLE IF NOT EXISTS fn_test_am (id int, kastr
array<string>, kaint array<int>) engine=olap
+
DISTRIBUTED BY HASH(`id`) BUCKETS 4
+
properties("replication_num" = "1") """
+ streamLoad {
+ table "fn_test_am"
+ db "regression_test_nereids_function_p0"
+ file "fn_test_am.csv"
+ time 60000
+
+ check { result, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ log.info("Stream load result: ${result}".toString())
+ def json = parseJson(result)
+ assertEquals(102, json.NumberTotalRows)
+ assertEquals(102, json.NumberLoadedRows)
+ }
+ }
+
}
diff --git
a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
index 61fe0e6e766..9b2fb931d74 100644
--- a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
+++ b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
@@ -1350,4 +1350,46 @@ suite("nereids_scalar_fn_Array") {
exception("errCode = 2")
}
+
+ // array_match_any && array_match_all
+ // for table
+ qt_sql_array_match_any_1 "select kastr, array_match_any(x->x!='',
kastr) from fn_test_am order by id"
+ qt_sql_array_match_all_1 "select kastr, array_match_all(x->x!='',
kastr) from fn_test_am order by id"
+ qt_sql_array_match_any_2 "select kastr, array_match_any(x->x!=null,
kastr) from fn_test_am order by id"
+ qt_sql_array_match_all_2 "select kastr, array_match_all(x->x!=null,
kastr) from fn_test_am order by id"
+ qt_sql_array_match_any_3 "select kaint, array_match_any(x->x!=null,
kaint) from fn_test_am order by id"
+ qt_sql_array_match_all_3 "select kaint, array_match_all(x->x!=null,
kaint) from fn_test_am order by id"
+ qt_sql_array_match_any_4 "select kastr, array_match_any(x->x='a',
kastr) from fn_test_am order by id"
+ qt_sql_array_match_all_4 "select kastr, array_match_all(x->x='a',
kastr) from fn_test_am order by id"
+ qt_sql_array_match_any_5 "select kaint, array_match_any(x->x=2, kaint)
from fn_test_am order by id"
+ qt_sql_array_match_all_5 "select kaint, array_match_all(x->x=2, kaint)
from fn_test_am order by id"
+ qt_sql_array_match_any_6 "select kaint, array_match_any(x->x!=2, kaint)
from fn_test_am order by id"
+ qt_sql_array_match_all_6 "select kaint, array_match_any(x->x!=2, kaint)
from fn_test_am order by id"
+
+ // for literal
+ qt_sql_array_match_any_7 "select array_match_any(x->x!=null, array('a',
'b', 'c'))"
+ qt_sql_array_match_all_7 "select array_match_all(x->x!=null, array('a',
'b', 'c'))"
+ qt_sql_array_match_any_8 "select array_match_any(x->x!=null, array('a',
null, 'c'))"
+ qt_sql_array_match_all_8 "select array_match_all(x->x!=null, array('a',
null, 'c'))"
+ qt_sql_array_match_any_9 "select array_match_any(x->x!=null, array())"
+ qt_sql_array_match_all_9 "select array_match_all(x->x!=null, array())"
+ qt_sql_array_match_any_10 "select array_match_any(x->x!=null,
array(null, null))"
+ qt_sql_array_match_all_10 "select array_match_all(x->x!=null,
array(null, null))"
+ qt_sql_array_match_any_11 "select array_match_any(x->x='a', array('a',
'b', 'c'))"
+ qt_sql_array_match_all_11 "select array_match_all(x->x='a', array('a',
'b', 'c'))"
+ qt_sql_array_match_any_12 "select array_match_any(x->x=2, array(1, 2,
3))"
+ qt_sql_array_match_all_12 "select array_match_all(x->x=2, array(1, 2,
3))"
+ qt_sql_array_match_any_13 "select array_match_any(x->x=2, array(1,
null, 3))"
+ qt_sql_array_match_all_13 "select array_match_all(x->x=2, array(1,
null, 3))"
+ qt_sql_array_match_any_14 "select array_match_any(x->x=2, array())"
+ qt_sql_array_match_all_14 "select array_match_all(x->x=2, array())"
+ qt_sql_array_match_any_15 "select array_match_any(x->x=2, array(null,
null))"
+ qt_sql_array_match_all_15 "select array_match_all(x->x=2, array(null,
null))"
+ qt_sql_array_match_any_16 "select array_match_any(x->x=2, array(1, 2,
3))"
+ qt_sql_array_match_all_16 "select array_match_all(x->x=2, array(1, 2,
3))"
+ qt_sql_array_match_any_17 "select array_match_any(x->x=2, array(1,
null, 3))"
+ qt_sql_array_match_all_17 "select array_match_all(x->x=2, array(1,
null, 3))"
+ qt_sql_array_match_any_18 "select array_match_any(x->x=2, array())"
+ qt_sql_array_match_all_18 "select array_match_all(x->x=2, array())"
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]