yiguolei commented on code in PR #47096: URL: https://github.com/apache/doris/pull/47096#discussion_r1991206122
########## be/src/olap/rowset/segment_v2/column_reader.cpp: ########## @@ -753,55 +754,77 @@ Status ColumnReader::new_agg_state_iterator(ColumnIterator** iterator) { return Status::OK(); } -Status ColumnReader::new_array_iterator(ColumnIterator** iterator) { +Status ColumnReader::new_array_iterator(ColumnIterator** iterator, + const TabletColumn* tablet_column) { ColumnIterator* item_iterator = nullptr; - RETURN_IF_ERROR(_sub_readers[0]->new_iterator(&item_iterator)); + RETURN_IF_ERROR(_sub_readers[0]->new_iterator( + &item_iterator, tablet_column && tablet_column->get_subtype_count() > 0 + ? &tablet_column->get_sub_column(0) + : nullptr)); ColumnIterator* offset_iterator = nullptr; - RETURN_IF_ERROR(_sub_readers[1]->new_iterator(&offset_iterator)); + RETURN_IF_ERROR(_sub_readers[1]->new_iterator(&offset_iterator, nullptr)); auto* ofcIter = new OffsetFileColumnIterator(reinterpret_cast<FileColumnIterator*>(offset_iterator)); ColumnIterator* null_iterator = nullptr; if (is_nullable()) { - RETURN_IF_ERROR(_sub_readers[2]->new_iterator(&null_iterator)); + RETURN_IF_ERROR(_sub_readers[2]->new_iterator(&null_iterator, nullptr)); } *iterator = new ArrayFileColumnIterator(this, ofcIter, item_iterator, null_iterator); return Status::OK(); } -Status ColumnReader::new_map_iterator(ColumnIterator** iterator) { +Status ColumnReader::new_map_iterator(ColumnIterator** iterator, + const TabletColumn* tablet_column) { ColumnIterator* key_iterator = nullptr; - RETURN_IF_ERROR(_sub_readers[0]->new_iterator(&key_iterator)); + RETURN_IF_ERROR(_sub_readers[0]->new_iterator( + &key_iterator, tablet_column && tablet_column->get_subtype_count() > 1 + ? &tablet_column->get_sub_column(0) + : nullptr)); ColumnIterator* val_iterator = nullptr; - RETURN_IF_ERROR(_sub_readers[1]->new_iterator(&val_iterator)); + RETURN_IF_ERROR(_sub_readers[1]->new_iterator( + &val_iterator, tablet_column && tablet_column->get_subtype_count() > 1 + ? &tablet_column->get_sub_column(1) + : nullptr)); ColumnIterator* offsets_iterator = nullptr; - RETURN_IF_ERROR(_sub_readers[2]->new_iterator(&offsets_iterator)); + RETURN_IF_ERROR(_sub_readers[2]->new_iterator(&offsets_iterator, nullptr)); auto* ofcIter = new OffsetFileColumnIterator(reinterpret_cast<FileColumnIterator*>(offsets_iterator)); ColumnIterator* null_iterator = nullptr; if (is_nullable()) { - RETURN_IF_ERROR(_sub_readers[3]->new_iterator(&null_iterator)); + RETURN_IF_ERROR(_sub_readers[3]->new_iterator(&null_iterator, nullptr)); } *iterator = new MapFileColumnIterator(this, null_iterator, ofcIter, key_iterator, val_iterator); return Status::OK(); } -Status ColumnReader::new_struct_iterator(ColumnIterator** iterator) { +Status ColumnReader::new_struct_iterator(ColumnIterator** iterator, + const TabletColumn* tablet_column) { std::vector<ColumnIterator*> sub_column_iterators; size_t child_size = is_nullable() ? _sub_readers.size() - 1 : _sub_readers.size(); + size_t tablet_column_size = tablet_column ? tablet_column->get_sub_columns().size() : 0; sub_column_iterators.reserve(child_size); ColumnIterator* sub_column_iterator; for (size_t i = 0; i < child_size; i++) { - RETURN_IF_ERROR(_sub_readers[i]->new_iterator(&sub_column_iterator)); + RETURN_IF_ERROR(_sub_readers[i]->new_iterator( + &sub_column_iterator, tablet_column ? &tablet_column->get_sub_column(i) : nullptr)); sub_column_iterators.push_back(sub_column_iterator); } + // create default_iterator for schema-change behavior which increase column Review Comment: add column not increase column -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org