You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2023/06/11 15:09:03 UTC
[doris] branch master updated: [fix](case expr) fix coredump of case for null value 2 (#20635)
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 <zo...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org