Skip to content

Commit dabbc7f

Browse files
committed
feat(cubesql): Allow grouped join sides to have different in_projection flag
1 parent cdbf178 commit dabbc7f

File tree

1 file changed

+16
-13
lines changed
  • rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper

1 file changed

+16
-13
lines changed

rust/cubesql/cubesql/src/compile/rewrite/rules/wrapper/join.rs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl WrapperRules {
4848
// Rule would place ?left_cube_scan_input to `from` position of WrappedSelect(WrappedSelectPushToCube:true)
4949
// So it need to support push-to-Cube
5050
"WrapperReplacerContextPushToCube:true",
51-
"?in_projection",
51+
"?left_in_projection",
5252
// Going to use this in RHS of rule
5353
// RHS of join is grouped, so it shouldn't have any cubes or members
5454
"?left_cube_members",
@@ -65,7 +65,7 @@ impl WrapperRules {
6565
// Going to ignore this
6666
"?right_alias_to_cube",
6767
"?right_push_to_cube",
68-
"?in_projection",
68+
"?right_in_projection",
6969
// Going to ignore this
7070
"?right_cube_members",
7171
"?right_grouped_subqueries",
@@ -80,6 +80,9 @@ impl WrapperRules {
8080
"?join_constraint",
8181
"JoinNullEqualsNull:false",
8282
),
83+
// RHS is using WrapperReplacerContextInProjection:false because only part
84+
// that should have push down replacer is join condition, and it should only contain dimensions
85+
// Other way of thinking about it: join condition is more like filter than projection
8386
cube_scan_wrapper(
8487
wrapped_select(
8588
"WrappedSelectSelectType:Projection",
@@ -88,7 +91,7 @@ impl WrapperRules {
8891
wrapper_replacer_context(
8992
"?left_alias_to_cube",
9093
"WrapperReplacerContextPushToCube:true",
91-
"?in_projection",
94+
"WrapperReplacerContextInProjection:false",
9295
"?left_cube_members",
9396
"?out_grouped_subqueries",
9497
// Can use it, because we've checked that left input allows push-to-Cube,
@@ -101,7 +104,7 @@ impl WrapperRules {
101104
wrapper_replacer_context(
102105
"?left_alias_to_cube",
103106
"WrapperReplacerContextPushToCube:true",
104-
"?in_projection",
107+
"WrapperReplacerContextInProjection:false",
105108
"?left_cube_members",
106109
"?out_grouped_subqueries",
107110
"WrapperReplacerContextUngroupedScan:true",
@@ -112,7 +115,7 @@ impl WrapperRules {
112115
wrapper_replacer_context(
113116
"?left_alias_to_cube",
114117
"WrapperReplacerContextPushToCube:true",
115-
"?in_projection",
118+
"WrapperReplacerContextInProjection:false",
116119
"?left_cube_members",
117120
"?out_grouped_subqueries",
118121
"WrapperReplacerContextUngroupedScan:true",
@@ -123,7 +126,7 @@ impl WrapperRules {
123126
wrapper_replacer_context(
124127
"?left_alias_to_cube",
125128
"WrapperReplacerContextPushToCube:true",
126-
"?in_projection",
129+
"WrapperReplacerContextInProjection:false",
127130
"?left_cube_members",
128131
"?out_grouped_subqueries",
129132
"WrapperReplacerContextUngroupedScan:true",
@@ -134,7 +137,7 @@ impl WrapperRules {
134137
wrapper_replacer_context(
135138
"?left_alias_to_cube",
136139
"WrapperReplacerContextPushToCube:true",
137-
"?in_projection",
140+
"WrapperReplacerContextInProjection:false",
138141
"?left_cube_members",
139142
"?out_grouped_subqueries",
140143
"WrapperReplacerContextUngroupedScan:true",
@@ -147,7 +150,7 @@ impl WrapperRules {
147150
wrapper_replacer_context(
148151
"?left_alias_to_cube",
149152
"WrapperReplacerContextPushToCube:true",
150-
"?in_projection",
153+
"WrapperReplacerContextInProjection:false",
151154
"?left_cube_members",
152155
"?out_grouped_subqueries",
153156
"WrapperReplacerContextUngroupedScan:true",
@@ -161,7 +164,7 @@ impl WrapperRules {
161164
wrapper_replacer_context(
162165
"?left_alias_to_cube",
163166
"WrapperReplacerContextPushToCube:true",
164-
"?in_projection",
167+
"WrapperReplacerContextInProjection:false",
165168
"?left_cube_members",
166169
"?out_grouped_subqueries",
167170
"WrapperReplacerContextUngroupedScan:true",
@@ -175,7 +178,7 @@ impl WrapperRules {
175178
// On other: RHS is grouped, so any column is just a column
176179
// Right now, it is relying on grouped_subqueries + PushToCube:true, to allow both dimensions and grouped columns
177180
"WrapperReplacerContextPushToCube:true",
178-
"?in_projection",
181+
"WrapperReplacerContextInProjection:false",
179182
"?left_cube_members",
180183
"?out_grouped_subqueries",
181184
"WrapperReplacerContextUngroupedScan:true",
@@ -189,7 +192,7 @@ impl WrapperRules {
189192
wrapper_replacer_context(
190193
"?left_alias_to_cube",
191194
"WrapperReplacerContextPushToCube:true",
192-
"?in_projection",
195+
"WrapperReplacerContextInProjection:false",
193196
"?left_cube_members",
194197
"?out_grouped_subqueries",
195198
"WrapperReplacerContextUngroupedScan:true",
@@ -201,7 +204,7 @@ impl WrapperRules {
201204
wrapper_replacer_context(
202205
"?left_alias_to_cube",
203206
"WrapperReplacerContextPushToCube:true",
204-
"?in_projection",
207+
"WrapperReplacerContextInProjection:false",
205208
"?left_cube_members",
206209
"?out_grouped_subqueries",
207210
"WrapperReplacerContextUngroupedScan:true",
@@ -215,7 +218,7 @@ impl WrapperRules {
215218
wrapper_replacer_context(
216219
"?left_alias_to_cube",
217220
"WrapperReplacerContextPushToCube:true",
218-
"?in_projection",
221+
"WrapperReplacerContextInProjection:false",
219222
"?left_cube_members",
220223
"?out_grouped_subqueries",
221224
"WrapperReplacerContextUngroupedScan:true",

0 commit comments

Comments
 (0)