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

yiguolei 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 e7303c12c7 [Enhancement](array-type) Support Floating/Decimal type for 
array aggregation functions (#12271)
e7303c12c7 is described below

commit e7303c12c7494fc585f8ece3abe8ead3033dd759
Author: xy720 <[email protected]>
AuthorDate: Sat Sep 3 09:55:56 2022 +0800

    [Enhancement](array-type) Support Floating/Decimal type for array 
aggregation functions (#12271)
---
 .../functions/array/function_array_aggregation.cpp |  2 +-
 gensrc/script/doris_builtins_functions.py          | 15 ++++++
 .../test_array_aggregation_functions.out           | 30 ++++++++++++
 .../test_array_aggregation_functions.groovy        | 57 ++++++++++++++++++++++
 4 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/be/src/vec/functions/array/function_array_aggregation.cpp 
b/be/src/vec/functions/array/function_array_aggregation.cpp
index 171e9098a4..42351fd7eb 100644
--- a/be/src/vec/functions/array/function_array_aggregation.cpp
+++ b/be/src/vec/functions/array/function_array_aggregation.cpp
@@ -106,7 +106,7 @@ struct AggregateFunctionImpl<AggregateOperation::PRODUCT> {
     template <typename Element>
     struct TypeTraits {
         using ResultType = ArrayAggregateResult<Element, 
AggregateOperation::PRODUCT>;
-        using AggregateDataType = AggregateFunctionProductData<Element>;
+        using AggregateDataType = AggregateFunctionProductData<ResultType>;
         using Function = AggregateFunctionProduct<Element, ResultType, 
AggregateDataType>;
     };
 };
diff --git a/gensrc/script/doris_builtins_functions.py 
b/gensrc/script/doris_builtins_functions.py
index 0ecde878c1..a0660f87f0 100755
--- a/gensrc/script/doris_builtins_functions.py
+++ b/gensrc/script/doris_builtins_functions.py
@@ -253,26 +253,41 @@ visible_functions = [
     [['array_min'],     'INT',      ['ARRAY_INT'],      '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_min'],     'BIGINT',   ['ARRAY_BIGINT'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_min'],     'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_min'],     'FLOAT',    ['ARRAY_FLOAT'],    '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_min'],     'DOUBLE',   ['ARRAY_DOUBLE'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_min'],     'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_max'],     'TINYINT',  ['ARRAY_TINYINT'],  '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_max'],     'SMALLINT', ['ARRAY_SMALLINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_max'],     'INT',      ['ARRAY_INT'],      '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_max'],     'BIGINT',   ['ARRAY_BIGINT'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_max'],     'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_max'],     'FLOAT',    ['ARRAY_FLOAT'],    '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_max'],     'DOUBLE',   ['ARRAY_DOUBLE'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_max'],     'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_sum'],     'BIGINT',   ['ARRAY_TINYINT'],  '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_sum'],     'BIGINT',   ['ARRAY_SMALLINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_sum'],     'BIGINT',   ['ARRAY_INT'],      '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_sum'],     'BIGINT',   ['ARRAY_BIGINT'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_sum'],     'LARGEINT', ['ARRAY_LARGEINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_sum'],     'DOUBLE',   ['ARRAY_FLOAT'],    '', '', '','vec', 
'ALWAYS_NULLABLE'],
+    [['array_sum'],     'DOUBLE',   ['ARRAY_DOUBLE'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_sum'],     'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_avg'],     'DOUBLE',   ['ARRAY_TINYINT'],  '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_avg'],     'DOUBLE',   ['ARRAY_SMALLINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_avg'],     'DOUBLE',   ['ARRAY_INT'],      '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_avg'],     'DOUBLE',   ['ARRAY_BIGINT'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_avg'],     'DOUBLE',   ['ARRAY_LARGEINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_avg'],     'DOUBLE',   ['ARRAY_FLOAT'],    '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_avg'],     'DOUBLE',   ['ARRAY_DOUBLE'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_avg'],     'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_product'], 'DOUBLE',   ['ARRAY_TINYINT'],  '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_product'], 'DOUBLE',   ['ARRAY_SMALLINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_product'], 'DOUBLE',   ['ARRAY_INT'],      '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_product'], 'DOUBLE',   ['ARRAY_BIGINT'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
     [['array_product'], 'DOUBLE',   ['ARRAY_LARGEINT'], '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_product'], 'DOUBLE',   ['ARRAY_FLOAT'],    '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_product'], 'DOUBLE',   ['ARRAY_DOUBLE'],   '', '', '', 'vec', 
