This is an automated email from the ASF dual-hosted git repository.

airborne pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new c8b2a2ecf3f [feature](array-func)support array_match_all/any (#40605) 
(#43514)
c8b2a2ecf3f is described below

commit c8b2a2ecf3f61b3ccccf4b9cdf60943b29ba96f9
Author: amory <wangqian...@selectdb.com>
AuthorDate: Sat Nov 9 20:20:33 2024 +0800

    [feature](array-func)support array_match_all/any (#40605) (#43514)
    
    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
    
    ### What problem does this PR solve?
    
    Issue Number: close #xxx
    
    Related PR: #xxx
    
    Problem Summary:
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test <!-- At least one of them must be included. -->
        - [x] Regression test
        - [ ] Unit Test
        - [ ] Manual test (add detailed scripts or steps below)
        - [ ] No need to test or manual test. Explain why:
    - [ ] This is a refactor/code format and no logic has been changed.
            - [ ] Previous test can cover this change.
            - [ ] No code files have been changed.
            - [ ] Other reason <!-- Add your reason?  -->
    
    - Behavior changed:
        - [x] No.
        - [ ] Yes. <!-- Explain the behavior change -->
    
    - Does this need documentation?
        - [ ] No.
    - [ ] Yes. <!-- Add document PR link here. eg:
    https://github.com/apache/doris-website/pull/1214 -->
    
    ### Check List (For Reviewer who merge this PR)
    
    - [x] Confirm the release note
    - [ ] Confirm test cases
    - [ ] Confirm document
    - [ ] Add branch pick label <!-- Add branch pick label that this PR
    should merge into -->
---
 .../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         |   25 +
 .../scalar_function/Array.groovy                   |   42 +
 12 files changed, 1789 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 6ddf6b6a5e2..071c3198189 100644
--- a/be/src/vec/functions/array/function_array_register.cpp
+++ b/be/src/vec/functions/array/function_array_register.cpp
@@ -56,6 +56,7 @@ void register_function_array_cum_sum(SimpleFunctionFactory& 
factory);
 void register_function_array_count(SimpleFunctionFactory&);
 void register_function_array_filter_function(SimpleFunctionFactory&);
 void register_function_array_splits(SimpleFunctionFactory&);
+void register_function_array_match(SimpleFunctionFactory&);
 
 void register_function_array(SimpleFunctionFactory& factory) {
     register_function_array_shuffle(factory);
@@ -92,6 +93,7 @@ void register_function_array(SimpleFunctionFactory& factory) {
     register_function_array_count(factory);
     register_function_array_filter_function(factory);
     register_function_array_splits(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 587805ba3a7..b0eaa75e3ca 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
@@ -46,6 +46,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;
@@ -504,6 +506,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 56f1e724650..367e91b0abc 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
@@ -46,6 +46,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 1b926318ec7..9570ac178d7 100644
--- a/regression-test/data/nereids_function_p0/scalar_function/Array.out
+++ b/regression-test/data/nereids_function_p0/scalar_function/Array.out
@@ -15576,3 +15576,1323 @@ false
 \N
 \N
 
+-- !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 2e0fc1e953e..47a5da12d0f 100644
--- a/regression-test/suites/nereids_function_p0/load.groovy
+++ b/regression-test/suites/nereids_function_p0/load.groovy
@@ -275,6 +275,7 @@ suite("load") {
         db "regression_test_nereids_function_p0"
         set 'column_separator', ';'
         file "test_array_large_decimal.csv"
+
         time 60000
 
         check { result, exception, startTime, endTime ->
@@ -287,4 +288,28 @@ suite("load") {
             assertEquals(100, json.NumberLoadedRows)
             }
      }
+       
+
+     // 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 652cb4f5c9b..3da1225ca81 100644
--- a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
+++ b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
@@ -1364,4 +1364,46 @@ suite("nereids_scalar_fn_Array") {
     order_qt_sql_array_overlaps_4 """select arrays_overlap(c, a) from 
fn_test_array_with_large_decimal order by id"""
     order_qt_sql_array_overlaps_5 """select arrays_overlap(b, c) from 
fn_test_array_with_large_decimal order by id"""
     order_qt_sql_array_overlaps_6 """select arrays_overlap(c, b) from 
fn_test_array_with_large_decimal order by id"""
+
+       // 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: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to