yiguolei commented on code in PR #47096: URL: https://github.com/apache/doris/pull/47096#discussion_r1991209710
########## 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 + for (size_t i = child_size; i < tablet_column_size; i++) { + TabletColumn column = tablet_column->get_sub_column(i); Review Comment: 这个tablet column 中比如包括 a b c 三列; 假如我增加d 列,那么再814 行,应该把a b c 的column reader 做好了。 此时我感觉只有d 列是新增的,需要default。 -- 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