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

lihaopeng pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new d1d2e63068f [Bug](fix) fix coredump case in (not null, null) execpt 
(not null, not null) case (#38750)
d1d2e63068f is described below

commit d1d2e63068f7154a64d10944aec01c6e8c15969f
Author: HappenLee <happen...@hotmail.com>
AuthorDate: Fri Aug 2 11:28:03 2024 +0800

    [Bug](fix) fix coredump case in (not null, null) execpt (not null, not 
null) case (#38750)
    
    cherry pick #38737
---
 be/src/pipeline/dependency.h                                    | 5 +++--
 be/src/pipeline/exec/set_sink_operator.cpp                      | 8 ++++++--
 regression-test/data/query_p0/except/test_query_except.out      | 2 ++
 regression-test/suites/query_p0/except/test_query_except.groovy | 3 +++
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/be/src/pipeline/dependency.h b/be/src/pipeline/dependency.h
index 8adc24d3b4e..f37766394e0 100644
--- a/be/src/pipeline/dependency.h
+++ b/be/src/pipeline/dependency.h
@@ -761,8 +761,9 @@ public:
         // (select 0) intersect (select null) the build side hash table should 
not
         // ignore null value.
         std::vector<DataTypePtr> data_types;
-        for (const auto& ctx : child_exprs_lists[0]) {
-            data_types.emplace_back(build_not_ignore_null[0]
+        for (int i = 0; i < child_exprs_lists[0].size(); i++) {
+            const auto& ctx = child_exprs_lists[0][i];
+            data_types.emplace_back(build_not_ignore_null[i]
                                             ? 
make_nullable(ctx->root()->data_type())
                                             : ctx->root()->data_type());
         }
diff --git a/be/src/pipeline/exec/set_sink_operator.cpp 
b/be/src/pipeline/exec/set_sink_operator.cpp
index 5fc38f3ca70..6c76f9a57a3 100644
--- a/be/src/pipeline/exec/set_sink_operator.cpp
+++ b/be/src/pipeline/exec/set_sink_operator.cpp
@@ -130,9 +130,13 @@ Status 
SetSinkOperatorX<is_intersect>::_extract_build_column(
             block.get_by_position(result_col_id).column =
                     
block.get_by_position(result_col_id).column->convert_to_full_column_if_const();
         }
+        // Do make nullable should not change the origin column and type in 
origin block
+        // which may cause coredump problem
         if (local_state._shared_state->build_not_ignore_null[i]) {
-            block.get_by_position(result_col_id).column =
-                    make_nullable(block.get_by_position(result_col_id).column);
+            auto column_ptr = 
make_nullable(block.get_by_position(result_col_id).column, false);
+            block.insert(
+                    {column_ptr, 
make_nullable(block.get_by_position(result_col_id).type), ""});
+            result_col_id = block.columns() - 1;
         }
 
         raw_ptrs[i] = block.get_by_position(result_col_id).column.get();
diff --git a/regression-test/data/query_p0/except/test_query_except.out 
b/regression-test/data/query_p0/except/test_query_except.out
index 7aea45fde18..763cb44c7f8 100644
--- a/regression-test/data/query_p0/except/test_query_except.out
+++ b/regression-test/data/query_p0/except/test_query_except.out
@@ -14,3 +14,5 @@
 14
 15
 
+-- !select_except2 --
+
diff --git a/regression-test/suites/query_p0/except/test_query_except.groovy 
b/regression-test/suites/query_p0/except/test_query_except.groovy
index a13fd76e7a9..410e24f89b9 100644
--- a/regression-test/suites/query_p0/except/test_query_except.groovy
+++ b/regression-test/suites/query_p0/except/test_query_except.groovy
@@ -22,4 +22,7 @@ suite("test_query_except", "arrow_flight_sql") {
                       SELECT * FROM (SELECT k1 FROM test_query_db.baseall
                                      EXCEPT SELECT k1 FROM test_query_db.test) 
a ORDER BY k1
                       """
+    qt_select_except2 """
+                     select not_null_k1, not_null_k1 from (SELECT 
non_nullable(k1) as not_null_k1 FROM test_query_db.baseall where k1 is not 
null) b1 except select non_nullable(k1), k1 from test_query_db.baseall where k1 
is not null order by 1, 2;        
+                     """
 }


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

Reply via email to