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 f94a78ab4a [Fix](topn) fix wrong nullable cast for RowId column and 
use heapsorter for two phase read (#16399)
f94a78ab4a is described below

commit f94a78ab4ac7bf52c08f0ae368325c15f576964b
Author: lihangyu <15605149...@163.com>
AuthorDate: Fri Feb 3 20:49:45 2023 +0800

    [Fix](topn) fix wrong nullable cast for RowId column and use heapsorter for 
two phase read (#16399)
    
    convert_nullable_flags does not contain nullable info for RowID column, but 
valid_column_ids contain RowID column, nullable falg will be undefined for 
RowID column
---
 be/src/vec/common/sort/heap_sorter.cpp | 2 +-
 be/src/vec/common/sort/sorter.cpp      | 2 +-
 be/src/vec/exec/vsort_node.cpp         | 3 ++-
 be/src/vec/utils/util.hpp              | 4 ++--
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/be/src/vec/common/sort/heap_sorter.cpp 
b/be/src/vec/common/sort/heap_sorter.cpp
index 18bddaaf7a..de36223915 100644
--- a/be/src/vec/common/sort/heap_sorter.cpp
+++ b/be/src/vec/common/sort/heap_sorter.cpp
@@ -48,7 +48,7 @@ Status HeapSorter::append_block(Block* block) {
                 if (column_id < 0) {
                     continue;
                 }
-                if (convert_nullable_flags[i]) {
+                if (i < convert_nullable_flags.size() && 
convert_nullable_flags[i]) {
                     auto column_ptr = 
make_nullable(block->get_by_position(column_id).column);
                     new_block.insert({column_ptr,
                                       
make_nullable(block->get_by_position(column_id).type), ""});
diff --git a/be/src/vec/common/sort/sorter.cpp 
b/be/src/vec/common/sort/sorter.cpp
index 6bfff5da1d..3fa7b9e06f 100644
--- a/be/src/vec/common/sort/sorter.cpp
+++ b/be/src/vec/common/sort/sorter.cpp
@@ -250,7 +250,7 @@ Status Sorter::partial_sort(Block& src_block, Block& 
dest_block) {
             if (column_id < 0) {
                 continue;
             }
-            if (convert_nullable_flags[i]) {
+            if (i < convert_nullable_flags.size() && 
convert_nullable_flags[i]) {
                 auto column_ptr = 
make_nullable(src_block.get_by_position(column_id).column);
                 new_block.insert(
                         {column_ptr, 
make_nullable(src_block.get_by_position(column_id).type), ""});
diff --git a/be/src/vec/exec/vsort_node.cpp b/be/src/vec/exec/vsort_node.cpp
index 3744c349c6..d9adfe1ac8 100644
--- a/be/src/vec/exec/vsort_node.cpp
+++ b/be/src/vec/exec/vsort_node.cpp
@@ -44,7 +44,8 @@ Status VSortNode::init(const TPlanNode& tnode, RuntimeState* 
state) {
     // exclude cases which incoming blocks has string column which is 
sensitive to operations like
     // `filter` and `memcpy`
     if (_limit > 0 && _limit + _offset < HeapSorter::HEAP_SORT_THRESHOLD &&
-        (tnode.sort_node.use_topn_opt || !row_desc.has_varlen_slots())) {
+        (tnode.sort_node.sort_info.use_two_phase_read || 
tnode.sort_node.use_topn_opt ||
+         !row_desc.has_varlen_slots())) {
         _sorter.reset(new HeapSorter(_vsort_exec_exprs, _limit, _offset, 
_pool, _is_asc_order,
                                      _nulls_first, row_desc));
         _reuse_mem = false;
diff --git a/be/src/vec/utils/util.hpp b/be/src/vec/utils/util.hpp
index 22f1d5d362..67a7489d2f 100644
--- a/be/src/vec/utils/util.hpp
+++ b/be/src/vec/utils/util.hpp
@@ -35,7 +35,7 @@ public:
     }
 
     static ColumnsWithTypeAndName create_columns_with_type_and_name(
-            const RowDescriptor& row_desc, bool ignore_trivial_slot = false) {
+            const RowDescriptor& row_desc, bool ignore_trivial_slot = true) {
         ColumnsWithTypeAndName columns_with_type_and_name;
         for (const auto& tuple_desc : row_desc.tuple_descriptors()) {
             for (const auto& slot_desc : tuple_desc->slots()) {
@@ -50,7 +50,7 @@ public:
     }
 
     static ColumnsWithTypeAndName create_empty_block(const RowDescriptor& 
row_desc,
-                                                     bool ignore_trivial_slot 
= false) {
+                                                     bool ignore_trivial_slot 
= true) {
         ColumnsWithTypeAndName columns_with_type_and_name;
         for (const auto& tuple_desc : row_desc.tuple_descriptors()) {
             for (const auto& slot_desc : tuple_desc->slots()) {


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

Reply via email to