yiguolei commented on code in PR #49040:
URL: https://github.com/apache/doris/pull/49040#discussion_r2196679784


##########
be/src/olap/rowset/segment_v2/segment.cpp:
##########
@@ -897,63 +964,118 @@ Status Segment::new_column_iterator(const TabletColumn& 
tablet_column,
         return new_column_iterator_with_path(tablet_column, iter, opt);
     }
     // init default iterator
-    if (!_column_readers.contains(tablet_column.unique_id())) {
+    if (!_column_uid_to_footer_ordinal.contains(tablet_column.unique_id())) {
         RETURN_IF_ERROR(new_default_iterator(tablet_column, iter));
         return Status::OK();
     }
     // init iterator by unique id
+    std::shared_ptr<ColumnReader> reader;
+    RETURN_IF_ERROR(_get_column_reader(tablet_column, &reader));
     ColumnIterator* it;
-    RETURN_IF_ERROR(
-            _column_readers.at(tablet_column.unique_id())->new_iterator(&it, 
&tablet_column));
+    RETURN_IF_ERROR(reader->new_iterator(&it, &tablet_column));
     iter->reset(it);
 
     if (config::enable_column_type_check && !tablet_column.is_agg_state_type() 
&&
-        tablet_column.type() != 
_column_readers.at(tablet_column.unique_id())->get_meta_type()) {
+        tablet_column.type() != reader->get_meta_type()) {
         LOG(WARNING) << "different type between schema and column reader,"
                      << " column schema name: " << tablet_column.name()
                      << " column schema type: " << int(tablet_column.type())
-                     << " column reader meta type: "
-                     << 
int(_column_readers.at(tablet_column.unique_id())->get_meta_type());
+                     << " column reader meta type: " << 
int(reader->get_meta_type());
         return Status::InternalError("different type between schema and column 
reader");
     }
     return Status::OK();
 }
 
-Status Segment::new_column_iterator(int32_t unique_id, const 
StorageReadOptions* opt,
-                                    std::unique_ptr<ColumnIterator>* iter) {
-    RETURN_IF_ERROR(_create_column_readers_once(opt->stats));
-    ColumnIterator* it;
-    TabletColumn tablet_column = _tablet_schema->column_by_uid(unique_id);
-    RETURN_IF_ERROR(_column_readers.at(unique_id)->new_iterator(&it, 
&tablet_column));
-    iter->reset(it);
+Status Segment::_get_column_reader(vectorized::PathInDataRef relative_path, 
uint32_t col_uid,
+                                   std::shared_ptr<ColumnReader>* 
column_reader) {
+    if (!_tablet_schema->has_column_unique_id(col_uid)) {
+        *column_reader = nullptr;

Review Comment:
   这里设置为null了,为啥还是返回ok? 后面直接用column reader的时候,不就core了吗?



-- 
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]

Reply via email to