This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 0cc64a3a63c0b423864eb32e43b752013daf884b Author: Pxl <pxl...@qq.com> AuthorDate: Fri Jul 19 10:15:04 2024 +0800 [Improvement](scan) use loop to instead recursion on Level1Iterator::_normal_next (#38005) ## Proposed changes use loop to instead recursion on Level1Iterator::_normal_next --- be/src/vec/olap/vcollect_iterator.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/be/src/vec/olap/vcollect_iterator.cpp b/be/src/vec/olap/vcollect_iterator.cpp index 61050979b84..ceeede7c7c3 100644 --- a/be/src/vec/olap/vcollect_iterator.cpp +++ b/be/src/vec/olap/vcollect_iterator.cpp @@ -857,18 +857,18 @@ Status VCollectIterator::Level1Iterator::_merge_next(Block* block) { Status VCollectIterator::Level1Iterator::_normal_next(Block* block) { SCOPED_RAW_TIMER(&_reader->_stats.collect_iterator_normal_next_timer); auto res = _cur_child->next(block); + + while (res.is<END_OF_FILE>() && !_children.empty()) { + _cur_child = std::move(*(_children.begin())); + _children.pop_front(); + res = _cur_child->next(block); + } + if (LIKELY(res.ok())) { return Status::OK(); } else if (res.is<END_OF_FILE>()) { - // current child has been read, to read next - if (!_children.empty()) { - _cur_child = std::move(*(_children.begin())); - _children.pop_front(); - return _normal_next(block); - } else { - _cur_child.reset(); - return Status::Error<END_OF_FILE>(""); - } + _cur_child.reset(); + return Status::Error<END_OF_FILE>(""); } else { _cur_child.reset(); LOG(WARNING) << "failed to get next from child, res=" << res; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org