@@ -3,14 +3,14 @@ use crate::{
33 compile:: rewrite:: {
44 alias_expr,
55 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,
1414 rewriter:: { CubeEGraph , CubeRewrite , RewriteRules } ,
1515 scalar_fun_expr_args_empty_tail, segment_member, time_dimension_date_range_replacer,
1616 time_dimension_expr, transform_original_expr_to_alias, transforming_chain_rewrite,
@@ -2461,6 +2461,67 @@ impl RewriteRules for FilterRules {
24612461 ) ,
24622462 self . transform_not_column_equals_date( "?literal" , "?one_day" ) ,
24632463 ) ,
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+ ) ,
24642525 rewrite(
24652526 "in-date-range-to-time-dimension-pull-up-left" ,
24662527 cube_scan_filters(
0 commit comments