'ALWAYS_NULLABLE'],
+    [['array_product'], 'DECIMALV2',['ARRAY_DECIMALV2'],'', '', '', 'vec', 
'ALWAYS_NULLABLE'],
 
     [['array_remove'], 'ARRAY_BOOLEAN',   ['ARRAY_BOOLEAN', 'BOOLEAN'], '', 
'', '', 'vec', ''],
     [['array_remove'], 'ARRAY_TINYINT',   ['ARRAY_TINYINT', 'TINYINT'], '', 
'', '', 'vec', ''],
diff --git 
a/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
new file mode 100644
index 0000000000..3564d7eb6e
--- /dev/null
+++ 
b/regression-test/data/query_p0/sql_functions/array_functions/test_array_aggregation_functions.out
@@ -0,0 +1,30 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !select --
+1      1       100     1000    2147483648      9223372036854775808     0       
1       100.0001
+2      1       \N      \N      \N      \N      \N      127     4.023
+3      -1      -32768  -2147483647     -9223372036854775808    
-117341182548128045443221445    -9.999999       -1      -128.0001
+4      \N      \N      \N      \N      \N      \N      \N      \N
+
+-- !select --
+1      3       101     1001    2147483649      9223372036854775808     
9.999999        1.5     100.0005
+2      3       \N      \N      \N      \N      \N      128.1   4.023
+3      1       -32767  -50000  0       170141183460469231731687303715884105727 
9.999999        1       127.0001
+4      \N      \N      \N      \N      \N      \N      \N      \N
+
+-- !select --
+1      2       100.5   1000.5  2147483648.5    9.2233720368547758e+18  
4.9999995       1.25    100.00030000000001
+2      2       \N      \N      \N      \N      \N      127.55000305175781      
4.023
+3      0       -32767.5        -1073766823.5   -4.6116860184273879e+18 
8.5070591730175945e+37  0       0       -0.5
+4      \N      \N      \N      \N      \N      \N      \N      \N
+
+-- !select --
+1      6       201     2001    4294967297      9223372036854775808     
9.999999        2.5     200.00060000000002
+2      12      \N      \N      \N      \N      \N      255.10000610351562      
4.023
+3      0       -65535  -2147533647     -9223372036854775808    
170141183460351890549139175670440884282 0       0       -1
+4      \N      \N      \N      \N      \N      \N      \N      \N
+
+-- !select --
+1      6       10100   1001000 4.6116860205748716e+18  9.2233720368547758e+18  
0       1.5     10000.06000005
+2      36      \N      \N      \N      \N      \N      16268.700775146484      
4.023
+3      -0      1073709056      107374182350000 -0      -1.9964567667389465e+64 
-7766259631453241920    -0      -16256.02550001
+4      \N      \N      \N      \N      \N      \N      \N      \N
diff --git 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
new file mode 100644
index 0000000000..2a58e1be49
--- /dev/null
+++ 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_aggregation_functions.groovy
@@ -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.
+
+suite("test_array_aggregation_functions") {
+    def tableName = "tbl_test_array_aggregation_functions"
+    // open enable_array_type
+    sql "ADMIN SET FRONTEND CONFIG ('enable_array_type' = 'true')"
+    // array functions only supported in vectorized engine
+    sql """ set enable_vectorized_engine = true """
+
+    sql """DROP TABLE IF EXISTS ${tableName}"""
+    sql """
+            CREATE TABLE IF NOT EXISTS ${tableName} (
+              `k1` int(11) NULL COMMENT "",
+              `a1` array<tinyint(4)> NULL COMMENT "",
+              `a2` array<smallint(6)> NULL COMMENT "",
+              `a3` array<int(11)> NULL COMMENT "",
+              `a4` array<bigint(20)> NULL COMMENT "",
+              `a5` array<largeint(40)> NULL COMMENT "",
+              `a6` array<decimal(27, 7)> NULL COMMENT "",
+              `a7` array<float> NULL COMMENT "",
+              `a8` array<double> NULL COMMENT "",
+              `a9` array<date> NULL COMMENT "",
+              `a10` array<datetime> NULL COMMENT ""
+            ) ENGINE=OLAP
+            DUPLICATE KEY(`k1`)
+            DISTRIBUTED BY HASH(`k1`) BUCKETS 1
+            PROPERTIES (
+            "replication_allocation" = "tag.location.default: 1",
+            "storage_format" = "V2"
+            )
+        """
+    sql """ INSERT INTO ${tableName} VALUES(1, [1, 2, 3], [100, 101], [1000, 
1001], [2147483648, 2147483649], [9223372036854775808], [0.0, 9.999999], [1.0, 
1.5], [100.0001, 100.0005], ['2022-08-31', '2022-09-01'], ['2022-08-31', 
'2022-09-01']) """
+    sql """ INSERT INTO ${tableName} VALUES(2, [1, 2, 3, NULL, 3, 2, 1], NULL, 
NULL, NULL, NULL, NULL, [127, 128.1], [NULL, 4.023], NULL, NULL) """
+    sql """ INSERT INTO ${tableName} VALUES(3, [-1, 0, 1], [-32767, -32768], 
[-50000, -2147483647], [-9223372036854775808, 0], 
[-117341182548128045443221445, 170141183460469231731687303715884105727], 
[-9.999999, 9.999999], [-1.0, 0.0, 1.0], [-128.0001, 127.0001], NULL, NULL) """
+    sql """ INSERT INTO ${tableName} VALUES(4, [], [], [], [], [], [], [], [], 
[], NULL) """
+
+    qt_select "SELECT k1, array_min(a1), array_min(a2), array_min(a3), 
array_min(a4), array_min(a5), array_min(a6), array_min(a7), array_min(a8) from 
${tableName} order by k1"
+    qt_select "SELECT k1, array_max(a1), array_max(a2), array_max(a3), 
array_max(a4), array_max(a5), array_max(a6), array_max(a7), array_max(a8) from 
${tableName} order by k1"
+    qt_select "SELECT k1, array_avg(a1), array_avg(a2), array_avg(a3), 
array_avg(a4), array_avg(a5), array_avg(a6), array_avg(a7), array_avg(a8) from 
${tableName} order by k1"
+    qt_select "SELECT k1, array_sum(a1), array_sum(a2), array_sum(a3), 
array_sum(a4), array_sum(a5), array_sum(a6), array_sum(a7), array_sum(a8) from 
${tableName} order by k1"
+    qt_select "SELECT k1, array_product(a1), array_product(a2), 
array_product(a3), array_product(a4), array_product(a5), array_product(a6), 
array_product(a7), array_product(a8) from ${tableName} order by k1"
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to