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

gabriellee 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 0f0fdc75cf7 [Enhancement](test) Add function test templates (#40462)
0f0fdc75cf7 is described below

commit 0f0fdc75cf711fa75aa7afd3695d3b33080083dd
Author: zclllhhjj <zhaochan...@selectdb.com>
AuthorDate: Sat Sep 14 21:12:22 2024 +0800

    [Enhancement](test) Add function test templates (#40462)
---
 be/test/vec/function/function_test_template.cpp    |  57 +++
 .../sql_functions/test_template_one_arg.out        |  83 ++++
 .../sql_functions/test_template_three_args.out     | 471 +++++++++++++++++++++
 .../sql_functions/test_template_two_args.out       | 279 ++++++++++++
 .../sql_functions/test_template_one_arg.groovy     |  51 +++
 .../sql_functions/test_template_three_args.groovy  | 114 +++++
 .../sql_functions/test_template_two_args.groovy    | 108 +++++
 7 files changed, 1163 insertions(+)

diff --git a/be/test/vec/function/function_test_template.cpp 
b/be/test/vec/function/function_test_template.cpp
new file mode 100644
index 00000000000..5f2778afc69
--- /dev/null
+++ b/be/test/vec/function/function_test_template.cpp
@@ -0,0 +1,57 @@
+// 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 <string>
+
+#include "function_test_util.h"
+#include "vec/core/types.h"
+#include "vec/data_types/data_type_number.h"
+#include "vec/data_types/data_type_string.h"
+
+namespace doris::vectorized {
+
+TEST(FunctionTestTemplate, two_args_template) {
+    std::string func_name = "atan2";
+
+    BaseInputTypeSet input_types = {TypeIndex::Float64, TypeIndex::Float64};
+
+    DataSet data_set = {
+            {{-1.0, -2.0}, -2.677945044588987},    {{0.0, 0.0}, 0.0},
+            {{0.5, 0.5}, 0.7853981633974483},      {{M_PI, M_PI / 2}, 
1.1071487177940904},
+            {{1e100, 1e-100}, 1.5707963267948966}, {{Null(), Null()}, Null()}};
+
+    static_cast<void>(
+            check_function_all_arg_comb<DataTypeFloat64, true>(func_name, 
input_types, data_set));
+}
+
+TEST(FunctionTestTemplate, three_args_template) {
+    std::string func_name = "concat";
+
+    BaseInputTypeSet input_types = {TypeIndex::String, TypeIndex::String, 
TypeIndex::String};
+
+    DataSet data_set = {{{std::string(""), std::string(""), std::string("")}, 
std::string("")},
+                        {{std::string("123"), std::string("456"), 
std::string("789")},
+                         std::string("123456789")},
+                        {{std::string("123"), Null(), std::string("789")}, 
Null()},
+                        {{std::string("中文"), std::string("中文"), 
std::string("中文")},
+                         std::string("中文中文中文")},
+                        {{std::string("   "), std::string("   "), 
std::string("   ")},
+                         std::string("         ")}};
+
+    check_function_all_arg_comb<DataTypeString, true>(func_name, input_types, 
data_set);
+}
+} // namespace doris::vectorized
\ No newline at end of file
diff --git 
a/regression-test/data/query_p0/sql_functions/test_template_one_arg.out 
b/regression-test/data/query_p0/sql_functions/test_template_one_arg.out
new file mode 100644
index 00000000000..1648b8ad2b0
--- /dev/null
+++ b/regression-test/data/query_p0/sql_functions/test_template_one_arg.out
@@ -0,0 +1,83 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !empty_nullable --
+
+-- !empty_not_nullable --
+
+-- !all_null --
+\N
+\N
+\N
+
+-- !nullable --
+\N
+\N
+\N
+\N
+-0.1001674211615598
+-1.5707963267948966
+0.0
+0.0
+0.1001674211615598
+1.0E-100
+1.0E-15
+1.5707963267948966
+
+-- !not_nullable --
+\N
+\N
+\N
+-0.1001674211615598
+-1.5707963267948966
+0.0
+0.0
+0.0
+0.1001674211615598
+1.0E-100
+1.0E-15
+1.5707963267948966
+
+-- !nullable_no_null --
+\N
+\N
+\N
+-0.1001674211615598
+-1.5707963267948966
+0.0
+0.0
+0.0
+0.1001674211615598
+1.0E-100
+1.0E-15
+1.5707963267948966
+
+-- !const_nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !const_not_nullable --
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+0.5235987755982989
+
+-- !const_nullable_no_null --
+0.5235987755982989
+
diff --git 
a/regression-test/data/query_p0/sql_functions/test_template_three_args.out 
b/regression-test/data/query_p0/sql_functions/test_template_three_args.out
new file mode 100644
index 00000000000..b85ce8c74e1
--- /dev/null
+++ b/regression-test/data/query_p0/sql_functions/test_template_three_args.out
@@ -0,0 +1,471 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !empty_nullable --
+
+-- !empty_not_nullable --
+
+-- !empty_partial_nullable --
+
+-- !all_null --
+\N
+\N
+\N
+
+-- !nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+   
+   
+   
+      
+      
+      
+         
+      !@#@#$#^$%%$^
+      123123
+      \\a\\b\\c\\d
+      中文
+   !@#@#$#^$%%$^
+   !@#@#$#^$%%$^
+   !@#@#$#^$%%$^
+   !@#@#$#^$%%$^   
+   !@#@#$#^$%%$^!@#@#$#^$%%$^
+   !@#@#$#^$%%$^123123
+   !@#@#$#^$%%$^\\a\\b\\c\\d
+   !@#@#$#^$%%$^中文
+   123123
+   123123
+   123123
+   123123   
+   123123!@#@#$#^$%%$^
+   123123123123
+   123123\\a\\b\\c\\d
+   123123中文
+   \\a\\b\\c\\d
+   \\a\\b\\c\\d
+   \\a\\b\\c\\d
+   \\a\\b\\c\\d   
+   \\a\\b\\c\\d!@#@#$#^$%%$^
+   \\a\\b\\c\\d123123
+   \\a\\b\\c\\d\\a\\b\\c\\d
+   \\a\\b\\c\\d中文
+   中文
+   中文
+   中文
+   中文   
+   中文!@#@#$#^$%%$^
+   中文123123
+   中文\\a\\b\\c\\d
+   中文中文
+!@#@#$#^$%%$^
+!@#@#$#^$%%$^
+!@#@#$#^$%%$^
+!@#@#$#^$%%$^   
+!@#@#$#^$%%$^   
+!@#@#$#^$%%$^   
+!@#@#$#^$%%$^      
+!@#@#$#^$%%$^   !@#@#$#^$%%$^
+!@#@#$#^$%%$^   123123
+!@#@#$#^$%%$^   \\a\\b\\c\\d
+!@#@#$#^$%%$^   中文
+!@#@#$#^$%%$^!@#@#$#^$%%$^
+!@#@#$#^$%%$^!@#@#$#^$%%$^
+!@#@#$#^$%%$^!@#@#$#^$%%$^
+!@#@#$#^$%%$^!@#@#$#^$%%$^   
+!@#@#$#^$%%$^!@#@#$#^$%%$^!@#@#$#^$%%$^
+!@#@#$#^$%%$^!@#@#$#^$%%$^123123
+!@#@#$#^$%%$^!@#@#$#^$%%$^\\a\\b\\c\\d
+!@#@#$#^$%%$^!@#@#$#^$%%$^中文
+!@#@#$#^$%%$^123123
+!@#@#$#^$%%$^123123
+!@#@#$#^$%%$^123123
+!@#@#$#^$%%$^123123   
+!@#@#$#^$%%$^123123!@#@#$#^$%%$^
+!@#@#$#^$%%$^123123123123
+!@#@#$#^$%%$^123123\\a\\b\\c\\d
+!@#@#$#^$%%$^123123中文
+!@#@#$#^$%%$^\\a\\b\\c\\d
+!@#@#$#^$%%$^\\a\\b\\c\\d
+!@#@#$#^$%%$^\\a\\b\\c\\d
+!@#@#$#^$%%$^\\a\\b\\c\\d   
+!@#@#$#^$%%$^\\a\\b\\c\\d!@#@#$#^$%%$^
+!@#@#$#^$%%$^\\a\\b\\c\\d123123
+!@#@#$#^$%%$^\\a\\b\\c\\d\\a\\b\\c\\d
+!@#@#$#^$%%$^\\a\\b\\c\\d中文
+!@#@#$#^$%%$^中文
+!@#@#$#^$%%$^中文
+!@#@#$#^$%%$^中文
+!@#@#$#^$%%$^中文   
+!@#@#$#^$%%$^中文!@#@#$#^$%%$^
+!@#@#$#^$%%$^中文123123
+!@#@#$#^$%%$^中文\\a\\b\\c\\d
+!@#@#$#^$%%$^中文中文
+123123
+123123
+123123
+123123   
+123123   
+123123   
+123123      
+123123   !@#@#$#^$%%$^
+123123   123123
+123123   \\a\\b\\c\\d
+123123   中文
+123123!@#@#$#^$%%$^
+123123!@#@#$#^$%%$^
+123123!@#@#$#^$%%$^
+123123!@#@#$#^$%%$^   
+123123!@#@#$#^$%%$^!@#@#$#^$%%$^
+123123!@#@#$#^$%%$^123123
+123123!@#@#$#^$%%$^\\a\\b\\c\\d
+123123!@#@#$#^$%%$^中文
+123123123123
+123123123123
+123123123123
+123123123123   
+123123123123!@#@#$#^$%%$^
+123123123123123123
+123123123123\\a\\b\\c\\d
+123123123123中文
+123123\\a\\b\\c\\d
+123123\\a\\b\\c\\d
+123123\\a\\b\\c\\d
+123123\\a\\b\\c\\d   
+123123\\a\\b\\c\\d!@#@#$#^$%%$^
+123123\\a\\b\\c\\d123123
+123123\\a\\b\\c\\d\\a\\b\\c\\d
+123123\\a\\b\\c\\d中文
+123123中文
+123123中文
+123123中文
+123123中文   
+123123中文!@#@#$#^$%%$^
+123123中文123123
+123123中文\\a\\b\\c\\d
+123123中文中文
+\\a\\b\\c\\d
+\\a\\b\\c\\d
+\\a\\b\\c\\d
+\\a\\b\\c\\d   
+\\a\\b\\c\\d   
+\\a\\b\\c\\d   
+\\a\\b\\c\\d      
+\\a\\b\\c\\d   !@#@#$#^$%%$^
+\\a\\b\\c\\d   123123
+\\a\\b\\c\\d   \\a\\b\\c\\d
+\\a\\b\\c\\d   中文
+\\a\\b\\c\\d!@#@#$#^$%%$^
+\\a\\b\\c\\d!@#@#$#^$%%$^
+\\a\\b\\c\\d!@#@#$#^$%%$^
+\\a\\b\\c\\d!@#@#$#^$%%$^   
+\\a\\b\\c\\d!@#@#$#^$%%$^!@#@#$#^$%%$^
+\\a\\b\\c\\d!@#@#$#^$%%$^123123
+\\a\\b\\c\\d!@#@#$#^$%%$^\\a\\b\\c\\d
+\\a\\b\\c\\d!@#@#$#^$%%$^中文
+\\a\\b\\c\\d123123
+\\a\\b\\c\\d123123
+\\a\\b\\c\\d123123
+\\a\\b\\c\\d123123   
+\\a\\b\\c\\d123123!@#@#$#^$%%$^
+\\a\\b\\c\\d123123123123
+\\a\\b\\c\\d123123\\a\\b\\c\\d
+\\a\\b\\c\\d123123中文
+\\a\\b\\c\\d\\a\\b\\c\\d
+\\a\\b\\c\\d\\a\\b\\c\\d
+\\a\\b\\c\\d\\a\\b\\c\\d
+\\a\\b\\c\\d\\a\\b\\c\\d   
+\\a\\b\\c\\d\\a\\b\\c\\d!@#@#$#^$%%$^
+\\a\\b\\c\\d\\a\\b\\c\\d123123
+\\a\\b\\c\\d\\a\\b\\c\\d\\a\\b\\c\\d
+\\a\\b\\c\\d\\a\\b\\c\\d中文
+\\a\\b\\c\\d中文
+\\a\\b\\c\\d中文
+\\a\\b\\c\\d中文
+\\a\\b\\c\\d中文   
+\\a\\b\\c\\d中文!@#@#$#^$%%$^
+\\a\\b\\c\\d中文123123
+\\a\\b\\c\\d中文\\a\\b\\c\\d
+\\a\\b\\c\\d中文中文
+中文
+中文
+中文
+中文   
+中文   
+中文   
+中文      
+中文   !@#@#$#^$%%$^
+中文   123123
+中文   \\a\\b\\c\\d
+中文   中文
+中文!@#@#$#^$%%$^
+中文!@#@#$#^$%%$^
+中文!@#@#$#^$%%$^
+中文!@#@#$#^$%%$^   
+中文!@#@#$#^$%%$^!@#@#$#^$%%$^
+中文!@#@#$#^$%%$^123123
+中文!@#@#$#^$%%$^\\a\\b\\c\\d
+中文!@#@#$#^$%%$^中文
+中文123123
+中文123123
+中文123123
+中文123123   
+中文123123!@#@#$#^$%%$^
+中文123123123123
+中文123123\\a\\b\\c\\d
+中文123123中文
+中文\\a\\b\\c\\d
+中文\\a\\b\\c\\d
+中文\\a\\b\\c\\d
+中文\\a\\b\\c\\d   
+中文\\a\\b\\c\\d!@#@#$#^$%%$^
+中文\\a\\b\\c\\d123123
+中文\\a\\b\\c\\d\\a\\b\\c\\d
+中文\\a\\b\\c\\d中文
+中文中文
+中文中文
+中文中文
+中文中文   
+中文中文!@#@#$#^$%%$^
+中文中文123123
+中文中文\\a\\b\\c\\d
+中文中文中文
+
+-- !not_nullable --
+
+
+         
+!@#@#$#^$%%$^!@#@#$#^$%%$^!@#@#$#^$%%$^
+123123123123123123
+\\a\\b\\c\\d\\a\\b\\c\\d\\a\\b\\c\\d
+中文中文中文
+
+-- !partial_nullable --
+\N
+
+         
+!@#@#$#^$%%$^!@#@#$#^$%%$^!@#@#$#^$%%$^
+123123123123123123
+\\a\\b\\c\\d\\a\\b\\c\\d\\a\\b\\c\\d
+中文中文中文
+
+-- !nullable_no_null --
+
+
+         
+!@#@#$#^$%%$^!@#@#$#^$%%$^!@#@#$#^$%%$^
+123123123123123123
+\\a\\b\\c\\d\\a\\b\\c\\d\\a\\b\\c\\d
+中文中文中文
+
+-- !const_nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !partial_const_nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !const_not_nullable --
+abc
+abc
+abc
+abc
+abc
+abc
+abc
+
+-- !const_other_nullable --
+\N
+x
+x      
+x!@#@#$#^$%%$^!@#@#$#^$%%$^
+x123123123123
+x\\a\\b\\c\\d\\a\\b\\c\\d
+x中文中文
+
+-- !const_other_not_nullable --
+xx
+xx
+xx   
+xx!@#@#$#^$%%$^
+xx123123
+xx\\a\\b\\c\\d
+xx中文
+
+-- !const_nullable_no_null --
+abc中文xxx
+
+-- !const_partial_nullable_no_null --
+xyzaa
+
+-- !const1 --
+\N
+xyz
+xyz      
+xyz!@#@#$#^$%%$^!@#@#$#^$%%$^
+xyz123123123123
+xyz\\a\\b\\c\\d\\a\\b\\c\\d
+xyz中文中文
+
+-- !const12 --
+\N
+xyzabc
+xyzabc   
+xyzabc!@#@#$#^$%%$^
+xyzabc123123
+xyzabc\\a\\b\\c\\d
+xyzabc中文
+
+-- !const23 --
+   xyzabc
+!@#@#$#^$%%$^xyzabc
+123123xyzabc
+\\a\\b\\c\\dxyzabc
+xyzabc
+xyzabc
+中文xyzabc
+
+-- !const3 --
+\N
+      abc
+!@#@#$#^$%%$^!@#@#$#^$%%$^abc
+123123123123abc
+\\a\\b\\c\\d\\a\\b\\c\\dabc
+abc
+中文中文abc
+
diff --git 
a/regression-test/data/query_p0/sql_functions/test_template_two_args.out 
b/regression-test/data/query_p0/sql_functions/test_template_two_args.out
new file mode 100644
index 00000000000..e12f22f155c
--- /dev/null
+++ b/regression-test/data/query_p0/sql_functions/test_template_two_args.out
@@ -0,0 +1,279 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !empty_nullable --
+
+-- !empty_not_nullable --
+
+-- !empty_partial_nullable --
+
+-- !all_null --
+\N
+\N
+\N
+
+-- !nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+-0.008129902179943912
+-0.09966865249116204
+-0.7853981633974483
+-0.7853981633974483
+-0.7853981633974483
+-1.0E-100
+-1.0E-101
+-1.4711276743037345
+-1.5707963267948866
+-1.5707963267948957
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.5707963267948966
+-1.6704649792860586
+-2.356194490192345
+-2.356194490192345
+-2.356194490192345
+-3.0419240010986313
+-3.141592653589793
+-3.141592653589793
+-8.130079509533991E-4
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.0
+0.008129902179943912
+0.09966865249116204
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+1.0E-100
+1.0E-100
+1.0E-101
+1.0E-115
+1.0E-14
+1.0E-15
+1.0E-200
+1.0E-85
+1.0E-99
+1.23E-98
+1.4711276743037345
+1.5626664246149526
+1.5699833188439432
+1.5707963267948866
+1.5707963267948957
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.57160933474585
+1.5789262289748405
+1.6704649792860586
+2.356194490192345
+2.356194490192345
+2.356194490192345
+3.0419240010986313
+3.1415926535897833
+3.1415926535897922
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+3.141592653589793
+8.130079509533991E-4
+8.130081300813008E-103
+8.130081300813008E-18
+
+-- !not_nullable --
+-2.356194490192345
+-2.356194490192345
+-2.356194490192345
+0.0
+0.0
+0.0
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+
+-- !partial_nullable --
+\N
+-2.356194490192345
+-2.356194490192345
+-2.356194490192345
+0.0
+0.0
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+
+-- !nullable_no_null --
+-2.356194490192345
+-2.356194490192345
+-2.356194490192345
+0.0
+0.0
+0.0
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+0.7853981633974483
+
+-- !const_nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !partial_const_nullable --
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+\N
+
+-- !const_not_nullable --
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+0.0049999583339583225
+
+-- !const_other_nullable --
+\N
+0.08112239210090098
+1.0E-99
+1.4711276743037347
+1.5607966601082315
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5707963267948966
+1.5807959934815619
+1.6704649792860586
+3.141592653589793
+
+-- !const_other_not_nullable --
+-0.00999966668666524
+-0.09966865249116202
+-1.5707963267948966
+0.0
+0.0
+0.0
+0.00999966668666524
+0.09966865249116202
+1.0000000000000001E-16
+1.0E-101
+1.4896739346939956
+1.5707963267948966
+
+-- !const_nullable_no_null --
+1.5707963267948966
+
+-- !const_nullable_no_null_multirows --
+1.5707963267948966
+
+-- !const_partial_nullable_no_null --
+1.5707963267948966
+
diff --git 
a/regression-test/suites/query_p0/sql_functions/test_template_one_arg.groovy 
b/regression-test/suites/query_p0/sql_functions/test_template_one_arg.groovy
new file mode 100644
index 00000000000..078d100c70c
--- /dev/null
+++ b/regression-test/suites/query_p0/sql_functions/test_template_one_arg.groovy
@@ -0,0 +1,51 @@
+// 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.
+
+suite("test_template_one_arg") {
+    sql " drop table if exists test_asin"
+    sql """
+        create table test_asin (
+            k0 int,
+            a double not null,
+            b double null
+        )
+        DISTRIBUTED BY HASH(k0)
+        PROPERTIES
+        (
+            "replication_num" = "1"
+        );
+    """
+
+    order_qt_empty_nullable "select asin(b) from test_asin"
+    order_qt_empty_not_nullable "select asin(a) from test_asin"
+
+    sql "insert into test_asin values (1, 1, null), (1, 1, null), (1, 1, null)"
+    order_qt_all_null "select asin(b) from test_asin"
+
+    sql "truncate table test_asin"
+    sql """ insert into test_asin values (1, 1e-100, 1e-100), (2, -1e100, 
-1e100), (3, 1e100, 1e100), (4, 1, 1), (5, -1, -1),
+        (6, 0, 0), (7, -0, -0), (8, 123, 123),
+        (9, 0.1, 0.1), (10, -0.1, -0.1), (11, 1e-15, 1e-15), (12, 0, null);
+    """
+
+    order_qt_nullable "select asin(b) from test_asin"
+    order_qt_not_nullable "select asin(a) from test_asin"
+    order_qt_nullable_no_null "select asin(nullable(a)) from test_asin"
+    order_qt_const_nullable "select asin(NULL) from test_asin" // choose some 
cases to test const multi-rows
+    order_qt_const_not_nullable "select asin(0.5) from test_asin"
+    order_qt_const_nullable_no_null "select asin(nullable(0.5))"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/query_p0/sql_functions/test_template_three_args.groovy 
b/regression-test/suites/query_p0/sql_functions/test_template_three_args.groovy
new file mode 100644
index 00000000000..13de80a0393
--- /dev/null
+++ 
b/regression-test/suites/query_p0/sql_functions/test_template_three_args.groovy
@@ -0,0 +1,114 @@
+// 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.
+
+suite("test_template_three_args") {
+    // this table has nothing todo. just make it eaiser to generate query
+    sql " drop table if exists hits_three_args "
+    sql """ create table hits_three_args(
+                nothing boolean
+            )
+            properties("replication_num" = "1");
+    """
+    sql "insert into hits_three_args values(true);"
+
+    sql " drop table if exists arg1_three_args"
+    sql """
+        create table arg1_three_args (
+            k0 int,
+            a varchar not null,
+            b varchar null,
+        )
+        DISTRIBUTED BY HASH(k0)
+        PROPERTIES
+        (
+            "replication_num" = "1"
+        );
+    """
+
+    order_qt_empty_nullable "select concat(a, a, a) from arg1_three_args"
+    order_qt_empty_not_nullable "select concat(b, b, b) from arg1_three_args"
+    order_qt_empty_partial_nullable "select concat(a, b, b) from 
arg1_three_args"
+
+    sql "insert into arg1_three_args values (1, 1, null), (1, 1, null), (1, 1, 
null)"
+    order_qt_all_null "select concat(b, b, b ,b) from arg1_three_args"
+
+    sql "truncate table arg1_three_args"
+    sql """ insert into arg1_three_args values (1, "", ""), (2, "中文", "中文"), 
(3, "123123", "123123"),
+            (4, "\\\\a\\\\b\\\\c\\\\d", "\\\\a\\\\b\\\\c\\\\d"),
+            (5, "!@#@#\$#^\$%%\$^", "!@#@#\$#^\$%%\$^"), (6, "   ", "   "),
+            (7, "", NULL);
+    """
+
+    order_qt_nullable """
+        SELECT concat(t.arg1_three_args, t.ARG2, t.ARG3) as result
+        FROM (
+            SELECT hits_three_args.nothing, TABLE1.arg1_three_args, 
TABLE1.order1, TABLE2.ARG2, TABLE2.order2, TABLE3.ARG3, TABLE3.order3
+            FROM hits_three_args
+            CROSS JOIN (
+                SELECT b as arg1_three_args, k0 as order1
+                FROM arg1_three_args
+            ) as TABLE1
+            CROSS JOIN (
+                SELECT b as ARG2, k0 as order2
+                FROM arg1_three_args
+            ) as TABLE2
+            CROSS JOIN (
+                SELECT b as ARG3, k0 as order3
+                FROM arg1_three_args
+            ) as TABLE3
+        )t;
+    """
+
+    /// nullables
+    order_qt_not_nullable "select concat(a, a, a) from arg1_three_args"
+    order_qt_partial_nullable "select concat(a, b, b) from arg1_three_args"
+    order_qt_nullable_no_null "select concat(a, nullable(a), nullable(a)) from 
arg1_three_args"
+    /// if you set `use_default_implementation_for_nulls` to false, add:
+    // order_qt_nullable1 " SELECT b as arg1_three_args...)as TABLE1 ... 
SELECT a as arg1_three_args...)as TABLE1 ...
+    // order_qt_nullable2 " SELECT a as arg1_three_args...)as TABLE1 ... 
SELECT b as arg1_three_args...)as TABLE1 ...
+
+    /// consts. most by BE-UT
+    order_qt_const_nullable "select concat(NULL, NULL, NULL) from 
arg1_three_args"
+    order_qt_partial_const_nullable "select concat(NULL, b, b) from 
arg1_three_args"
+    order_qt_const_not_nullable "select concat('a', 'b', 'c') from 
arg1_three_args"
+    order_qt_const_other_nullable "select concat('x', b, b) from 
arg1_three_args"
+    order_qt_const_other_not_nullable "select concat('x', 'x', a) from 
arg1_three_args"
+    order_qt_const_nullable_no_null "select concat(nullable('abc'), 
nullable('中文'), nullable('xxx'))"
+    order_qt_const_partial_nullable_no_null "select concat('xyz', 
nullable('a'), nullable('a'))"
+    order_qt_const1 "select concat('xyz', a, b) from arg1_three_args"
+    order_qt_const12 "select concat('xyz', 'abc', b) from arg1_three_args"
+    order_qt_const23 "select concat(a, 'xyz', 'abc') from arg1_three_args"
+    order_qt_const3 "select concat(b, a, 'abc') from arg1_three_args"
+
+    /// folding
+    def re_fe
+    def re_be
+    def re_no_fold
+    def check_three_ways = { test_sql ->
+        re_fe = order_sql 
"select/*+SET_VAR(enable_fold_constant_by_be=false)*/ ${test_sql}"
+        re_be = order_sql "select/*+SET_VAR(enable_fold_constant_by_be=true)*/ 
${test_sql}"
+        re_no_fold = order_sql 
"select/*+SET_VAR(debug_skip_fold_constant=true)*/ ${test_sql}"
+        logger.info("check on sql \${test_sql}")
+        assertEquals(re_fe, re_be)
+        assertEquals(re_fe, re_no_fold)
+    }
+
+    check_three_ways "concat('', '', '')"
+    check_three_ways "concat('\\t\\t', '\\t\\t', '\\t\\t')"
+    check_three_ways "concat('中文', '中文', '中文')"
+    check_three_ways "concat('abcde', 'abcde', 'abcde')"
+}
\ No newline at end of file
diff --git 
a/regression-test/suites/query_p0/sql_functions/test_template_two_args.groovy 
b/regression-test/suites/query_p0/sql_functions/test_template_two_args.groovy
new file mode 100644
index 00000000000..9d7e2643eca
--- /dev/null
+++ 
b/regression-test/suites/query_p0/sql_functions/test_template_two_args.groovy
@@ -0,0 +1,108 @@
+// 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.
+
+suite("test_template_two_args") {
+    // this table has nothing todo. just make it eaiser to generate query
+    sql " drop table if exists hits_two_args "
+    sql """ create table hits_two_args(
+                nothing boolean
+            )
+            properties("replication_num" = "1");
+    """
+    sql "insert into hits_two_args values(true);"
+
+    sql " drop table if exists arg1_two_args"
+    sql """
+        create table arg1_two_args (
+            k0 int,
+            a double not null,
+            b double null,
+        )
+        DISTRIBUTED BY HASH(k0)
+        PROPERTIES
+        (
+            "replication_num" = "1"
+        );
+    """
+
+    order_qt_empty_nullable "select atan2(a, a) from arg1_two_args"
+    order_qt_empty_not_nullable "select atan2(b, b) from arg1_two_args"
+    order_qt_empty_partial_nullable "select atan2(a, b) from arg1_two_args"
+
+    sql "insert into arg1_two_args values (1, 1, null), (1, 1, null), (1, 1, 
null)"
+    order_qt_all_null "select atan2(b, b) from arg1_two_args"
+
+    sql "truncate table arg1_two_args"
+    sql """ insert into arg1_two_args values (1, 1e-100, 1e-100), (2, -1e100, 
-1e100), (3, 1e100, 1e100), (4, 1, 1), (5, -1, -1),
+        (6, 0, 0), (7, -0, -0), (8, 123, 123),
+        (9, 0.1, 0.1), (10, -0.1, -0.1), (11, 1e-15, 1e-15), (12, 0, null);
+    """
+
+    /// all values
+    order_qt_nullable """
+        SELECT atan2(t.arg1_two_args, t.ARG2) as result
+        FROM (
+            SELECT hits_two_args.nothing, TABLE1.arg1_two_args, TABLE1.order1, 
TABLE2.ARG2, TABLE2.order2
+            FROM hits_two_args
+            CROSS JOIN (
+                SELECT b as arg1_two_args, k0 as order1
+                FROM arg1_two_args
+            ) as TABLE1
+            CROSS JOIN (
+                SELECT b as ARG2, k0 as order2
+                FROM arg1_two_args
+            ) as TABLE2
+        )t;
+    """
+
+    /// nullables
+    order_qt_not_nullable "select atan2(a, a) from arg1_two_args"
+    order_qt_partial_nullable "select atan2(a, b) from arg1_two_args"
+    order_qt_nullable_no_null "select atan2(a, nullable(a)) from arg1_two_args"
+    /// if you set `use_default_implementation_for_nulls` to false, add:
+    // order_qt_nullable1 " SELECT b as arg1_two_args...)as TABLE1 ... SELECT 
a as arg1_two_args...)as TABLE1
+    // order_qt_nullable2 " SELECT a as arg1_two_args...)as TABLE1 ... SELECT 
b as arg1_two_args...)as TABLE1
+
+    /// consts. most by BE-UT
+    order_qt_const_nullable "select atan2(NULL, NULL) from arg1_two_args"
+    order_qt_partial_const_nullable "select atan2(NULL, b) from arg1_two_args"
+    order_qt_const_not_nullable "select atan2(0.5, 100) from arg1_two_args"
+    order_qt_const_other_nullable "select atan2(10, b) from arg1_two_args"
+    order_qt_const_other_not_nullable "select atan2(a, 10) from arg1_two_args"
+    order_qt_const_nullable_no_null "select atan2(nullable(1e100), 
nullable(1e-10))"
+    order_qt_const_nullable_no_null_multirows "select atan2(nullable(1e100), 
nullable(1e-10))"
+    order_qt_const_partial_nullable_no_null "select atan2(1e100, 
nullable(1e-10))"
+
+    /// folding
+    def re_fe
+    def re_be
+    def re_no_fold
+    def check_three_ways = { test_sql ->
+        re_fe = order_sql 
"select/*+SET_VAR(enable_fold_constant_by_be=false)*/ ${test_sql}"
+        re_be = order_sql "select/*+SET_VAR(enable_fold_constant_by_be=true)*/ 
${test_sql}"
+        re_no_fold = order_sql 
"select/*+SET_VAR(debug_skip_fold_constant=true)*/ ${test_sql}"
+        logger.info("check on sql ${test_sql}")
+        assertEquals(re_fe, re_be)
+        assertEquals(re_fe, re_no_fold)
+    }
+
+    check_three_ways "atan2(-1, -2)"
+    check_three_ways "atan2(-1e100, 3.14)"
+    check_three_ways "atan2(0, 0)"
+    check_three_ways "atan2(1e100, 1e100)"
+    check_three_ways "atan2(-0.5, 0.5)"
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to