From b6835840f7b16f555de5f35fa3d78b33c7750a82 Mon Sep 17 00:00:00 2001 From: Pxl Date: Thu, 15 Jun 2023 15:17:22 +0800 Subject: [PATCH] [Bug](table-function) return InvalidArgument when explode_split meet empty delimiter (#20795) return InvalidArgument when explode_split meet empty delimiter --- be/src/vec/data_types/data_type_time_v2.cpp | 2 +- be/src/vec/exprs/table_function/vexplode_split.cpp | 4 ++++ be/test/vec/function/table_function_test.cpp | 6 ++---- .../sql_functions/table_function/explode_split.groovy | 4 ++++ 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/be/src/vec/data_types/data_type_time_v2.cpp b/be/src/vec/data_types/data_type_time_v2.cpp index e5b537ca34..c4b397f6e7 100644 --- a/be/src/vec/data_types/data_type_time_v2.cpp +++ b/be/src/vec/data_types/data_type_time_v2.cpp @@ -202,7 +202,7 @@ void DataTypeDateTimeV2::cast_to_date_v2(const UInt64 from, UInt32& to) { DataTypePtr create_datetimev2(UInt64 scale_value) { if (scale_value > 6) { - throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "scale_value > 6 {}", + throw doris::Exception(doris::ErrorCode::NOT_IMPLEMENTED_ERROR, "scale_value {} > 6", scale_value); } return std::make_shared(scale_value); diff --git a/be/src/vec/exprs/table_function/vexplode_split.cpp b/be/src/vec/exprs/table_function/vexplode_split.cpp index 7350419436..c3ae83f9f3 100644 --- a/be/src/vec/exprs/table_function/vexplode_split.cpp +++ b/be/src/vec/exprs/table_function/vexplode_split.cpp @@ -71,6 +71,10 @@ Status VExplodeSplitTableFunction::process_init(Block* block) { auto& delimiter_const_column = block->get_by_position(delimiter_column_idx).column; if (is_column_const(*delimiter_const_column)) { _delimiter = delimiter_const_column->get_data_at(0); + if (_delimiter.empty()) { + return Status::InvalidArgument( + "explode_split(test, delimiter) delimiter column must be not empty"); + } } else { return Status::NotSupported( "explode_split(test, delimiter) delimiter column must be const"); diff --git a/be/test/vec/function/table_function_test.cpp b/be/test/vec/function/table_function_test.cpp index 2d08eadc81..0faaa1515c 100644 --- a/be/test/vec/function/table_function_test.cpp +++ b/be/test/vec/function/table_function_test.cpp @@ -195,14 +195,12 @@ TEST_F(TableFunctionTest, vexplode_split) { // Case 3: explode_split("a,b,c", "a,")) --> ["", "b,c"] // Case 4: explode_split("", ",")) --> [""] InputTypeSet input_types = {TypeIndex::String, Consted {TypeIndex::String}}; - InputDataSet input_sets = {{Null(), Null()}, - {std::string("a,b,c"), std::string(",")}, + InputDataSet input_sets = {{std::string("a,b,c"), std::string(",")}, {std::string("a,b,c"), std::string("a,")}, {std::string(""), std::string(",")}}; InputTypeSet output_types = {TypeIndex::String}; - InputDataSet output_sets = {{}, - {std::string("a"), std::string("b"), std::string("c")}, + InputDataSet output_sets = {{std::string("a"), std::string("b"), std::string("c")}, {std::string(""), std::string("b,c")}, {std::string("")}}; diff --git a/regression-test/suites/nereids_p0/sql_functions/table_function/explode_split.groovy b/regression-test/suites/nereids_p0/sql_functions/table_function/explode_split.groovy index 9f64864be7..4ab82162ef 100644 --- a/regression-test/suites/nereids_p0/sql_functions/table_function/explode_split.groovy +++ b/regression-test/suites/nereids_p0/sql_functions/table_function/explode_split.groovy @@ -42,4 +42,8 @@ suite("explode_split") { lateral view explode_split(k2, ',') tmp as e1 """ qt_explode_split """ select e1 from (select 1 k1) as t lateral view explode_split("啊,啊,额,啊",",") tmp1 as e1; """ + test { + sql """ select e1 from (select 1 k1) as t lateral view explode_split("aaa","") tmp1 as e1; """ + exception "INVALID_ARGUMENT" + } }