Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion be/src/vec/json/parse2column.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,11 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length,
throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Failed to find sub column {}",
paths[i].get_path());
}
DCHECK_EQ(subcolumn->size(), old_num_rows);
if (subcolumn->size() != old_num_rows) {
throw doris::Exception(ErrorCode::INVALID_ARGUMENT,
"subcolumn {} size missmatched, may contains duplicated entry",
paths[i].get_path());
}
subcolumn->insert(std::move(values[i]), std::move(field_info));
}
// /// Insert default values to missed subcolumns.
Expand Down
10 changes: 4 additions & 6 deletions be/src/vec/json/path_in_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,11 @@ PathInDataBuilder& PathInDataBuilder::append(std::string_view key, bool is_array
if (parts.empty()) {
current_anonymous_array_level += is_array;
}
if (!key.empty()) {
if (!parts.empty()) {
parts.back().is_nested = is_array;
}
parts.emplace_back(key, false, current_anonymous_array_level);
current_anonymous_array_level = 0;
if (!parts.empty()) {
parts.back().is_nested = is_array;
}
parts.emplace_back(key, false, current_anonymous_array_level);
current_anonymous_array_level = 0;
return *this;
}
PathInDataBuilder& PathInDataBuilder::append(const PathInData::Parts& path, bool is_array) {
Expand Down
17 changes: 16 additions & 1 deletion regression-test/data/variant_p0/column_name.out
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
中文 unicode

-- !sql --
""


-- !sql --
\N
Expand Down Expand Up @@ -32,3 +32,18 @@ UPPER CASE lower case
-- !sql --
1 {"tag_key1":123456}

-- !sql --
\N
\N
\N
\N
\N
""
1234566
16
8888888
"UPPER CASE"
"dkdkdkdkdkd"
"ooaoaaaaaaa"
"xmxxmmmmmm"

23 changes: 22 additions & 1 deletion regression-test/suites/variant_p0/column_name.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ suite("regression_test_variant_column_name", "variant_type"){
// sql """insert into ${table_name} values (2, '{}')"""
sql "truncate table ${table_name}"
sql """insert into ${table_name} values (3, '{"": ""}')"""
qt_sql """select v[''] from ${table_name} order by k"""
qt_sql """select cast(v[''] as text) from ${table_name} order by k"""
sql """insert into ${table_name} values (4, '{"!@#^&*()": "11111"}')"""
qt_sql """select cast(v["!@#^&*()"] as string) from ${table_name} order by k"""
sql """insert into ${table_name} values (5, '{"123": "456", "789": "012"}')"""
Expand All @@ -50,4 +50,25 @@ suite("regression_test_variant_column_name", "variant_type"){
qt_sql "select * from var_column_name where tags['tag_key1'] is not null and cast(tags['tag_key1' ] as text) = '123456' order by k desc limit 1;"
qt_sql "select * from var_column_name where Tags['tag_key1'] is not null and cast(tags['tag_key1' ] as text) = '123456' order by k desc limit 1;"
qt_sql "select * from var_column_name where Tags['tag_key1'] is not null and cast(Tags['tag_key1' ] as text) = '123456' order by k desc limit 1;"

// empty key
sql """insert into var_column_name values (7, '{"": "UPPER CASE"}')"""
sql """
insert into var_column_name values (7, '{"":16,"OpenCapStatus":0,"AccStatus":1,"AccTimeSum":481,"LowVoltage":0,"TowedStatus":0,"EncryptLng":117.23572361077638,"deviceId":"A1100614808888"}')
"""
sql """insert into var_column_name values (7, '{"": ""}')"""
sql """insert into var_column_name values (7, '{"": "dkdkdkdkdkd"}')"""
sql """insert into var_column_name values (7, '{"": "xmxxmmmmmm"}')"""
sql """insert into var_column_name values (7, '{"": "ooaoaaaaaaa"}')"""
sql """insert into var_column_name values (7, '{"": 1234566}')"""
sql """insert into var_column_name values (7, '{"": 8888888}')"""

qt_sql "select Tags[''] from var_column_name order by cast(Tags[''] as string)"

try {
sql """insert into var_column_name values (7, '{"": "UPPER CASE", "": "lower case"}')"""
} catch(Exception ex) {
logger.info("""INSERT INTO ${table_name} failed: """ + ex)
assertTrue(ex.toString().contains("may contains duplicated entry"));
}
}