Skip to content
This repository was archived by the owner on Jan 7, 2025. It is now read-only.

Commit c16f129

Browse files
committed
fix(df-repr): enable projection rules (#223)
Signed-off-by: Alex Chi <[email protected]>
1 parent ef1815c commit c16f129

File tree

14 files changed

+639
-521
lines changed

14 files changed

+639
-521
lines changed

optd-datafusion-repr/src/lib.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ impl DatafusionOptimizer {
100100
for rule in rules {
101101
rule_wrappers.push(RuleWrapper::new_cascades(rule));
102102
}
103-
// rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
104-
// rules::FilterProjectTransposeRule::new(),
105-
// )));
103+
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
104+
rules::FilterProjectTransposeRule::new(),
105+
)));
106106
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
107107
rules::FilterCrossJoinTransposeRule::new(),
108108
)));
@@ -130,9 +130,9 @@ impl DatafusionOptimizer {
130130
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
131131
rules::JoinAbsorbFilterRule::new(),
132132
)));
133-
// rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
134-
// ProjectionPullUpJoin::new(),
135-
// )));
133+
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
134+
rules::ProjectionPullUpJoin::new(),
135+
)));
136136
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
137137
rules::EliminateProjectRule::new(),
138138
)));
@@ -148,9 +148,9 @@ impl DatafusionOptimizer {
148148
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
149149
rules::EliminateFilterRule::new(),
150150
)));
151-
// rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
152-
// rules::ProjectFilterTransposeRule::new(),
153-
// )));
151+
rule_wrappers.push(RuleWrapper::new_cascades(Arc::new(
152+
rules::ProjectFilterTransposeRule::new(),
153+
)));
154154
rule_wrappers
155155
}
156156

optd-datafusion-repr/src/plan_nodes/predicates.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub use data_type_pred::DataTypePred;
2424
pub use extern_column_ref_pred::ExternColumnRefPred;
2525
pub use func_pred::{FuncPred, FuncType};
2626
pub use in_list_pred::InListPred;
27+
use itertools::Itertools;
2728
pub use like_pred::LikePred;
2829
pub use list_pred::ListPred;
2930
pub use log_op_pred::{LogOpPred, LogOpType};
@@ -44,6 +45,8 @@ pub trait PredExt {
4445
fn rewrite_column_refs(&self, rewrite_fn: impl FnMut(usize) -> Option<usize>) -> Option<Self>
4546
where
4647
Self: Sized;
48+
49+
fn get_column_refs(&self) -> Vec<ColumnRefPred>;
4750
}
4851

4952
impl<P: DfReprPredNode> PredExt for P {
@@ -53,6 +56,15 @@ impl<P: DfReprPredNode> PredExt for P {
5356
) -> Option<Self> {
5457
rewrite_column_refs_inner(self, &mut rewrite_fn)
5558
}
59+
60+
fn get_column_refs(&self) -> Vec<ColumnRefPred> {
61+
if let Some(col_ref) = ColumnRefPred::from_pred_node(self.clone().into_pred_node()) {
62+
return vec![col_ref];
63+
}
64+
let node = self.clone().into_pred_node();
65+
let children = node.children.iter().map(|child| child.get_column_refs());
66+
children.collect_vec().concat()
67+
}
5668
}
5769

5870
fn rewrite_column_refs_inner<P: DfReprPredNode>(
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
// pub mod project_filter_transpose;
2-
// pub mod project_join_transpose;
1+
pub mod project_filter_transpose;
2+
pub mod project_join_transpose;
33
pub mod project_merge;
44
pub mod project_transpose_common;
55

6+
pub use project_filter_transpose::*;
7+
pub use project_join_transpose::*;
68
pub use project_merge::*;

0 commit comments

Comments
 (0)