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