Skip to content

Commit f16006d

Browse files
committed
Propagate required column indices from GROUP BY to scan in build_vectorized_plan
1 parent 023fb82 commit f16006d

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

src/executor/query_executor.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,6 +1512,7 @@ std::unique_ptr<VectorizedOperator> QueryExecutor::build_vectorized_plan(
15121512
auto thread_pool = std::make_shared<executor::ThreadPool>(std::thread::hardware_concurrency());
15131513
std::unique_ptr<VectorizedOperator> current_root =
15141514
std::make_unique<VectorizedSeqScanOperator>(base_table_name, col_table, thread_pool);
1515+
VectorizedSeqScanOperator* base_scan = static_cast<VectorizedSeqScanOperator*>(current_root.get());
15151516

15161517
// Track estimated output rows for join reordering decisions
15171518
uint64_t current_est_rows = optimizer::RowEstimator::estimate_scan_rows(*base_table_meta);
@@ -1720,20 +1721,27 @@ std::unique_ptr<VectorizedOperator> QueryExecutor::build_vectorized_plan(
17201721
}
17211722

17221723
executor::Schema output_schema;
1724+
std::vector<size_t> required_col_indices;
17231725
for (const auto& gb : stmt.group_by()) {
17241726
const auto& gb_name = gb->to_string();
17251727
size_t idx = current_root->output_schema().find_column(gb_name);
17261728
if (idx != static_cast<size_t>(-1)) {
17271729
output_schema.add_column(current_root->output_schema().get_column(idx).name(),
17281730
current_root->output_schema().get_column(idx).type(),
17291731
current_root->output_schema().get_column(idx).nullable());
1732+
required_col_indices.push_back(idx);
17301733
}
17311734
}
17321735
for (size_t i = 0; i < agg_infos.size(); ++i) {
17331736
output_schema.add_column("agg_" + std::to_string(i), common::ValueType::TYPE_FLOAT64,
17341737
false);
1738+
if (agg_infos[i].input_col_idx >= 0) {
1739+
required_col_indices.push_back(static_cast<size_t>(agg_infos[i].input_col_idx));
1740+
}
17351741
}
17361742

1743+
base_scan->set_required_columns(required_col_indices, output_schema);
1744+
17371745
auto agg_op = std::make_unique<VectorizedGroupByOperator>(
17381746
std::move(current_root), std::move(group_by), std::move(agg_infos), output_schema,
17391747
thread_pool);

0 commit comments

Comments
 (0)