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


##########
be/src/storage/segment/segment_iterator.cpp:
##########
@@ -2175,75 +1981,57 @@ bool SegmentIterator::_prune_column(ColumnId cid, 
MutableColumnPtr& column,
 }
 
 bool SegmentIterator::_can_skip_reading_extra_column(ColumnId cid) {
-    if (!_opts.extra_columns.contains(cid) || _is_pred_column.empty()) {
+    if (!_opts.extra_columns.contains(cid)) {
         return false;
     }
-    DCHECK_EQ(_is_pred_column.size(), _is_common_expr_column.size());
-    DCHECK_LT(cid, _is_pred_column.size());
 
     // extra_columns is only an optimization hint. The real value is still
     // required when the column participates in expression materialization or
     // any predicate path.
-    return !_virtual_column_exprs.contains(cid) && !_has_delete_predicate(cid) 
&&
-           !_is_pred_column[cid] && !_is_common_expr_column[cid];
-}
-
-Status SegmentIterator::_read_columns(const std::vector<ColumnId>& column_ids,
-                                      MutableColumns& column_block, size_t 
nrows) {
-    for (auto cid : column_ids) {
-        auto& column = column_block[cid];
-        size_t rows_read = nrows;
-        if (_prune_column(cid, column, rows_read)) {
-            continue;
-        }
-        RETURN_IF_ERROR(_column_iterators[cid]->next_batch(&rows_read, 
column));
-        if (nrows != rows_read) {
-            return Status::Error<ErrorCode::INTERNAL_ERROR>("nrows({}) != 
rows_read({})", nrows,
-                                                            rows_read);
-        }
-    }
-    return Status::OK();
+    return !_virtual_column_exprs.contains(cid) && 
!_column_states[cid].is_predicate() &&
+           !_column_states[cid].is_common_expr;
 }
 
 Status SegmentIterator::_init_current_block(Block* block,
                                             std::vector<MutableColumnPtr>& 
current_columns,
                                             uint32_t nrows_read_limit) {
-    block->clear_column_data(_schema->num_column_ids());
+    block->clear_column_data(cast_set<int64_t>(_schema->num_block_columns()));
 
-    for (size_t i = 0; i < _schema->num_column_ids(); i++) {
-        auto cid = _schema->column_id(i);
-        const auto* column_desc = _schema->column(cid);
+    for (ColumnId i = 0; i < _schema->num_read_columns(); i++) {
+        if (!_is_active_read_column(i)) {
+            continue;
+        }
+        const auto* column_desc = _schema->column(i);
+
+        const auto& file_column_type = _storage_name_and_type[i].second;
+        const auto& expected_type = _schema->data_type(i);
+        if (_column_states[i].is_predicate()) {
+            if (current_columns[i].get() == nullptr) {

Review Comment:
   predicate column 中有2类:
   1. 单纯是delete 的
   2. 还有用户输入的column
   我们不需要跟要返回的block 关联吗?



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