@@ -3,14 +3,14 @@ use crate::{
3
3
compile:: rewrite:: {
4
4
alias_expr,
5
5
analysis:: { ConstantFolding , Member , OriginalExpr } ,
6
- between_expr, binary_expr, case_expr, case_expr_var_arg, cast_expr, change_user_member ,
7
- column_expr, cube_scan, cube_scan_filters, cube_scan_filters_empty_tail , cube_scan_members ,
8
- dimension_expr , expr_column_name , filter , filter_member , filter_op , filter_op_filters ,
9
- filter_op_filters_empty_tail , filter_replacer , filter_simplify_pull_up_replacer ,
10
- filter_simplify_push_down_replacer , fun_expr , fun_expr_args_legacy , fun_expr_var_arg ,
11
- inlist_expr , inlist_expr_list , is_not_null_expr , is_null_expr , like_expr , limit ,
12
- list_rewrite , literal_bool , literal_expr , literal_int , literal_string , measure_expr ,
13
- negative_expr, not_expr, projection, rewrite,
6
+ between_expr, binary_expr, case_expr, case_expr_var_arg, cast_expr, cast_expr_explicit ,
7
+ change_user_member , column_expr, cube_scan, cube_scan_filters,
8
+ cube_scan_filters_empty_tail , cube_scan_members , dimension_expr , expr_column_name , filter ,
9
+ filter_member , filter_op , filter_op_filters , filter_op_filters_empty_tail , filter_replacer ,
10
+ filter_simplify_pull_up_replacer , filter_simplify_push_down_replacer , fun_expr ,
11
+ fun_expr_args_legacy , fun_expr_var_arg , inlist_expr , inlist_expr_list , is_not_null_expr ,
12
+ is_null_expr , like_expr , limit , list_rewrite , literal_bool , literal_expr , literal_int ,
13
+ literal_null , literal_string , measure_expr , negative_expr, not_expr, projection, rewrite,
14
14
rewriter:: { CubeEGraph , CubeRewrite , RewriteRules } ,
15
15
scalar_fun_expr_args_empty_tail, segment_member, time_dimension_date_range_replacer,
16
16
time_dimension_expr, transform_original_expr_to_alias, transforming_chain_rewrite,
@@ -2461,6 +2461,67 @@ impl RewriteRules for FilterRules {
2461
2461
) ,
2462
2462
self . transform_not_column_equals_date( "?literal" , "?one_day" ) ,
2463
2463
) ,
2464
+ rewrite(
2465
+ "filter-tableau-case-when-not-null" ,
2466
+ filter_replacer(
2467
+ binary_expr(
2468
+ case_expr(
2469
+ None ,
2470
+ vec![ (
2471
+ not_expr( is_null_expr( "?left_expr" ) ) ,
2472
+ "?left_expr" . to_string( ) ,
2473
+ ) ] ,
2474
+ Some ( literal_null( ) ) ,
2475
+ ) ,
2476
+ "?op" ,
2477
+ "?right_expr" ,
2478
+ ) ,
2479
+ "?alias_to_cube" ,
2480
+ "?members" ,
2481
+ "?filter_aliases" ,
2482
+ ) ,
2483
+ filter_replacer(
2484
+ binary_expr( "?left_expr" , "?op" , "?right_expr" ) ,
2485
+ "?alias_to_cube" ,
2486
+ "?members" ,
2487
+ "?filter_aliases" ,
2488
+ ) ,
2489
+ ) ,
2490
+ rewrite(
2491
+ "filter-tableau-cast-text-to-timestamp-to-date" ,
2492
+ filter_replacer(
2493
+ binary_expr(
2494
+ cast_expr_explicit(
2495
+ udf_expr(
2496
+ "str_to_date" ,
2497
+ vec![
2498
+ column_expr( "?column" ) ,
2499
+ literal_string( "YYYY-MM-DD\" T\" HH24:MI:SS.MS" ) ,
2500
+ ] ,
2501
+ ) ,
2502
+ DataType :: Date32 ,
2503
+ ) ,
2504
+ "?op" ,
2505
+ "?right_expr" ,
2506
+ ) ,
2507
+ "?alias_to_cube" ,
2508
+ "?members" ,
2509
+ "?filter_aliases" ,
2510
+ ) ,
2511
+ filter_replacer(
2512
+ binary_expr(
2513
+ self . fun_expr(
2514
+ "DateTrunc" ,
2515
+ vec![ literal_string( "day" ) , column_expr( "?column" ) ] ,
2516
+ ) ,
2517
+ "?op" ,
2518
+ "?right_expr" ,
2519
+ ) ,
2520
+ "?alias_to_cube" ,
2521
+ "?members" ,
2522
+ "?filter_aliases" ,
2523
+ ) ,
2524
+ ) ,
2464
2525
rewrite(
2465
2526
"in-date-range-to-time-dimension-pull-up-left" ,
2466
2527
cube_scan_filters(
0 commit comments