blob: 853234c72868a2e7f7a1c3d716db8b00643eafe9 [file] [log] [blame]
// 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.
// this test is used to test the type conflict of nested array
suite("variant_nested_type_conflict", "p0"){
try {
def table_name = "var_nested_type_conflict"
sql "DROP TABLE IF EXISTS ${table_name}"
sql """set describe_extend_variant_column = true"""
sql """ set enable_variant_flatten_nested = true """
sql "set default_variant_max_subcolumns_count = 0"
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
v variant
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1 -- 1 bucket make really compaction in conflict case
properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_enable_flatten_nested" = "true");
"""
def sql_select_batch = {
qt_sql_0 """select * from ${table_name} order by k"""
qt_sql_1 """select v['nested']['a'] from ${table_name} order by k"""
qt_sql_2 """select v['nested']['b'] from ${table_name} order by k"""
qt_sql_3 """select v['nested']['c'] from ${table_name} order by k"""
qt_sql_4 """select v['nested'] from ${table_name} order by k"""
}
def sql_test_cast_to_array = {
// test cast to array<int>
qt_sql_8 """select cast(v['nested']['a'] as array<int>), size(cast(v['nested']['a'] as array<int>)) from ${table_name} order by k"""
qt_sql_9 """select cast(v['nested']['b'] as array<int>), size(cast(v['nested']['b'] as array<int>)) from ${table_name} order by k"""
qt_sql_10 """select cast(v['nested']['c'] as array<int>), size(cast(v['nested']['c'] as array<int>)) from ${table_name} order by k"""
// test cast to array<string>
qt_sql_11 """select cast(v['nested']['a'] as array<string>), size(cast(v['nested']['a'] as array<string>)) from ${table_name} order by k"""
qt_sql_12 """select cast(v['nested']['b'] as array<string>), size(cast(v['nested']['b'] as array<string>)) from ${table_name} order by k"""
qt_sql_13 """select cast(v['nested']['c'] as array<string>), size(cast(v['nested']['c'] as array<string>)) from ${table_name} order by k"""
// test cast to array<double>
qt_sql_14 """select cast(v['nested']['a'] as array<double>), size(cast(v['nested']['a'] as array<double>)) from ${table_name} order by k"""
qt_sql_15 """select cast(v['nested']['b'] as array<double>), size(cast(v['nested']['b'] as array<double>)) from ${table_name} order by k"""
qt_sql_16 """select cast(v['nested']['c'] as array<double>), size(cast(v['nested']['c'] as array<double>)) from ${table_name} order by k"""
}
// insert Nested array in Nested array which is not supported
test {
sql """
insert into ${table_name} values (1, '{"nested": [{"a": [1,2,3]}]}');
"""
exception "Nesting of array in Nested array within variant subcolumns is currently not supported."
}
// insert batch different structure in same path
test {
sql """
insert into ${table_name} values (3, '{"nested": [{"a": 2.5, "b": "123.1"}]}'), (4, '{"nested": {"a": 2.5, "b": "123.1"}}');
"""
exception "Ambiguous paths"
}
/// insert a array of object for a, b, c
// insert type conflict in multiple rows
sql """
insert into ${table_name} values (1, '{"nested": [{"a": 1, "c": 1.1}, {"b": "1"}]}');
"""
// for cloud we should select first and then desc for syncing rowset to get latest schema
sql """
select * from ${table_name} order by k limit 1;
"""
qt_sql_desc_1 """
desc ${table_name};
"""
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
/// insert a, b type changed to double
sql """
insert into ${table_name} values (2, '{"nested": [{"a": 2.5, "b": 123.1}]}');
"""
// for cloud we should select first and then desc for syncing rowset to get latest schema
sql """
select * from ${table_name} order by k limit 1;
"""
qt_sql_desc_2 """
desc ${table_name};
"""
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
// trigger and wait compaction
trigger_and_wait_compaction("${table_name}", "full")
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
sql """ truncate table ${table_name} """
// insert type conflict in one row
sql """
insert into ${table_name} values (1, '{"nested": [{"a": 1, "b": 1.1}, {"a": "1", "b": "1", "c": "1"}]}');
"""
// for cloud we should select first and then desc for syncing rowset to get latest schema
sql """
select * from ${table_name} order by k limit 1;
"""
qt_sql_desc_4 """
desc ${table_name};
"""
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
// insert c type changed to double
sql """
insert into ${table_name} values (2, '{"nested": [{"a": 1, "c": 1.1}]}');
"""
// for cloud we should select first and then desc for syncing rowset to get latest schema
sql """
select * from ${table_name} order by k limit 1;
"""
qt_sql_desc_5 """
desc ${table_name};
"""
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
// trigger and wait compaction
trigger_and_wait_compaction("${table_name}", "full")
// now select for a, b, c
sql_select_batch()
sql_test_cast_to_array()
} finally {
}
}