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/10/28 00:42:56 UTC

[doris] branch master updated: [bugfix](concat) be crash caused by function concat(ifnull) (#13693)

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 859ffa6304 [bugfix](concat) be crash caused by function concat(ifnull) (#13693)
859ffa6304 is described below

commit 859ffa63045476461a67487deb4545f68b015aa1
Author: TengJianPing <18...@users.noreply.github.com>
AuthorDate: Fri Oct 28 08:42:51 2022 +0800

    [bugfix](concat) be crash caused by function concat(ifnull) (#13693)
---
 be/src/vec/functions/function_ifnull.h                              | 4 +++-
 .../query_p0/sql_functions/conditional_functions/test_nullif.out    | 6 ++++++
 .../query_p0/sql_functions/conditional_functions/test_nullif.groovy | 3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/be/src/vec/functions/function_ifnull.h b/be/src/vec/functions/function_ifnull.h
index 1a83785c48..3378afae84 100644
--- a/be/src/vec/functions/function_ifnull.h
+++ b/be/src/vec/functions/function_ifnull.h
@@ -62,7 +62,7 @@ public:
     // ifnull(col_left, col_right) == if(isnull(col_left), col_right, col_left)
     Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
                         size_t result, size_t input_rows_count) override {
-        const ColumnWithTypeAndName& col_left = block.get_by_position(arguments[0]);
+        ColumnWithTypeAndName& col_left = block.get_by_position(arguments[0]);
         if (col_left.column->only_null()) {
             block.get_by_position(result).column = block.get_by_position(arguments[1]).column;
             return Status::OK();
@@ -71,6 +71,8 @@ public:
         ColumnWithTypeAndName null_column_arg0 {nullptr, std::make_shared<DataTypeUInt8>(), ""};
         ColumnWithTypeAndName nested_column_arg0 {nullptr, col_left.type, ""};
 
+        col_left.column = col_left.column->convert_to_full_column_if_const();
+
         /// implement isnull(col_left) logic
         if (auto* nullable = check_and_get_column<ColumnNullable>(*col_left.column)) {
             null_column_arg0.column = nullable->get_null_map_column_ptr();
diff --git a/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out b/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
index 1fbbaec200..436797c791 100644
--- a/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
+++ b/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
@@ -1,4 +1,10 @@
 -- This file is automatically generated. You should know what you did if you want to edit this
+-- !ifnull_const1 --
+aA
+
+-- !ifnull_const2 --
+aA
+
 -- !select --
 true
 \N
diff --git a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
index 786ec3f25f..722525a802 100644
--- a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
+++ b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
@@ -16,6 +16,9 @@
 // under the License.
 
 suite("test_nullif") {
+    qt_ifnull_const1 """select CONCAT('a', ifnull(split_part('A.B','.',1), 'x'));"""
+    qt_ifnull_const2 """select CONCAT('a', ifnull(split_part('A.B','.',1), null));"""
+
     def tableName = "datetype"
 
     sql """ DROP TABLE IF EXISTS ${tableName} """


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