@@ -6,6 +6,7 @@ use crate::planner::sql_evaluator::collectors::{
6
6
collect_cube_names, collect_join_hints, collect_join_hints_for_measures,
7
7
collect_sub_query_dimensions_from_members, collect_sub_query_dimensions_from_symbols,
8
8
} ;
9
+ use crate :: planner:: sql_evaluator:: MemberSymbol ;
9
10
use crate :: planner:: {
10
11
BaseMeasure , BaseMember , BaseMemberHelper , FullKeyAggregateMeasures , QueryProperties ,
11
12
} ;
@@ -101,7 +102,7 @@ impl MultipliedMeasuresQueryPlanner {
101
102
. iter ( )
102
103
. map ( |m| m. measure ( ) ) ,
103
104
)
104
- . map ( |m| m. member_evaluator ( ) . clone ( ) )
105
+ . map ( |m| m. clone ( ) )
105
106
. collect_vec ( ) ;
106
107
let schema = LogicalSchema :: default ( )
107
108
. set_time_dimensions ( self . query_properties . time_dimension_symbols ( ) )
@@ -132,15 +133,11 @@ impl MultipliedMeasuresQueryPlanner {
132
133
fn aggregate_subquery_plan (
133
134
& self ,
134
135
key_cube_name : & String ,
135
- measures : & Vec < Rc < BaseMeasure > > ,
136
+ measures : & Vec < Rc < MemberSymbol > > ,
136
137
key_join : Rc < dyn JoinDefinition > ,
137
138
) -> Result < Rc < AggregateMultipliedSubquery > , CubeError > {
138
- let measures_symbols = measures
139
- . iter ( )
140
- . map ( |m| m. member_evaluator ( ) . clone ( ) )
141
- . collect ( ) ;
142
139
let subquery_dimensions = collect_sub_query_dimensions_from_symbols (
143
- & measures_symbols ,
140
+ & measures ,
144
141
& self . join_planner ,
145
142
& key_join,
146
143
self . query_tools . clone ( ) ,
@@ -154,19 +151,14 @@ impl MultipliedMeasuresQueryPlanner {
154
151
let subquery_dimension_queries =
155
152
dimension_subquery_planner. plan_queries ( & subquery_dimensions) ?;
156
153
157
- let primary_keys_dimensions = self
158
- . common_utils
159
- . primary_keys_dimensions ( key_cube_name) ?
160
- . into_iter ( )
161
- . map ( |d| d. as_base_member ( ) )
162
- . collect_vec ( ) ;
154
+ let primary_keys_dimensions = self . common_utils . primary_keys_dimensions ( key_cube_name) ?;
163
155
let keys_subquery =
164
156
self . key_query ( & primary_keys_dimensions, key_join. clone ( ) , key_cube_name) ?;
165
157
166
158
let schema = LogicalSchema :: default ( )
167
159
. set_dimensions ( self . query_properties . dimension_symbols ( ) )
168
160
. set_time_dimensions ( self . query_properties . time_dimension_symbols ( ) )
169
- . set_measures ( measures_symbols )
161
+ . set_measures ( measures . clone ( ) )
170
162
. set_multiplied_measures (
171
163
self . full_key_aggregate_measures
172
164
. rendered_as_multiplied_measures
@@ -200,22 +192,22 @@ impl MultipliedMeasuresQueryPlanner {
200
192
201
193
fn check_should_build_join_for_measure_select (
202
194
& self ,
203
- measures : & Vec < Rc < BaseMeasure > > ,
195
+ measures : & Vec < Rc < MemberSymbol > > ,
204
196
key_cube_name : & String ,
205
197
) -> Result < bool , CubeError > {
206
198
for measure in measures. iter ( ) {
207
199
let member_expression_over_dimensions_cubes =
208
- if let Ok ( member_expression) = measure. member_evaluator ( ) . as_member_expression ( ) {
200
+ if let Ok ( member_expression) = measure. as_member_expression ( ) {
209
201
member_expression. cube_names_if_dimension_only_expression ( ) ?
210
202
} else {
211
203
None
212
204
} ;
213
205
let cubes = if let Some ( cubes) = member_expression_over_dimensions_cubes {
214
206
cubes
215
207
} else {
216
- collect_cube_names ( measure. member_evaluator ( ) ) ?
208
+ collect_cube_names ( & measure) ?
217
209
} ;
218
- let join_hints = collect_join_hints ( measure. member_evaluator ( ) ) ?;
210
+ let join_hints = collect_join_hints ( & measure) ?;
219
211
if cubes. iter ( ) . any ( |cube| cube != key_cube_name) {
220
212
let measures_join = self . query_tools . join_graph ( ) . build_join ( join_hints) ?;
221
213
if * measures_join
@@ -235,11 +227,11 @@ impl MultipliedMeasuresQueryPlanner {
235
227
fn aggregate_subquery_measure (
236
228
& self ,
237
229
key_join : Rc < dyn JoinDefinition > ,
238
- measures : & Vec < Rc < BaseMeasure > > ,
239
- primary_keys_dimensions : & Vec < Rc < dyn BaseMember > > ,
230
+ measures : & Vec < Rc < MemberSymbol > > ,
231
+ primary_keys_dimensions : & Vec < Rc < MemberSymbol > > ,
240
232
) -> Result < Rc < MeasureSubquery > , CubeError > {
241
233
let subquery_dimensions = collect_sub_query_dimensions_from_members (
242
- & BaseMemberHelper :: iter_as_base_member ( measures) . collect_vec ( ) ,
234
+ & measures,
243
235
& self . join_planner ,
244
236
& key_join,
245
237
self . query_tools . clone ( ) ,
@@ -251,24 +243,14 @@ impl MultipliedMeasuresQueryPlanner {
251
243
) ?;
252
244
let subquery_dimension_queries =
253
245
dimension_subquery_planner. plan_queries ( & subquery_dimensions) ?;
254
- let join_hints = collect_join_hints_for_measures ( measures) ?;
246
+ let join_hints = collect_join_hints_for_measures ( & measures) ?;
255
247
let source = self
256
248
. join_planner
257
249
. make_join_logical_plan_with_join_hints ( join_hints, subquery_dimension_queries) ?;
258
250
259
251
let schema = LogicalSchema :: default ( )
260
- . set_dimensions (
261
- primary_keys_dimensions
262
- . iter ( )
263
- . map ( |dim| dim. member_evaluator ( ) . clone ( ) )
264
- . collect ( ) ,
265
- )
266
- . set_measures (
267
- measures
268
- . iter ( )
269
- . map ( |meas| meas. member_evaluator ( ) . clone ( ) )
270
- . collect ( ) ,
271
- )
252
+ . set_dimensions ( primary_keys_dimensions. clone ( ) )
253
+ . set_measures ( measures. clone ( ) )
272
254
. into_rc ( ) ;
273
255
274
256
let result = MeasureSubquery { schema, source } ;
@@ -277,16 +259,12 @@ impl MultipliedMeasuresQueryPlanner {
277
259
278
260
fn regular_measures_subquery (
279
261
& self ,
280
- measures : & Vec < Rc < BaseMeasure > > ,
262
+ measures : & Vec < Rc < MemberSymbol > > ,
281
263
join : Rc < dyn JoinDefinition > ,
282
264
) -> Result < Rc < Query > , CubeError > {
283
- let measures_symbols = measures
284
- . iter ( )
285
- . map ( |m| m. member_evaluator ( ) . clone ( ) )
286
- . collect ( ) ;
287
- let all_symbols =
288
- self . query_properties
289
- . get_member_symbols ( true , true , false , true , & measures_symbols) ;
265
+ let all_symbols = self
266
+ . query_properties
267
+ . get_member_symbols ( true , true , false , true , & measures) ;
290
268
291
269
let subquery_dimensions = collect_sub_query_dimensions_from_symbols (
292
270
& all_symbols,
@@ -310,7 +288,7 @@ impl MultipliedMeasuresQueryPlanner {
310
288
let schema = LogicalSchema :: default ( )
311
289
. set_dimensions ( self . query_properties . dimension_symbols ( ) )
312
290
. set_time_dimensions ( self . query_properties . time_dimension_symbols ( ) )
313
- . set_measures ( measures_symbols )
291
+ . set_measures ( measures . clone ( ) )
314
292
. set_multiplied_measures (
315
293
self . full_key_aggregate_measures
316
294
. rendered_as_multiplied_measures
@@ -342,18 +320,13 @@ impl MultipliedMeasuresQueryPlanner {
342
320
343
321
fn key_query (
344
322
& self ,
345
- dimensions : & Vec < Rc < dyn BaseMember > > ,
323
+ dimensions : & Vec < Rc < MemberSymbol > > ,
346
324
key_join : Rc < dyn JoinDefinition > ,
347
325
key_cube_name : & String ,
348
326
) -> Result < Rc < KeysSubQuery > , CubeError > {
349
- let dimensions_symbols = dimensions
350
- . iter ( )
351
- . map ( |d| d. member_evaluator ( ) . clone ( ) )
352
- . collect ( ) ;
353
-
354
327
let all_symbols =
355
328
self . query_properties
356
- . get_member_symbols ( true , true , false , true , & dimensions_symbols ) ;
329
+ . get_member_symbols ( true , true , false , true , & dimensions ) ;
357
330
358
331
let subquery_dimensions = collect_sub_query_dimensions_from_symbols (
359
332
& all_symbols,
@@ -388,7 +361,7 @@ impl MultipliedMeasuresQueryPlanner {
388
361
389
362
let keys_query = KeysSubQuery {
390
363
schema,
391
- primary_keys_dimensions : dimensions_symbols ,
364
+ primary_keys_dimensions : dimensions . clone ( ) ,
392
365
filter : logical_filter,
393
366
source,
394
367
//dimension_subqueries: subquery_dimension_queries,
0 commit comments