Skip to content

Commit 5b372c1

Browse files
authored
fix(query): fix lazy columns missed in constant table scan (#17258)
* fix(query): fix lazy columns missed in constant table scan Signed-off-by: damon <[email protected]> * clear lazy columns when rewriting false filter to be empty scan Signed-off-by: damon <[email protected]> --------- Signed-off-by: damon <[email protected]>
1 parent 009a5eb commit 5b372c1

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/query/sql/src/planner/metadata.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ impl Metadata {
170170
self.lazy_columns.extend(indices);
171171
}
172172

173+
pub fn clear_lazy_columns(&mut self) {
174+
self.lazy_columns.clear();
175+
}
176+
173177
pub fn add_non_lazy_columns(&mut self, indices: HashSet<usize>) {
174178
debug_assert!(indices.iter().all(|i| *i < self.columns.len()));
175179
self.non_lazy_columns.extend(indices);

src/query/sql/src/planner/optimizer/rule/rewrite/rule_eliminate_filter.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ impl Rule for RuleEliminateFilter {
7777
.derive_relational_prop(&RelExpr::with_s_expr(s_expr))?
7878
.output_columns
7979
.clone();
80+
81+
{
82+
let mut metadata = self.metadata.write();
83+
metadata.clear_lazy_columns();
84+
}
85+
8086
let metadata = self.metadata.read();
8187
let mut fields = Vec::with_capacity(output_columns.len());
8288

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
statement ok
2+
create table tt2 (c0 bool, c1 int);
3+
4+
statement ok
5+
insert into tt2 values(true, 1),(false, 2),(true, 3);
6+
7+
statement ok
8+
select null, c0, 30, c1 from tt2 where false order by c0 LIMIT 3 OFFSET 0;

0 commit comments

Comments
 (0)