Skip to content

Commit

Permalink
add cases and fix type match
Browse files Browse the repository at this point in the history
  • Loading branch information
amorynan committed Dec 12, 2023
1 parent d548282 commit e3caf16
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,14 @@ public boolean matchesType(Type t) {
return false;
}

if (((ArrayType) t).containsNull && !containsNull) {
if (!((ArrayType) t).getContainsNull() == getContainsNull()) {
return false;
}

// Array(Null) is a virtual Array type, can match any Array(...) type
if (itemType.isNull() || ((ArrayType) t).getItemType().isNull()) {
return true;
if (!itemType.matchesType(((ArrayType) t).itemType)) {
return false;
}

return itemType.matchesType(((ArrayType) t).itemType);
return true;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,6 @@ public boolean matchesType(Type t) {
return false;
}

if ((keyType.isNull() || ((MapType) t).getKeyType().isNull())
&& (valueType.isNull() || ((MapType) t).getKeyType().isNull())) {
return true;
}

return keyType.matchesType(((MapType) t).keyType)
&& (valueType.matchesType(((MapType) t).valueType));
}
Expand Down
2 changes: 2 additions & 0 deletions fe/fe-common/src/main/java/org/apache/doris/catalog/Type.java
Original file line number Diff line number Diff line change
Expand Up @@ -2215,6 +2215,8 @@ public static boolean matchExactType(Type type1, Type type2, boolean ignorePreci
return isSameDecimalTypeWithDifferentPrecision(((ScalarType) type2).decimalPrecision(),
((ScalarType) type1).decimalPrecision());
}
} else {
return true;
}
}
return false;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !sql --
1 [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]] [[]]

-- !sql --
1 [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}]

-- !sql --
1 [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}] [{"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}]

-- !sql --
1 {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]} {null:[]}

-- !sql --
1 {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}} {null:{}}

-- !sql --
1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}

-- !sql --
1 {"col_1": []} {"col_2": []} {"col_3": []} {"col_4": []} {"col_5": []} {"col_6": []} {"col_7": []} {"col_8": []} {"col_9": []} {"col_10": []} {"col_11": []} {"col_12": []} {"col_13": []} {"col_14": []} {"col_15": []} {"col_16": []} {"col_17": []}

-- !sql --
1 {"col_1": {}} {"col_2": {}} {"col_3": {}} {"col_4": {}} {"col_5": {}} {"col_6": {}} {"col_7": {}} {"col_8": {}} {"col_9": {}} {"col_10": {}} {"col_11": {}} {"col_12": {}} {"col_13": {}} {"col_14": {}} {"col_15": {}} {"col_16": {}} {"col_17": {}}

-- !sql --
1 {"col_1": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_2": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_3": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_4": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_5": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_6": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_7": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_8": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_9": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_10": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_11": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_12": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_13": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_14": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_15": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_16": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}} {"col_17": {"col1": null, "col2": null, "col3": null, "col4": null, "col5": null, "col6": null, "col7": null, "col8": null, "col9": null, "col10": null, "col11": null, "col12": null, "col13": null, "col14": null, "col15": null, "col16": null, "col17": null}}

Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// 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.


import com.google.common.collect.Lists
import org.apache.commons.lang3.StringUtils
import org.codehaus.groovy.runtime.IOGroovyMethods

suite("test_nested_types_insert_into_with_literal", "p0") {
sql 'use regression_test_datatype_p0_nested_types'
// old planner does not support cast empty
sql 'set enable_nereids_planner=true'
sql 'set enable_fallback_to_original_planner=false'
sql """ADMIN SET FRONTEND CONFIG ('disable_nested_complex_type' = 'false')"""

def table_names = [
"two_level_array_array_a",
"two_level_array_map_a",
"two_level_array_struct_a",

"two_level_map_array_a",
"two_level_map_map_a",
"two_level_map_struct_a",

"two_level_struct_array_a",
"two_level_struct_map_a",
"two_level_struct_struct_a"
]

// notice : we do not suggest to use this literal {} to present empty struct, please use struct() instead
def null_literals = ["[[]]", "[{}]", "array(struct(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null))",
"{null:[]}", "{null:{}}", "{}",
"struct([])", "struct({})", "struct(struct(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null))"]

def colNameArr = ["c_bool", "c_tinyint", "c_smallint", "c_int", "c_bigint", "c_largeint", "c_float",
"c_double", "c_decimal", "c_decimalv3", "c_date", "c_datetime", "c_datev2", "c_datetimev2",
"c_char", "c_varchar", "c_string"]

// create tables
// (0,0) (0,1) (0,2) (1,0) (1,1) (1,2) (2,0) (2,1) (2,2)
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
sql """ DROP TABLE IF EXISTS ${table_names[i*3+j]} """
String result = create_table_with_nested_type(2, [i, j], table_names[i*3+j])
sql result
}
}

// insert into empty literal
for (int i = 0; i < 9; ++i) {
String insertSql = "INSERT INTO ${table_names[i]} VALUES(1, "
for (int j = 0; j < colNameArr.size(); ++j) {
insertSql += "${null_literals[i]},"
}
insertSql = insertSql.substring(0, insertSql.length() - 1) + ")"
sql insertSql
qt_sql """ select * from ${table_names[i]} order by k1 """
}
}

0 comments on commit e3caf16

Please sign in to comment.