This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit a504469053f6b76ae763d6810ee9a32ae20b1fca Author: HappenLee <happen...@hotmail.com> AuthorDate: Wed Jun 15 15:32:15 2022 +0800 [Opt][Vectorized] Opt vectorized the unique_table in storage vectorized (#10132) Co-authored-by: lihaopeng <lihaop...@baidu.com> --- be/src/vec/olap/vgeneric_iterators.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/be/src/vec/olap/vgeneric_iterators.cpp b/be/src/vec/olap/vgeneric_iterators.cpp index 2ffb4e224f..2440b09888 100644 --- a/be/src/vec/olap/vgeneric_iterators.cpp +++ b/be/src/vec/olap/vgeneric_iterators.cpp @@ -120,7 +120,13 @@ Status VAutoIncrementIterator::init(const StorageReadOptions& opts) { // } class VMergeIteratorContext { public: - VMergeIteratorContext(RowwiseIterator* iter, int sequence_id_idx, bool is_unique) : _iter(iter), _sequence_id_idx(sequence_id_idx), _is_unique(is_unique) {} + VMergeIteratorContext(RowwiseIterator* iter, int sequence_id_idx, bool is_unique) + : _iter(iter), + _sequence_id_idx(sequence_id_idx), + _is_unique(is_unique), + _num_columns(iter->schema().num_column_ids()), + _num_key_columns(iter->schema().num_key_columns()) {} + VMergeIteratorContext(const VMergeIteratorContext&) = delete; VMergeIteratorContext(VMergeIteratorContext&&) = delete; VMergeIteratorContext& operator=(const VMergeIteratorContext&) = delete; @@ -159,9 +165,8 @@ public: Status init(const StorageReadOptions& opts); bool compare(const VMergeIteratorContext& rhs) const { - const Schema& schema = _iter->schema(); - int num = schema.num_key_columns(); - int cmp_res = this->_block.compare_at(_index_in_block, rhs._index_in_block, num, rhs._block, -1); + int cmp_res = this->_block.compare_at(_index_in_block, rhs._index_in_block, + _num_key_columns, rhs._block, -1); if (cmp_res != 0) { return cmp_res > 0; } @@ -183,15 +188,15 @@ public: vectorized::Block& src = _block; vectorized::Block& dst = *block; - for (size_t i = 0; i < _iter->schema().num_column_ids(); ++i) { - vectorized::ColumnWithTypeAndName s_col = src.get_by_position(i); - vectorized::ColumnWithTypeAndName d_col = dst.get_by_position(i); + for (size_t i = 0; i < _num_columns; ++i) { + auto& s_col = src.get_by_position(i); + auto& d_col = dst.get_by_position(i); - vectorized::ColumnPtr s_cp = s_col.column; - vectorized::ColumnPtr d_cp = d_col.column; + vectorized::ColumnPtr& s_cp = s_col.column; + vectorized::ColumnPtr& d_cp = d_col.column; //copy a row to dst block column by column - ((vectorized::IColumn&)(*d_cp)).insert_range_from(*s_cp, _index_in_block, 1); + ((vectorized::IColumn&)(*d_cp)).insert_from(*s_cp, _index_in_block); } } @@ -226,6 +231,8 @@ private: mutable bool _skip = false; size_t _index_in_block = -1; int _block_row_max = 4096; + int _num_columns; + int _num_key_columns; }; Status VMergeIteratorContext::init(const StorageReadOptions& opts) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org