You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2022/12/07 01:43:16 UTC

[doris] branch master updated: [fix](if) fix coredump of if const (#14858)

This is an automated email from the ASF dual-hosted git repository.

yiguolei 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 3286fb48ab [fix](if) fix coredump of if const (#14858)
3286fb48ab is described below

commit 3286fb48abe3cdae9cb6e68db7d99149f3569bb8
Author: TengJianPing <18...@users.noreply.github.com>
AuthorDate: Wed Dec 7 09:43:10 2022 +0800

    [fix](if) fix coredump of if const (#14858)
---
 be/src/vec/functions/if.cpp                                 | 13 +++++++++++++
 .../conditional_functions/test_conditional_function.out     | 11 +++++++++++
 .../conditional_functions/test_conditional_function.groovy  |  6 ++++++
 3 files changed, 30 insertions(+)

diff --git a/be/src/vec/functions/if.cpp b/be/src/vec/functions/if.cpp
index d839142db3..0d36f462ae 100644
--- a/be/src/vec/functions/if.cpp
+++ b/be/src/vec/functions/if.cpp
@@ -455,6 +455,19 @@ public:
         cond_column.column = materialize_column_if_const(cond_column.column);
         const ColumnWithTypeAndName& arg_cond = block.get_by_position(arguments[0]);
 
+        if (auto* then_is_const = check_and_get_column<ColumnConst>(*arg_then.column)) {
+            if (check_and_get_column<ColumnNullable>(then_is_const->get_data_column())) {
+                ColumnWithTypeAndName& then_column = block.get_by_position(arguments[1]);
+                then_column.column = materialize_column_if_const(then_column.column);
+            }
+        }
+        if (auto* else_is_const = check_and_get_column<ColumnConst>(*arg_else.column)) {
+            if (check_and_get_column<ColumnNullable>(else_is_const->get_data_column())) {
+                ColumnWithTypeAndName& else_column = block.get_by_position(arguments[2]);
+                else_column.column = materialize_column_if_const(else_column.column);
+            }
+        }
+
         Status ret = Status::OK();
         if (execute_for_null_condition(context, block, arg_cond, arg_then, arg_else, result) ||
             execute_for_null_then_else(context, block, arg_cond, arg_then, arg_else, result,
diff --git a/regression-test/data/query_p0/sql_functions/conditional_functions/test_conditional_function.out b/regression-test/data/query_p0/sql_functions/conditional_functions/test_conditional_function.out
index 52962b5c54..4038cc766c 100644
--- a/regression-test/data/query_p0/sql_functions/conditional_functions/test_conditional_function.out
+++ b/regression-test/data/query_p0/sql_functions/conditional_functions/test_conditional_function.out
@@ -191,3 +191,14 @@ true
 999
 999
 
+-- !if_true_then_nullable --
+4
+
+-- !if_true_else_nullable --
+2
+
+-- !if_false_then_nullable --
+2
+
+-- !if_false_else_nullable --
+4
diff --git a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_conditional_function.groovy b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_conditional_function.groovy
index 57d8a42810..d8ebc0402b 100644
--- a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_conditional_function.groovy
+++ b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_conditional_function.groovy
@@ -87,5 +87,11 @@ suite("test_conditional_function") {
 
     qt_sql "select ifnull( user_id, 999) r from ${tbName} order by r"
 
+    qt_if_true_then_nullable """select IF(true, DAYOFWEEK("2022-12-06 17:48:46"), 1) + 1;"""
+    qt_if_true_else_nullable """select IF(true, 1, DAYOFWEEK("2022-12-06 17:48:46")) + 1;"""
+
+    qt_if_false_then_nullable """select IF(false, DAYOFWEEK("2022-12-06 17:48:46"), 1) + 1;"""
+    qt_if_false_else_nullable """select IF(false, 1, DAYOFWEEK("2022-12-06 17:48:46")) + 1;"""
+
     sql "DROP TABLE ${tbName};"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org