Skip to content

Commit 11ff14c

Browse files
committed
Use CubeRewrite type alias in split rules
1 parent 1c395d4 commit 11ff14c

File tree

11 files changed

+55
-85
lines changed

11 files changed

+55
-85
lines changed

rust/cubesql/cubesql/src/compile/rewrite/rules/split/aggregate_function.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::{
22
compile::rewrite::{
33
agg_fun_expr, alias_expr,
4-
analysis::{ConstantFolding, LogicalPlanAnalysis},
4+
analysis::ConstantFolding,
55
case_expr, cast_expr, column_expr, is_null_expr, literal_expr, literal_int,
6-
rewriter::CubeEGraph,
6+
rewriter::{CubeEGraph, CubeRewrite},
77
rules::{members::MemberRules, split::SplitRules},
88
AggregateFunctionExprDistinct, AggregateFunctionExprFun,
99
AggregateSplitPushDownReplacerAliasToCube, ColumnExprColumn, LogicalPlanLanguage,
@@ -13,13 +13,9 @@ use crate::{
1313
var, var_iter,
1414
};
1515
use datafusion::{logical_plan::Column, physical_plan::aggregates::AggregateFunction};
16-
use egg::Rewrite;
1716

1817
impl SplitRules {
19-
pub fn aggregate_function_rules(
20-
&self,
21-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
22-
) {
18+
pub fn aggregate_function_rules(&self, rules: &mut Vec<CubeRewrite>) {
2319
self.single_arg_split_point_rules_aggregate_function(
2420
"aggregate-function",
2521
|| agg_fun_expr("?fun_name", vec![column_expr("?column")], "?distinct"),
@@ -222,7 +218,7 @@ impl SplitRules {
222218
+ Send
223219
+ Clone
224220
+ 'static,
225-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
221+
rules: &mut Vec<CubeRewrite>,
226222
) {
227223
self.single_arg_split_point_rules_aggregate(
228224
name,

rust/cubesql/cubesql/src/compile/rewrite/rules/split/alias.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
use crate::compile::rewrite::{
22
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, alias_expr,
3-
analysis::LogicalPlanAnalysis, projection_split_pullup_replacer,
4-
projection_split_pushdown_replacer, rewrite, rules::split::SplitRules, LogicalPlanLanguage,
3+
projection_split_pullup_replacer, projection_split_pushdown_replacer, rewrite,
4+
rewriter::CubeRewrite, rules::split::SplitRules,
55
};
6-
use egg::Rewrite;
76

87
impl SplitRules {
9-
pub fn alias_rules(&self, rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>) {
8+
pub fn alias_rules(&self, rules: &mut Vec<CubeRewrite>) {
109
rules.extend(vec![
1110
rewrite(
1211
"split-alias-push-down-aggregate",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/binary_expr.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
use crate::compile::rewrite::{
2-
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer,
3-
analysis::LogicalPlanAnalysis, binary_expr, rewrite, rules::split::SplitRules,
4-
LogicalPlanLanguage,
2+
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, binary_expr, rewrite,
3+
rewriter::CubeRewrite, rules::split::SplitRules,
54
};
6-
use egg::Rewrite;
75

86
impl SplitRules {
9-
pub fn binary_expr_rules(
10-
&self,
11-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
12-
) {
7+
pub fn binary_expr_rules(&self, rules: &mut Vec<CubeRewrite>) {
138
rules.extend(vec![
149
rewrite(
1510
"split-binary-push-down-aggregate",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/case.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
use crate::compile::rewrite::{
2-
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer,
3-
analysis::LogicalPlanAnalysis, case_expr_var_arg, rewrite, rules::split::SplitRules,
4-
LogicalPlanLanguage,
2+
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, case_expr_var_arg, rewrite,
3+
rewriter::CubeRewrite, rules::split::SplitRules,
54
};
6-
use egg::Rewrite;
75

86
impl SplitRules {
9-
pub fn case_rules(&self, rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>) {
7+
pub fn case_rules(&self, rules: &mut Vec<CubeRewrite>) {
108
rules.extend(vec![
119
rewrite(
1210
"split-case-push-down-aggregate",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/cast.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::{
22
compile::rewrite::{
33
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer,
4-
analysis::{LogicalPlanAnalysis, OriginalExpr},
4+
analysis::OriginalExpr,
55
cast_expr, projection_split_pullup_replacer, projection_split_pushdown_replacer, rewrite,
6-
rewriter::CubeEGraph,
6+
rewriter::{CubeEGraph, CubeRewrite},
77
rules::split::SplitRules,
88
transforming_rewrite, AliasExprAlias, CastExprDataType, LiteralExprValue,
99
LogicalPlanLanguage, ScalarFunctionExprFun,
@@ -16,10 +16,10 @@ use datafusion::{
1616
physical_plan::functions::BuiltinScalarFunction,
1717
scalar::ScalarValue,
1818
};
19-
use egg::{Rewrite, Subst};
19+
use egg::Subst;
2020

2121
impl SplitRules {
22-
pub fn cast_rules(&self, rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>) {
22+
pub fn cast_rules(&self, rules: &mut Vec<CubeRewrite>) {
2323
rules.extend([
2424
transforming_rewrite(
2525
"split-cast-push-down-aggregate",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/column.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
use crate::compile::rewrite::{
2-
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer,
3-
analysis::LogicalPlanAnalysis, column_expr, projection_split_pullup_replacer,
4-
projection_split_pushdown_replacer, rewrite, rules::split::SplitRules, LogicalPlanLanguage,
2+
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, column_expr,
3+
projection_split_pullup_replacer, projection_split_pushdown_replacer, rewrite,
4+
rewriter::CubeRewrite, rules::split::SplitRules,
55
};
6-
use egg::Rewrite;
76

87
impl SplitRules {
9-
pub fn column_rules(&self, rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>) {
8+
pub fn column_rules(&self, rules: &mut Vec<CubeRewrite>) {
109
// TODO check for measures?
1110
rules.push(rewrite(
1211
"split-column-point-aggregate",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/dates.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::{
22
compile::rewrite::{
3-
analysis::{ConstantFolding, LogicalPlanAnalysis},
3+
analysis::ConstantFolding,
44
cast_expr, literal_expr,
5-
rewriter::CubeEGraph,
5+
rewriter::{CubeEGraph, CubeRewrite},
66
rules::{
77
members::min_granularity,
88
split::SplitRules,
@@ -13,10 +13,9 @@ use crate::{
1313
var,
1414
};
1515
use datafusion::scalar::ScalarValue;
16-
use egg::Rewrite;
1716

1817
impl SplitRules {
19-
pub fn date_rules(&self, rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>) {
18+
pub fn date_rules(&self, rules: &mut Vec<CubeRewrite>) {
2019
// TODO check for time dimension before push down to optimize performance
2120
// TODO use pass-through instead point rules for epoch
2221
self.single_arg_split_point_rules(

rust/cubesql/cubesql/src/compile/rewrite/rules/split/functions.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
use crate::compile::rewrite::{
2-
analysis::LogicalPlanAnalysis, is_not_null_expr, is_null_expr, literal_expr, negative_expr,
3-
rules::split::SplitRules, udf_expr, ListType, LogicalPlanLanguage,
2+
is_not_null_expr, is_null_expr, literal_expr, negative_expr, rewriter::CubeRewrite,
3+
rules::split::SplitRules, udf_expr, ListType,
44
};
5-
use egg::Rewrite;
65

76
impl SplitRules {
8-
pub fn functions_rules(
9-
&self,
10-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
11-
) {
7+
pub fn functions_rules(&self, rules: &mut Vec<CubeRewrite>) {
128
// Universal rule to traverse any number of function arguments
139
// PushDown(ScalarFunctionExprArgs(..., arg, ...)) => ScalarFunctionExprArgs(..., PushDown(arg), ...)
1410
// ScalarFunctionExprArgs(..., PullUp(arg), ...) => PullUp(ScalarFunctionExprArgs(..., arg, ...))

rust/cubesql/cubesql/src/compile/rewrite/rules/split/granularity.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
use crate::{
22
compile::rewrite::{
33
alias_expr,
4-
analysis::{ConstantFolding, LogicalPlanAnalysis},
4+
analysis::ConstantFolding,
55
binary_expr, cast_expr, cast_expr_explicit, column_expr, literal_expr, literal_float,
66
literal_int, literal_string,
7-
rewriter::CubeEGraph,
7+
rewriter::{CubeEGraph, CubeRewrite},
88
rules::split::SplitRules,
9-
udf_expr, LogicalPlanLanguage,
9+
udf_expr,
1010
},
1111
var,
1212
};
1313
use datafusion::{arrow::datatypes::DataType as ArrowDataType, scalar::ScalarValue};
14-
use egg::Rewrite;
1514

1615
impl SplitRules {
17-
pub fn granularity_rules(
18-
&self,
19-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
20-
) {
16+
pub fn granularity_rules(&self, rules: &mut Vec<CubeRewrite>) {
2117
// CAST(CAST(((((EXTRACT(YEAR FROM "ta_1"."LO_COMMITDATE") * 100) + 1) * 100) + 1) AS varchar) AS date)
2218
self.single_arg_split_point_rules(
2319
"thoughtspot-year",

rust/cubesql/cubesql/src/compile/rewrite/rules/split/mod.rs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@ pub mod top_level;
1111

1212
use crate::{
1313
compile::rewrite::{
14-
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, alias_expr,
15-
analysis::LogicalPlanAnalysis,
16-
fun_expr, fun_expr_var_arg, list_rewrite_with_lists_and_vars, original_expr_name,
14+
aggregate_split_pullup_replacer, aggregate_split_pushdown_replacer, alias_expr, fun_expr,
15+
fun_expr_var_arg, list_rewrite_with_lists_and_vars, original_expr_name,
1716
projection_split_pullup_replacer, projection_split_pushdown_replacer, rewrite,
18-
rewriter::{CubeEGraph, RewriteRules},
17+
rewriter::{CubeEGraph, CubeRewrite, RewriteRules},
1918
rules::{members::MemberRules, replacer_flat_push_down_node, replacer_push_down_node},
2019
transforming_chain_rewrite, AliasExprAlias, ListApplierListPattern, ListPattern, ListType,
2120
LogicalPlanLanguage,
@@ -24,7 +23,6 @@ use crate::{
2423
transport::MetaContext,
2524
var,
2625
};
27-
use egg::Rewrite;
2826
use std::{fmt::Display, sync::Arc};
2927

3028
pub struct SplitRules {
@@ -34,7 +32,7 @@ pub struct SplitRules {
3432
}
3533

3634
impl RewriteRules for SplitRules {
37-
fn rewrite_rules(&self) -> Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>> {
35+
fn rewrite_rules(&self) -> Vec<CubeRewrite> {
3836
let mut rules = Vec::new();
3937

4038
self.top_level_rules(&mut rules);
@@ -69,7 +67,7 @@ impl SplitRules {
6967
name: &str,
7068
node: impl Fn(String) -> String,
7169
projection_rules: bool,
72-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
70+
rules: &mut Vec<CubeRewrite>,
7371
) {
7472
rules.extend(vec![
7573
rewrite(
@@ -140,7 +138,7 @@ impl SplitRules {
140138
&self,
141139
fun_name: &(impl Display + ?Sized),
142140
projection_rules: bool,
143-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
141+
rules: &mut Vec<CubeRewrite>,
144142
) {
145143
rules.extend(vec![
146144
rewrite(
@@ -223,7 +221,7 @@ impl SplitRules {
223221
+ Clone
224222
+ 'static,
225223
projection_rules: bool,
226-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
224+
rules: &mut Vec<CubeRewrite>,
227225
) {
228226
if projection_rules {
229227
self.single_arg_split_point_rules_projection(
@@ -256,7 +254,7 @@ impl SplitRules {
256254
+ Send
257255
+ Clone
258256
+ 'static,
259-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
257+
rules: &mut Vec<CubeRewrite>,
260258
) {
261259
rules.push(transforming_chain_rewrite(
262260
&format!("split-{}-point-aggregate", name),
@@ -292,7 +290,7 @@ impl SplitRules {
292290
+ Send
293291
+ Clone
294292
+ 'static,
295-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
293+
rules: &mut Vec<CubeRewrite>,
296294
) {
297295
rules.push(transforming_chain_rewrite(
298296
&format!("split-{}-point-projection", name),
@@ -349,11 +347,7 @@ impl SplitRules {
349347
}
350348
}
351349

352-
fn list_pushdown_pullup_rules(
353-
name: &str,
354-
list_node: &str,
355-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
356-
) {
350+
fn list_pushdown_pullup_rules(name: &str, list_node: &str, rules: &mut Vec<CubeRewrite>) {
357351
let possible_inner_list_nodes = Self::possible_inner_list_nodes();
358352

359353
// Aggregate split replacer
@@ -428,7 +422,7 @@ impl SplitRules {
428422
fn flat_list_pushdown_pullup_rules(
429423
name: &str,
430424
list_type: ListType,
431-
rules: &mut Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>>,
425+
rules: &mut Vec<CubeRewrite>,
432426
) {
433427
let possible_inner_list_types = Self::possible_inner_flat_list_types();
434428

@@ -525,7 +519,7 @@ impl SplitRules {
525519
substitute_list_node: &str,
526520
replacer_node: impl Fn(String, String, String) -> String,
527521
possible_inner_list_nodes: &Vec<String>,
528-
) -> Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>> {
522+
) -> Vec<CubeRewrite> {
529523
possible_inner_list_nodes
530524
.iter()
531525
.map(|inner_list_node| {
@@ -562,7 +556,7 @@ impl SplitRules {
562556
replacer_node: impl Fn(String, String, String) -> String,
563557
possible_inner_list_types: &Vec<ListType>,
564558
top_level_elem_vars: &[&str],
565-
) -> Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>> {
559+
) -> Vec<CubeRewrite> {
566560
possible_inner_list_types
567561
.iter()
568562
.map(|inner_list_type| {
@@ -608,7 +602,7 @@ impl SplitRules {
608602
push_down_replacer_node: impl Fn(String, String) -> String,
609603
pull_up_replacer_node: impl Fn(String, String, String) -> String,
610604
possible_inner_list_nodes: &Vec<String>,
611-
) -> Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>> {
605+
) -> Vec<CubeRewrite> {
612606
possible_inner_list_nodes
613607
.iter()
614608
.map(|inner_list_node| {
@@ -632,7 +626,7 @@ impl SplitRules {
632626
push_down_replacer_node: impl Fn(String, String) -> String,
633627
pull_up_replacer_node: impl Fn(String, String, String) -> String,
634628
possible_inner_list_types: &Vec<ListType>,
635-
) -> Vec<Rewrite<LogicalPlanLanguage, LogicalPlanAnalysis>> {
629+
) -> Vec<CubeRewrite> {
636630
possible_inner_list_types
637631
.iter()
638632
.map(|inner_list_type| {

0 commit comments

Comments
 (0)