HappenLee commented on code in PR #64010:
URL: https://github.com/apache/doris/pull/64010#discussion_r3360677248


##########
be/src/storage/segment/segment_iterator.cpp:
##########
@@ -3588,32 +3498,18 @@ Status 
SegmentIterator::_materialization_of_virtual_column(Block* block) {
     for (const auto& cid_and_expr : _virtual_column_exprs) {
         auto cid = cid_and_expr.first;
         auto column_expr = cid_and_expr.second;
-        size_t idx_in_block = _vir_cid_to_idx_in_block[cid];
-        if (block->columns() <= idx_in_block) {
-            return Status::InternalError(
-                    "Virtual column index {} is out of range, block columns 
{}, "
-                    "virtual columns size {}, virtual column expr {}",
-                    idx_in_block, block->columns(), 
_vir_cid_to_idx_in_block.size(),
-                    column_expr->root()->debug_string());
-        } else if (block->get_by_position(idx_in_block).column.get() == 
nullptr) {
-            return Status::InternalError(
-                    "Virtual column index {} is null, block columns {}, 
virtual columns size {}, "
-                    "virtual column expr {}",
-                    idx_in_block, block->columns(), 
_vir_cid_to_idx_in_block.size(),
-                    column_expr->root()->debug_string());
-        }
-        if (check_and_get_column<const ColumnNothing>(
-                    block->get_by_position(idx_in_block).column.get())) {
+        auto idx_in_block = _schema_block_id_map[cid];
+        auto& column = block->get_by_position(idx_in_block).column;
+        if (check_and_get_column<const ColumnNothing>(column.get())) {
             VLOG_DEBUG << fmt::format("Virtual column is doing 
materialization, cid {}, col idx {}",
                                       cid, idx_in_block);
             ColumnPtr result_column;
-            RETURN_IF_ERROR(column_expr->execute(block, result_column));
+            Block project_block;
+            RETURN_IF_ERROR(_build_project_block(block, &project_block));

Review Comment:
   这个是不是应该放到循环外面,如果有多个虚拟列表达式这个要搞好几遍?



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