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 7d44c5a1f19 [FIX](map)fix element_at in old planner make fe exception 
and regress cases from ck #29241
7d44c5a1f19 is described below

commit 7d44c5a1f1983e3c413683aded2f9dfac44e21f7
Author: amory <wangqian...@selectdb.com>
AuthorDate: Fri Dec 29 01:00:47 2023 +0800

    [FIX](map)fix element_at in old planner make fe exception and regress cases 
from ck #29241
---
 .../apache/doris/catalog/FunctionTypeDeducers.java |   3 +-
 .../map_functions/test_basic_map_function.out      | 101 ++++++++++++++++++++
 .../map_functions/test_basic_map_function.groovy   | 104 +++++++++++++++++++++
 3 files changed, 207 insertions(+), 1 deletion(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionTypeDeducers.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionTypeDeducers.java
index 34b1d1f768e..5e64d6378a8 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionTypeDeducers.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionTypeDeducers.java
@@ -52,7 +52,8 @@ public class FunctionTypeDeducers {
                 } else if (args[0].isNull()) {
                     // first arg is null, later element is not contains
                     return args[argIdx];
-                } else if (Type.isImplicitlyCastable(args[argIdx], 
((ArrayType) args[0]).getItemType(), false, true)) {
+                } else if (args[0] instanceof ArrayType
+                        && Type.isImplicitlyCastable(args[argIdx], 
((ArrayType) args[0]).getItemType(), false, true)) {
                     return args[argIdx];
                 } else {
                     return null;
diff --git 
a/regression-test/data/datatype_p0/nested_types/query/map_functions/test_basic_map_function.out
 
b/regression-test/data/datatype_p0/nested_types/query/map_functions/test_basic_map_function.out
new file mode 100644
index 00000000000..0bfc002238d
--- /dev/null
+++ 
b/regression-test/data/datatype_p0/nested_types/query/map_functions/test_basic_map_function.out
@@ -0,0 +1,101 @@
+-- This file is automatically generated. You should know what you did if you 
want to edit this
+-- !sql --
+sum-map-value
+
+-- !sql --
+1      1       4       6       0
+2      1       2       3       0
+
+-- !sql --
+literal-array-map
+
+-- !sql --
+2      [{"l":0.000000000000, "h":10000.000000000000, "t":0.100000000000}, 
{"l":10001.000000000000, "h":100000000000000.000000000000, "t":0.200000000000}]
+
+-- !sql --
+10000.000000000000     0.100000000000  10001.000000000000      0.200000000000
+
+-- !sql --
+insert-into-select-literal
+
+-- !sql --
+2020-01-01T00:00       {1234567898765432123456789:"c", 
-1234567898765432123456789:"d", -1:"a", 0:"b"}
+
+-- !sql --
+a      b       c       d
+
+-- !sql --
+b      a       b
+
+-- !sql --
+cast-literal
+
+-- !sql --
+{"amory":26, "amory_up":34}
+
+-- !sql --
+{"amory":26, "amory_up":34}
+
+-- !sql --
+{"amory":[26, 34], "commiter":[2023, 2024]}
+
+-- !sql --
+{"amory":[26, 34], "commiter":[2023, 2024]}
+
+-- !sql --
+{"amory":{"in":2023}, "amory_up":{"commiter":2024}}
+
+-- !sql --
+{"amory":{"in":2023}, "amory_up":{"commiter":2024}}
+
+-- !sql --
+sum-map-value
+
+-- !nereid_sql --
+1      1       4       6       0
+2      1       2       3       0
+
+-- !sql --
+literal-array-map
+
+-- !nereid_sql --
+1      [{"a":1.100000000000, "b":2.200000000000}, {"c":3.300000000000, 
"d":4.400000000000}]
+2      [{"l":0.000000000000, "h":10000.000000000000, "t":0.100000000000}, 
{"l":10001.000000000000, "h":100000000000000.000000000000, "t":0.200000000000}]
+
+-- !nereid_sql --
+\N     \N      10001.000000000000      0.200000000000
+1.100000000000 2.200000000000  \N      \N
+
+-- !sql --
+insert-into-select-literal
+
+-- !nereid_sql --
+2020-01-01T00:00       {-1:"a", 0:"b", 1234567898765432123456789:"c", 
-1234567898765432123456789:"d"}
+
+-- !nereid_sql --
+a      b       c       d
+
+-- !nereid_sql --
+b      a       b
+
+-- !sql --
+cast-literal
+
+-- !nereid_sql --
+{"amory":26, "amory_up":34}
+
+-- !nereid_sql --
+{"amory":26, "amory_up":34}
+
+-- !nereid_sql --
+{"amory":[26, 34], "commiter":[2023, 2024]}
+
+-- !nereid_sql --
+{"amory":[26, 34], "commiter":[2023, 2024]}
+
+-- !nereid_sql --
+{"amory":{"in":2023}, "amory_up":{"commiter":2024}}
+
+-- !nereid_sql --
+{"amory":{"in":2023}, "amory_up":{"commiter":2024}}
+
diff --git 
a/regression-test/suites/datatype_p0/nested_types/query/map_functions/test_basic_map_function.groovy
 
b/regression-test/suites/datatype_p0/nested_types/query/map_functions/test_basic_map_function.groovy
new file mode 100644
index 00000000000..88993c5aeb0
--- /dev/null
+++ 
b/regression-test/suites/datatype_p0/nested_types/query/map_functions/test_basic_map_function.groovy
@@ -0,0 +1,104 @@
+// 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_basic_map_function", "p0") {
+    sql """ ADMIN SET FRONTEND CONFIG ('disable_nested_complex_type' = 
'false'); """
+    sql """set enable_nereids_planner=false"""
+    // ============ sum(map-value) ============
+    qt_sql """ SELECT "sum-map-value" """
+    sql """ DROP TABLE IF EXISTS t_map_amory;"""
+    sql """ CREATE TABLE IF NOT EXISTS t_map_amory(id int(11), m Map<String, 
largeint>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 1 
PROPERTIES('replication_num' = '1');"""
+    sql """ INSERT INTO t_map_amory VALUES(1, map("a", 1, "b", 2, "c", 3));"""
+    sql """ INSERT INTO t_map_amory VALUES(1, map(concat("key",'a') , 1, "b", 
2, "c", 3));"""
+    sql """ INSERT INTO t_map_amory VALUES(2, map("a", 1, "b", 2, "c", 3));"""
+    order_qt_sql """ SELECT id, sum(m['a']), sum(m['b']), sum(m['c']), 
sum(m['c'] = 0) FROM t_map_amory group by id order by id; """
+
+    // ============ literal array-map ============
+    qt_sql """ SELECT "literal-array-map" """
+    sql """ DROP TABLE IF EXISTS arr_nested_map_test_table;"""
+    sql """ CREATE TABLE IF NOT EXISTS arr_nested_map_test_table (id int, arr 
array<map<string, decimal(28,12)>>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 
1 PROPERTIES('replication_num' = '1');"""
+    // old planner can't support literal array-map "No matching function with 
signature"
+    // sql """ INSERT INTO arr_nested_map_test_table VALUES(1, array(map("a", 
1.1, "b", 2.2), map("c", 3.3, "d", 4.4)));"""
+    sql """ INSERT INTO arr_nested_map_test_table VALUES(2, [{'l': 0.0, 'h': 
10000.0, 't': 0.1}, {'l': 10001.0, 'h': 100000000000000.0, 't': 0.2}]);"""
+    order_qt_sql """ SELECT * FROM arr_nested_map_test_table order by id ; """
+    order_qt_sql """ SELECT arr[1]['h'], arr[1]['t'], arr[2]['l'], arr[2]['t'] 
FROM arr_nested_map_test_table order by id ; """
+
+    // ============ insert into select literal ============
+    qt_sql """ SELECT "insert-into-select-literal" """
+    sql """ DROP TABLE IF EXISTS t_map_amory_1;"""
+    sql """ CREATE TABLE IF NOT EXISTS t_map_amory_1(id datetime, m 
Map<largeint, String>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 1 
PROPERTIES('replication_num' = '1');"""
+    // old planner will make type deduction error
+    // sql """ INSERT INTO t_map_amory_1 SELECT '2020-01-01', map(-1, 'a', 0, 
'b', cast('1234567898765432123456789' as largeint), 'c', 
cast('-1234567898765432123456789' as largeint), 'd');"""
+    sql """ INSERT INTO t_map_amory_1 SELECT '2020-01-01', 
map(cast('1234567898765432123456789' as largeint), 'c', 
cast('-1234567898765432123456789' as largeint), 'd', -1, 'a', 0, 'b'); """
+    qt_sql """ SELECT * FROM t_map_amory_1; """
+    qt_sql """ SELECT m[-1], m[0], m[cast('1234567898765432123456789' as 
largeint)], m[cast('-1234567898765432123456789' as largeint)] FROM 
t_map_amory_1;"""
+    qt_sql """ SELECT m[cast(0 as BIGINT)],  m[cast(-1 as Largeint)], m[cast(0 
as largeint)] FROM t_map_amory_1;"""
+
+    // =================== cast literal ===================
+    qt_sql """ SELECT "cast-literal" """
+    qt_sql """ SELECT CAST({'amory':26, 'amory_up':34} as Map<String, int>);"""
+    qt_sql """ SELECT CAST('{\\'amory\\':26, \\'amory_up\\':34}' as 
Map<String, int>)"""
+    qt_sql """ SELECT CAST({'amory':[26, 34], 'commiter':[2023, 2024]} as 
Map<String, Array<int>>)"""
+    qt_sql """ SELECT CAST('{\\'amory\\':[26, 34], \\'commiter\\':[2023, 
2024]}' as Map<String, Array<int>>)"""
+    qt_sql """ SELECT CAST({'amory':{'in': 2023}, 'amory_up':{'commiter': 
2024}} as Map<String, Map<String, int>>)"""
+    qt_sql """ SELECT CAST('{\\'amory\\':{\\'in\\': 2023}, 
\\'amory_up\\':{\\'commiter\\': 2024}}' as Map<String, Map<String, int>>)"""
+
+
+    // test in nereids planner
+    sql """set enable_nereids_planner=true"""
+    sql """ set enable_fallback_to_original_planner=false"""
+
+    // ============ sum(map-value) ============
+    qt_sql """ SELECT "sum-map-value" """
+    sql """ DROP TABLE IF EXISTS t_map_amory;"""
+    sql """ CREATE TABLE IF NOT EXISTS t_map_amory(id int(11), m Map<String, 
largeint>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 1 
PROPERTIES('replication_num' = '1');"""
+    sql """ INSERT INTO t_map_amory VALUES(1, map("a", 1, "b", 2, "c", 3));"""
+    sql """ INSERT INTO t_map_amory VALUES(1, map(concat("key",'a'), 1, "b", 
2, "c", 3));"""
+    sql """ INSERT INTO t_map_amory VALUES(2, map("a", 1, "b", 2, "c", 3));"""
+    order_qt_nereid_sql """ SELECT id, sum(m['a']), sum(m['b']), sum(m['c']), 
sum(m['c'] = 0) FROM t_map_amory group by id order by id; """
+
+    // ============ literal array-map ============
+    qt_sql """ SELECT "literal-array-map" """
+    sql """ DROP TABLE IF EXISTS arr_nested_map_test_table;"""
+    sql """ CREATE TABLE IF NOT EXISTS arr_nested_map_test_table (id int, arr 
array<map<string, decimal(28,12)>>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 
1 PROPERTIES('replication_num' = '1');"""
+    sql """ INSERT INTO arr_nested_map_test_table VALUES(1, array(map("a", 
1.1, "b", 2.2), map("c", 3.3, "d", 4.4)));"""
+    sql """ INSERT INTO arr_nested_map_test_table VALUES(2, [{'l': 0.0, 'h': 
10000.0, 't': 0.1}, {'l': 10001.0, 'h': 100000000000000.0, 't': 0.2}]);"""
+    order_qt_nereid_sql """ SELECT * FROM arr_nested_map_test_table order by 
id ; """
+    order_qt_nereid_sql """ SELECT arr[1]['a'], arr[1]['b'], arr[2]['l'], 
arr[2]['t'] FROM arr_nested_map_test_table order by id ; """
+
+    // ============ insert into select literal ============
+    qt_sql """ SELECT "insert-into-select-literal" """
+    sql """ DROP TABLE IF EXISTS t_map_amory_1;"""
+    sql """ CREATE TABLE IF NOT EXISTS t_map_amory_1(id datetime, m 
Map<largeint, String>) ENGINE=OLAP DISTRIBUTED BY HASH(id) BUCKETS 1 
PROPERTIES('replication_num' = '1');"""
+    sql """ INSERT INTO t_map_amory_1 SELECT '2020-01-01', map(-1, 'a', 0, 
'b', cast('1234567898765432123456789' as largeint), 'c', 
cast('-1234567898765432123456789' as largeint), 'd');"""
+    qt_nereid_sql """ SELECT * FROM t_map_amory_1; """
+    qt_nereid_sql """ SELECT m[-1], m[0], m[cast('1234567898765432123456789' 
as largeint)], m[cast('-1234567898765432123456789' as largeint)] FROM 
t_map_amory_1;"""
+    qt_nereid_sql """ SELECT m[cast(0 as BIGINT)],  m[cast(-1 as Largeint)], 
m[cast(0 as largeint)] FROM t_map_amory_1;"""
+
+    // =================== cast literal ===================
+    qt_sql """ SELECT "cast-literal" """
+    qt_nereid_sql """ SELECT CAST({'amory':26, 'amory_up':34} as Map<String, 
int>);"""
+    qt_nereid_sql """ SELECT CAST('{\\'amory\\':26, \\'amory_up\\':34}' as 
Map<String, int>)"""
+    qt_nereid_sql """ SELECT CAST({'amory':[26, 34], 'commiter':[2023, 2024]} 
as Map<String, Array<int>>)"""
+    qt_nereid_sql """ SELECT CAST('{\\'amory\\':[26, 34], 
\\'commiter\\':[2023, 2024]}' as Map<String, Array<int>>)"""
+    qt_nereid_sql """ SELECT CAST({'amory':{'in': 2023}, 
'amory_up':{'commiter': 2024}} as Map<String, Map<String, int>>)"""
+    qt_nereid_sql """ SELECT CAST('{\\'amory\\':{\\'in\\': 2023}, 
\\'amory_up\\':{\\'commiter\\': 2024}}' as Map<String, Map<String, int>>)"""
+
+
+
+
+}


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

Reply via email to