@@ -32,6 +32,7 @@ use datafusion_expr::{
3232 LogicalPlanBuilder , ScalarUDF , Volatility ,
3333} ;
3434use datafusion_functions:: math;
35+ use datafusion_optimizer:: optimizer:: Optimizer ;
3536use datafusion_optimizer:: simplify_expressions:: { ExprSimplifier , SimplifyExpressions } ;
3637use datafusion_optimizer:: { OptimizerContext , OptimizerRule } ;
3738use std:: sync:: Arc ;
@@ -109,14 +110,14 @@ fn test_table_scan() -> LogicalPlan {
109110 . expect ( "building plan" )
110111}
111112
112- fn get_optimized_plan_formatted ( plan : & LogicalPlan , date_time : & DateTime < Utc > ) -> String {
113+ fn get_optimized_plan_formatted ( plan : LogicalPlan , date_time : & DateTime < Utc > ) -> String {
113114 let config = OptimizerContext :: new ( ) . with_query_execution_start_time ( * date_time) ;
114- let rule = SimplifyExpressions :: new ( ) ;
115115
116- let optimized_plan = rule
117- . try_optimize ( plan, & config)
118- . unwrap ( )
119- . expect ( "failed to optimize plan" ) ;
116+ // Use Optimizer to do plan traversal
117+ fn observe ( _plan : & LogicalPlan , _rule : & dyn OptimizerRule ) { }
118+ let optimizer = Optimizer :: with_rules ( vec ! [ Arc :: new( SimplifyExpressions :: new( ) ) ] ) ;
119+ let optimized_plan = optimizer. optimize ( plan, & config, observe) . unwrap ( ) ;
120+
120121 format ! ( "{optimized_plan:?}" )
121122}
122123
@@ -238,7 +239,7 @@ fn to_timestamp_expr_folded() -> Result<()> {
238239 let expected = "Projection: TimestampNanosecond(1599566400000000000, None) AS to_timestamp(Utf8(\" 2020-09-08T12:00:00+00:00\" ))\
239240 \n TableScan: test"
240241 . to_string ( ) ;
241- let actual = get_optimized_plan_formatted ( & plan, & Utc :: now ( ) ) ;
242+ let actual = get_optimized_plan_formatted ( plan, & Utc :: now ( ) ) ;
242243 assert_eq ! ( expected, actual) ;
243244 Ok ( ( ) )
244245}
@@ -262,7 +263,7 @@ fn now_less_than_timestamp() -> Result<()> {
262263 // expression down to a single constant (true)
263264 let expected = "Filter: Boolean(true)\
264265 \n TableScan: test";
265- let actual = get_optimized_plan_formatted ( & plan, & time) ;
266+ let actual = get_optimized_plan_formatted ( plan, & time) ;
266267
267268 assert_eq ! ( expected, actual) ;
268269 Ok ( ( ) )
@@ -290,7 +291,7 @@ fn select_date_plus_interval() -> Result<()> {
290291 // expression down to a single constant (true)
291292 let expected = r#"Projection: Date32("18636") AS to_timestamp(Utf8("2020-09-08T12:05:00+00:00")) + IntervalDayTime("528280977408")
292293 TableScan: test"# ;
293- let actual = get_optimized_plan_formatted ( & plan, & time) ;
294+ let actual = get_optimized_plan_formatted ( plan, & time) ;
294295
295296 assert_eq ! ( expected, actual) ;
296297 Ok ( ( ) )
@@ -308,7 +309,7 @@ fn simplify_project_scalar_fn() -> Result<()> {
308309 // after simplify: t.f as "power(t.f, 1.0)"
309310 let expected = "Projection: test.f AS power(test.f,Float64(1))\
310311 \n TableScan: test";
311- let actual = get_optimized_plan_formatted ( & plan, & Utc :: now ( ) ) ;
312+ let actual = get_optimized_plan_formatted ( plan, & Utc :: now ( ) ) ;
312313 assert_eq ! ( expected, actual) ;
313314 Ok ( ( ) )
314315}
@@ -330,7 +331,7 @@ fn simplify_scan_predicate() -> Result<()> {
330331 // before simplify: t.g = power(t.f, 1.0)
331332 // after simplify: (t.g = t.f) as "t.g = power(t.f, 1.0)"
332333 let expected = "TableScan: test, full_filters=[g = f AS g = power(f,Float64(1))]" ;
333- let actual = get_optimized_plan_formatted ( & plan, & Utc :: now ( ) ) ;
334+ let actual = get_optimized_plan_formatted ( plan, & Utc :: now ( ) ) ;
334335 assert_eq ! ( expected, actual) ;
335336 Ok ( ( ) )
336337}
@@ -461,7 +462,7 @@ fn multiple_now() -> Result<()> {
461462 . build ( ) ?;
462463
463464 // expect the same timestamp appears in both exprs
464- let actual = get_optimized_plan_formatted ( & plan, & time) ;
465+ let actual = get_optimized_plan_formatted ( plan, & time) ;
465466 let expected = format ! (
466467 "Projection: TimestampNanosecond({}, Some(\" +00:00\" )) AS now(), TimestampNanosecond({}, Some(\" +00:00\" )) AS t2\
467468 \n TableScan: test",
0 commit comments