@@ -1630,7 +1630,7 @@ impl QueryPlanner {
1630
1630
schema
1631
1631
. fields ( )
1632
1632
. iter ( )
1633
- . map ( |f| f. name ( ) . to_string ( ) )
1633
+ . map ( |f| Some ( f. name ( ) . to_string ( ) ) )
1634
1634
. collect ( ) ,
1635
1635
query. request ,
1636
1636
// @todo Remove after split!
@@ -3597,7 +3597,13 @@ mod tests {
3597
3597
order: None ,
3598
3598
limit: None ,
3599
3599
offset: None ,
3600
- filters: None ,
3600
+ filters: Some ( vec![ V1LoadRequestQueryFilterItem {
3601
+ member: Some ( "KibanaSampleDataEcommerce.count" . to_string( ) ) ,
3602
+ operator: Some ( "gt" . to_string( ) ) ,
3603
+ values: Some ( vec![ "0" . to_string( ) ] ) ,
3604
+ or: None ,
3605
+ and: None ,
3606
+ } ] ) ,
3601
3607
}
3602
3608
) ;
3603
3609
@@ -3617,13 +3623,22 @@ mod tests {
3617
3623
order: None ,
3618
3624
limit: None ,
3619
3625
offset: None ,
3620
- filters: Some ( vec![ V1LoadRequestQueryFilterItem {
3621
- member: Some ( "KibanaSampleDataEcommerce.has_subscription" . to_string( ) ) ,
3622
- operator: Some ( "equals" . to_string( ) ) ,
3623
- values: Some ( vec![ "false" . to_string( ) ] ) ,
3624
- or: None ,
3625
- and: None ,
3626
- } ] ) ,
3626
+ filters: Some ( vec![
3627
+ V1LoadRequestQueryFilterItem {
3628
+ member: Some ( "KibanaSampleDataEcommerce.has_subscription" . to_string( ) ) ,
3629
+ operator: Some ( "equals" . to_string( ) ) ,
3630
+ values: Some ( vec![ "false" . to_string( ) ] ) ,
3631
+ or: None ,
3632
+ and: None ,
3633
+ } ,
3634
+ V1LoadRequestQueryFilterItem {
3635
+ member: Some ( "KibanaSampleDataEcommerce.count" . to_string( ) ) ,
3636
+ operator: Some ( "gt" . to_string( ) ) ,
3637
+ values: Some ( vec![ "0" . to_string( ) ] ) ,
3638
+ or: None ,
3639
+ and: None ,
3640
+ }
3641
+ ] ) ,
3627
3642
}
3628
3643
) ;
3629
3644
}
@@ -3884,7 +3899,13 @@ ORDER BY \"COUNT(count)\" DESC"
3884
3899
order: None ,
3885
3900
limit: None ,
3886
3901
offset: None ,
3887
- filters: None ,
3902
+ filters: Some ( vec![ V1LoadRequestQueryFilterItem {
3903
+ member: Some ( "KibanaSampleDataEcommerce.count" . to_string( ) ) ,
3904
+ operator: Some ( "gt" . to_string( ) ) ,
3905
+ values: Some ( vec![ "0" . to_string( ) ] ) ,
3906
+ or: None ,
3907
+ and: None ,
3908
+ } ] ) ,
3888
3909
}
3889
3910
) ;
3890
3911
@@ -3895,17 +3916,11 @@ ORDER BY \"COUNT(count)\" DESC"
3895
3916
. iter( )
3896
3917
. map( |f| f. name( ) . to_string( ) )
3897
3918
. collect:: <Vec <_>>( ) ,
3898
- vec![
3899
- "SUM(KibanaSampleDataEcommerce.count)" . to_string( ) ,
3900
- "COUNT(UInt8(1))" . to_string( )
3901
- ]
3919
+ vec![ "sum:count:ok" . to_string( ) , ]
3902
3920
) ;
3903
3921
assert_eq ! (
3904
3922
& cube_scan. member_fields,
3905
- & vec![
3906
- "KibanaSampleDataEcommerce.count" . to_string( ) ,
3907
- "KibanaSampleDataEcommerce.count" . to_string( )
3908
- ]
3923
+ & vec![ Some ( "KibanaSampleDataEcommerce.count" . to_string( ) ) ]
3909
3924
) ;
3910
3925
}
3911
3926
@@ -4113,7 +4128,7 @@ ORDER BY \"COUNT(count)\" DESC"
4113
4128
4114
4129
let query_plan = convert_select_to_query_plan (
4115
4130
"select \" rows\" .\" customer_gender\" as \" customer_gender\" ,
4116
- \n count(1 ) as \" a0\" \
4131
+ \n sum( \" rows \" . \" count \" ) as \" a0\" \
4117
4132
\n from\
4118
4133
\n (\
4119
4134
\n select \" _\" .\" count\" ,\
@@ -4140,7 +4155,7 @@ ORDER BY \"COUNT(count)\" DESC"
4140
4155
segments: Some ( vec![ ] ) ,
4141
4156
time_dimensions: None ,
4142
4157
order: None ,
4143
- limit: Some ( 1000001 ) ,
4158
+ limit: Some ( 50000 ) ,
4144
4159
offset: None ,
4145
4160
filters: Some ( vec![ V1LoadRequestQueryFilterItem {
4146
4161
member: Some ( "KibanaSampleDataEcommerce.customer_gender" . to_string( ) ) ,
@@ -4153,6 +4168,108 @@ ORDER BY \"COUNT(count)\" DESC"
4153
4168
) ;
4154
4169
}
4155
4170
4171
+ #[ test]
4172
+ fn powerbi_inner_wrapped_dates ( ) {
4173
+ init_logger ( ) ;
4174
+
4175
+ let query_plan = convert_select_to_query_plan (
4176
+ "select \" _\" .\" created_at_day\" ,\
4177
+ \n \" _\" .\" a0\" \
4178
+ \n from \
4179
+ \n (\
4180
+ \n select \" rows\" .\" created_at_day\" as \" created_at_day\" ,\
4181
+ \n sum(\" rows\" .\" cnt\" ) as \" a0\" \
4182
+ \n from \
4183
+ \n (\
4184
+ \n select count(*) cnt,date_trunc('day', order_date) as created_at_day, date_trunc('month', order_date) as created_at_month from public.KibanaSampleDataEcommerce group by 2, 3\
4185
+ \n ) \" rows\" \
4186
+ \n group by \" created_at_day\" \
4187
+ \n ) \" _\" \
4188
+ \n where not \" _\" .\" a0\" is null\
4189
+ \n limit 1000001"
4190
+ . to_string ( ) ,
4191
+ DatabaseProtocol :: PostgreSQL ,
4192
+ ) ;
4193
+
4194
+ let logical_plan = query_plan. as_logical_plan ( ) ;
4195
+ assert_eq ! (
4196
+ logical_plan. find_cube_scan( ) . request,
4197
+ V1LoadRequestQuery {
4198
+ measures: Some ( vec![ "KibanaSampleDataEcommerce.count" . to_string( ) ] ) ,
4199
+ dimensions: Some ( vec![ ] ) ,
4200
+ segments: Some ( vec![ ] ) ,
4201
+ time_dimensions: Some ( vec![ V1LoadRequestQueryTimeDimension {
4202
+ dimension: "KibanaSampleDataEcommerce.order_date" . to_string( ) ,
4203
+ granularity: Some ( "day" . to_string( ) ) ,
4204
+ date_range: None ,
4205
+ } ] ) ,
4206
+ order: None ,
4207
+ limit: Some ( 50000 ) ,
4208
+ offset: None ,
4209
+ filters: Some ( vec![ V1LoadRequestQueryFilterItem {
4210
+ member: Some ( "KibanaSampleDataEcommerce.count" . to_string( ) ) ,
4211
+ operator: Some ( "set" . to_string( ) ) ,
4212
+ values: None ,
4213
+ or: None ,
4214
+ and: None ,
4215
+ } ] ) ,
4216
+ }
4217
+ ) ;
4218
+ }
4219
+
4220
+ #[ test]
4221
+ fn powerbi_inner_wrapped_asterisk ( ) {
4222
+ init_logger ( ) ;
4223
+
4224
+ let query_plan = convert_select_to_query_plan (
4225
+ "select \" rows\" .\" customer_gender\" as \" customer_gender\" ,\
4226
+ \n \" rows\" .\" created_at_month\" as \" created_at_month\" \
4227
+ \n from \
4228
+ \n (\
4229
+ \n select \" _\" .\" count\" ,\
4230
+ \n \" _\" .\" minPrice\" ,\
4231
+ \n \" _\" .\" maxPrice\" ,\
4232
+ \n \" _\" .\" avgPrice\" ,\
4233
+ \n \" _\" .\" order_date\" ,\
4234
+ \n \" _\" .\" customer_gender\" ,\
4235
+ \n \" _\" .\" created_at_day\" ,\
4236
+ \n \" _\" .\" created_at_month\" \
4237
+ \n from \
4238
+ \n (\
4239
+ \n select *, date_trunc('day', order_date) created_at_day, date_trunc('month', order_date) created_at_month from public.KibanaSampleDataEcommerce\
4240
+ \n ) \" _\" \
4241
+ \n where \" _\" .\" created_at_month\" < timestamp '2022-06-13 00:00:00' and \" _\" .\" created_at_month\" >= timestamp '2021-12-16 00:00:00'\
4242
+ \n ) \" rows\" \
4243
+ \n group by \" customer_gender\" ,\
4244
+ \n \" created_at_month\" \
4245
+ \n limit 1000001"
4246
+ . to_string ( ) ,
4247
+ DatabaseProtocol :: PostgreSQL ,
4248
+ ) ;
4249
+
4250
+ let logical_plan = query_plan. as_logical_plan ( ) ;
4251
+ assert_eq ! (
4252
+ logical_plan. find_cube_scan( ) . request,
4253
+ V1LoadRequestQuery {
4254
+ measures: Some ( vec![ ] ) ,
4255
+ dimensions: Some ( vec![ "KibanaSampleDataEcommerce.customer_gender" . to_string( ) ] ) ,
4256
+ segments: Some ( vec![ ] ) ,
4257
+ time_dimensions: Some ( vec![ V1LoadRequestQueryTimeDimension {
4258
+ dimension: "KibanaSampleDataEcommerce.order_date" . to_string( ) ,
4259
+ granularity: Some ( "month" . to_string( ) ) ,
4260
+ date_range: Some ( json!( vec![
4261
+ "2021-12-16 00:00:00" . to_string( ) ,
4262
+ "2022-06-13 00:00:00" . to_string( )
4263
+ ] ) ) ,
4264
+ } ] ) ,
4265
+ order: None ,
4266
+ limit: Some ( 50000 ) ,
4267
+ offset: None ,
4268
+ filters: None ,
4269
+ }
4270
+ ) ;
4271
+ }
4272
+
4156
4273
#[ test]
4157
4274
fn test_select_aggregations ( ) {
4158
4275
let variants = vec ! [
@@ -4304,10 +4421,10 @@ ORDER BY \"COUNT(count)\" DESC"
4304
4421
// "SELECT is_male FROM KibanaSampleDataEcommerce".to_string(),
4305
4422
// CompilationError::User("Unable to use segment 'is_male' as column in SELECT statement".to_string()),
4306
4423
// ),
4307
- (
4308
- "SELECT COUNT(*) FROM KibanaSampleDataEcommerce GROUP BY is_male" . to_string( ) ,
4309
- CompilationError :: User ( "Unable to use segment 'is_male' in GROUP BY" . to_string( ) ) ,
4310
- ) ,
4424
+ // (
4425
+ // "SELECT COUNT(*) FROM KibanaSampleDataEcommerce GROUP BY is_male".to_string(),
4426
+ // CompilationError::User("Unable to use segment 'is_male' in GROUP BY".to_string()),
4427
+ // ),
4311
4428
// (
4312
4429
// "SELECT COUNT(*) FROM KibanaSampleDataEcommerce ORDER BY is_male DESC".to_string(),
4313
4430
// CompilationError::User("Unable to use segment 'is_male' in ORDER BY".to_string()),
@@ -4617,7 +4734,6 @@ ORDER BY \"COUNT(count)\" DESC"
4617
4734
""
4618
4735
}
4619
4736
) ;
4620
- println ! ( "Query: {}" , query) ;
4621
4737
let logical_plan =
4622
4738
convert_select_to_query_plan ( query, DatabaseProtocol :: MySQL ) . as_logical_plan ( ) ;
4623
4739
0 commit comments