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 e68ab0084b [bugfix]fix default value get wrong result because no 
implement read_by_rowids (#10582)
e68ab0084b is described below

commit e68ab0084b7bc7509bf22b8ccca6535a65d09485
Author: Pxl <952130...@qq.com>
AuthorDate: Mon Jul 4 19:30:49 2022 +0800

    [bugfix]fix default value get wrong result because no implement 
read_by_rowids (#10582)
---
 be/src/olap/rowset/segment_v2/column_reader.cpp    | 28 +++++++++++++++-------
 be/src/olap/rowset/segment_v2/column_reader.h      |  7 +++++-
 be/src/olap/rowset/segment_v2/segment_iterator.cpp | 18 ++++++++------
 be/src/olap/rowset/segment_v2/segment_iterator.h   |  6 ++---
 4 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp 
b/be/src/olap/rowset/segment_v2/column_reader.cpp
index ce0ea63d7d..3018feb099 100644
--- a/be/src/olap/rowset/segment_v2/column_reader.cpp
+++ b/be/src/olap/rowset/segment_v2/column_reader.cpp
@@ -755,7 +755,9 @@ Status FileColumnIterator::read_by_rowids(const rowid_t* 
rowids, const size_t co
                     }
                 }
 
-                if (!is_null) 
_page.data_decoder->seek_to_position_in_page(origin_index + this_run);
+                if (!is_null) {
+                    _page.data_decoder->seek_to_position_in_page(origin_index 
+ this_run);
+                }
 
                 already_read += this_read_count;
                 _page.offset_in_page += this_run;
@@ -766,8 +768,8 @@ Status FileColumnIterator::read_by_rowids(const rowid_t* 
rowids, const size_t co
             total_read_count += nrows_to_read;
             remaining -= nrows_to_read;
         } else {
-            _page.data_decoder->read_by_rowids(&rowids[total_read_count], 
_page.first_ordinal,
-                                               &nrows_to_read, dst);
+            RETURN_IF_ERROR(_page.data_decoder->read_by_rowids(
+                    &rowids[total_read_count], _page.first_ordinal, 
&nrows_to_read, dst));
             total_read_count += nrows_to_read;
             remaining -= nrows_to_read;
         }
@@ -990,15 +992,23 @@ void 
DefaultValueColumnIterator::insert_default_data(const TypeInfo* type_info,
 
 Status DefaultValueColumnIterator::next_batch(size_t* n, 
vectorized::MutableColumnPtr& dst,
                                               bool* has_null) {
+    *has_null = _is_default_value_null;
+    _insert_many_default(dst, *n);
+    return Status::OK();
+}
+
+Status DefaultValueColumnIterator::read_by_rowids(const rowid_t* rowids, const 
size_t count,
+                                                  
vectorized::MutableColumnPtr& dst) {
+    _insert_many_default(dst, count);
+    return Status::OK();
+}
+
+void 
DefaultValueColumnIterator::_insert_many_default(vectorized::MutableColumnPtr& 
dst, size_t n) {
     if (_is_default_value_null) {
-        *has_null = true;
-        dst->insert_many_defaults(*n);
+        dst->insert_many_defaults(n);
     } else {
-        *has_null = false;
-        insert_default_data(_type_info.get(), _type_size, _mem_value, dst, *n);
+        insert_default_data(_type_info.get(), _type_size, _mem_value, dst, n);
     }
-
-    return Status::OK();
 }
 
 } // namespace segment_v2
diff --git a/be/src/olap/rowset/segment_v2/column_reader.h 
b/be/src/olap/rowset/segment_v2/column_reader.h
index ed0303ca9b..4aa83ce888 100644
--- a/be/src/olap/rowset/segment_v2/column_reader.h
+++ b/be/src/olap/rowset/segment_v2/column_reader.h
@@ -136,7 +136,7 @@ public:
 
     CompressionTypePB get_compression() const { return _meta.compression(); }
 
-    uint64_t num_rows() { return _num_rows; }
+    uint64_t num_rows() const { return _num_rows; }
 
     void set_dict_encoding_type(DictEncodingType type) {
         std::call_once(_set_dict_encoding_type_flag, [&] { _dict_encoding_type 
= type; });
@@ -455,12 +455,17 @@ public:
 
     Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* 
has_null) override;
 
+    Status read_by_rowids(const rowid_t* rowids, const size_t count,
+                          vectorized::MutableColumnPtr& dst) override;
+
     ordinal_t get_current_ordinal() const override { return _current_rowid; }
 
     static void insert_default_data(const TypeInfo* type_info, size_t 
type_size, void* mem_value,
                                     vectorized::MutableColumnPtr& dst, size_t 
n);
 
 private:
+    void _insert_many_default(vectorized::MutableColumnPtr& dst, size_t n);
+
     bool _has_default_value;
     std::string _default_value;
     bool _is_nullable;
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp 
b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
index e685f26326..6a1fddf2dc 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp
@@ -21,6 +21,7 @@
 #include <set>
 #include <utility>
 
+#include "common/status.h"
 #include "gutil/strings/substitute.h"
 #include "olap/column_predicate.h"
 #include "olap/fs/fs_util.h"
@@ -947,10 +948,10 @@ uint16_t 
SegmentIterator::_evaluate_short_circuit_predicate(uint16_t* vec_sel_ro
     return selected_size;
 }
 
-void SegmentIterator::_read_columns_by_rowids(std::vector<ColumnId>& 
read_column_ids,
-                                              std::vector<rowid_t>& 
rowid_vector,
-                                              uint16_t* sel_rowid_idx, size_t 
select_size,
-                                              vectorized::MutableColumns* 
mutable_columns) {
+Status SegmentIterator::_read_columns_by_rowids(std::vector<ColumnId>& 
read_column_ids,
+                                                std::vector<rowid_t>& 
rowid_vector,
+                                                uint16_t* sel_rowid_idx, 
size_t select_size,
+                                                vectorized::MutableColumns* 
mutable_columns) {
     SCOPED_RAW_TIMER(&_opts.stats->lazy_read_ns);
     std::vector<rowid_t> rowids(select_size);
     for (size_t i = 0; i < select_size; ++i) {
@@ -958,8 +959,10 @@ void 
SegmentIterator::_read_columns_by_rowids(std::vector<ColumnId>& read_column
     }
     for (auto cid : read_column_ids) {
         auto& column = (*mutable_columns)[cid];
-        _column_iterators[cid]->read_by_rowids(rowids.data(), select_size, 
column);
+        RETURN_IF_ERROR(_column_iterators[cid]->read_by_rowids(rowids.data(), 
select_size, column));
     }
+
+    return Status::OK();
 }
 
 Status SegmentIterator::next_batch(vectorized::Block* block) {
@@ -1044,8 +1047,9 @@ Status SegmentIterator::next_batch(vectorized::Block* 
block) {
         }
 
         // step3: read non_predicate column
-        _read_columns_by_rowids(_non_predicate_columns, _block_rowids, 
sel_rowid_idx, selected_size,
-                                &_current_return_columns);
+        RETURN_IF_ERROR(_read_columns_by_rowids(_non_predicate_columns, 
_block_rowids,
+                                                sel_rowid_idx, selected_size,
+                                                &_current_return_columns));
 
         // step4: output columns
         // 4.1 output non-predicate column
diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h 
b/be/src/olap/rowset/segment_v2/segment_iterator.h
index fbf44c34da..682b9465dc 100644
--- a/be/src/olap/rowset/segment_v2/segment_iterator.h
+++ b/be/src/olap/rowset/segment_v2/segment_iterator.h
@@ -102,9 +102,9 @@ private:
     uint16_t _evaluate_vectorization_predicate(uint16_t* sel_rowid_idx, 
uint16_t selected_size);
     uint16_t _evaluate_short_circuit_predicate(uint16_t* sel_rowid_idx, 
uint16_t selected_size);
     void _output_non_pred_columns(vectorized::Block* block);
-    void _read_columns_by_rowids(std::vector<ColumnId>& read_column_ids,
-                                 std::vector<rowid_t>& rowid_vector, uint16_t* 
sel_rowid_idx,
-                                 size_t select_size, 
vectorized::MutableColumns* mutable_columns);
+    Status _read_columns_by_rowids(std::vector<ColumnId>& read_column_ids,
+                                   std::vector<rowid_t>& rowid_vector, 
uint16_t* sel_rowid_idx,
+                                   size_t select_size, 
vectorized::MutableColumns* mutable_columns);
 
     template <class Container>
     Status _output_column_by_sel_idx(vectorized::Block* block, const 
Container& column_ids,


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

Reply via email to