[Fix](segment) need to rebuild col_id_to_predicates when true predicates encountered (#25685)

This commit is contained in:
airborne12
2023-10-23 10:26:52 +08:00
committed by GitHub
parent 2e2d5bcba2
commit c51146df10

View File

@ -172,6 +172,18 @@ Status Segment::new_iterator(SchemaSPtr schema, const StorageReadOptions& read_o
if (pruned) {
auto options_with_pruned_predicates = read_options;
options_with_pruned_predicates.column_predicates = pruned_predicates;
//because column_predicates is changed, we need to rebuild col_id_to_predicates so that inverted index will not go through it.
options_with_pruned_predicates.col_id_to_predicates.clear();
for (auto* pred : options_with_pruned_predicates.column_predicates) {
if (!options_with_pruned_predicates.col_id_to_predicates.contains(
pred->column_id())) {
options_with_pruned_predicates.col_id_to_predicates.insert(
{pred->column_id(), std::make_shared<AndBlockColumnPredicate>()});
}
auto* single_column_block_predicate = new SingleColumnBlockPredicate(pred);
options_with_pruned_predicates.col_id_to_predicates[pred->column_id()]
->add_column_predicate(single_column_block_predicate);
}
LOG(INFO) << "column_predicates pruned from " << read_options.column_predicates.size()
<< " to " << pruned_predicates.size();
return iter->get()->init(options_with_pruned_predicates);