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