This is an automated email from the ASF dual-hosted git repository. panxiaolei 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 a347063390 [fix](case expr) fix coredump of case for null value 2 (#20635) a347063390 is described below commit a3470633902a0f42d60017d47d916004312fefe3 Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Sun Jun 11 23:08:53 2023 +0800 [fix](case expr) fix coredump of case for null value 2 (#20635) fix coredump of case for null value 2 --- be/src/vec/functions/function_case.h | 8 +-- .../sql_functions/case_function/case_null2.csv | 5 ++ .../case_function/test_case_function_null.out | 12 +++++ .../case_function/test_case_function_null.groovy | 57 +++++++++++++++++++++- 4 files changed, 77 insertions(+), 5 deletions(-) diff --git a/be/src/vec/functions/function_case.h b/be/src/vec/functions/function_case.h index 0b336a4ecd..0c72e98aaf 100644 --- a/be/src/vec/functions/function_case.h +++ b/be/src/vec/functions/function_case.h @@ -332,13 +332,13 @@ public: bool then_null = false; for (int i = 1 + has_case; i < arguments.size() - has_else; i += 2) { auto then_column_ptr = block.get_by_position(arguments[i]).column; - if (then_column_ptr->is_nullable() || then_column_ptr->only_null()) { + if (then_column_ptr->get_data_type() == TypeIndex::Nullable) { then_null = true; } } if constexpr (has_else) { auto else_column_ptr = block.get_by_position(arguments[arguments.size() - 1]).column; - if (else_column_ptr->is_nullable() || else_column_ptr->only_null()) { + if (else_column_ptr->get_data_type() == TypeIndex::Nullable) { then_null = true; } } else { @@ -364,13 +364,13 @@ public: bool when_null = false; if constexpr (has_case) { auto case_column_ptr = block.get_by_position(arguments[0]).column; - if (case_column_ptr->is_nullable() || case_column_ptr->only_null()) { + if (case_column_ptr->get_data_type() == TypeIndex::Nullable) { when_null = true; } } for (int i = has_case; i < arguments.size() - has_else; i += 2) { auto when_column_ptr = block.get_by_position(arguments[i]).column; - if (when_column_ptr->is_nullable() || when_column_ptr->only_null()) { + if (when_column_ptr->get_data_type() == TypeIndex::Nullable) { when_null = true; } } diff --git a/regression-test/data/query_p0/sql_functions/case_function/case_null2.csv b/regression-test/data/query_p0/sql_functions/case_function/case_null2.csv new file mode 100644 index 0000000000..08d0c1e007 --- /dev/null +++ b/regression-test/data/query_p0/sql_functions/case_function/case_null2.csv @@ -0,0 +1,5 @@ +1 +1 +1 +0 +-1 diff --git a/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out b/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out index e671ae0ee4..de51eb0306 100644 --- a/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out +++ b/regression-test/data/query_p0/sql_functions/case_function/test_case_function_null.out @@ -4,3 +4,15 @@ 1970-10-29 false 1970-11-13 true +-- !sql_case1 -- +-2.0 + +-- !sql_case2 -- +-2 + +-- !sql_case1 -- +-2.0 + +-- !sql_case2 -- +-2 + diff --git a/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy b/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy index e625023525..63e67a40f0 100644 --- a/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy +++ b/regression-test/suites/query_p0/sql_functions/case_function/test_case_function_null.groovy @@ -41,7 +41,19 @@ suite("test_case_function_null", "query,p0") { ); """ - def tables = ["case_null0", "case_null1"] + sql """ drop table if exists `case_null2` """ + sql """ + CREATE TABLE `case_null2` ( + `c0` tinyint(4) NULL + ) ENGINE=OLAP + DUPLICATE KEY(`c0`) + DISTRIBUTED BY HASH(`c0`) BUCKETS 20 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + def tables = ["case_null0", "case_null1", "case_null2"] for (String tableName in tables) { streamLoad { @@ -173,4 +185,47 @@ suite("test_case_function_null", "query,p0") { c2, c1; """ + + qt_sql_case1 """ + SELECT SUM( + CASE (((NULL BETWEEN NULL AND NULL)) and (CAST(0.4716 AS BOOLEAN))) + WHEN ((CAST('-1530390546' AS VARCHAR)) LIKE ('-1678299490')) + THEN (- (+ case_null2.c0)) + WHEN CASE (NULL IN (NULL)) + WHEN false THEN (case_null2.c0 NOT BETWEEN case_null2.c0 AND 1916517711) + END THEN ((((case_null2.c0)*(1309461808)))/((- -267268292))) + END) + FROM case_null2; + """ + + qt_sql_case2 """ + SELECT SUM(CASE (((NULL BETWEEN NULL AND NULL)) and (CAST(0.4716 AS BOOLEAN))) + WHEN ((CAST('-1530390546' AS VARCHAR)) LIKE ('-1678299490')) + THEN (- (+ case_null2.c0)) + END) + FROM case_null2; + """ + + sql "SET experimental_enable_nereids_planner=true" + sql "SET enable_fallback_to_original_planner=false" + + qt_sql_case1 """ + SELECT SUM( + CASE (((NULL BETWEEN NULL AND NULL)) and (CAST(0.4716 AS BOOLEAN))) + WHEN ((CAST('-1530390546' AS VARCHAR)) LIKE ('-1678299490')) + THEN (- (+ case_null2.c0)) + WHEN CASE (NULL IN (NULL)) + WHEN false THEN (case_null2.c0 NOT BETWEEN case_null2.c0 AND 1916517711) + END THEN ((((case_null2.c0)*(1309461808)))/((- -267268292))) + END) + FROM case_null2; + """ + + qt_sql_case2 """ + SELECT SUM(CASE (((NULL BETWEEN NULL AND NULL)) and (CAST(0.4716 AS BOOLEAN))) + WHEN ((CAST('-1530390546' AS VARCHAR)) LIKE ('-1678299490')) + THEN (- (+ case_null2.c0)) + END) + FROM case_null2; + """ } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org