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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]