@@ -492,7 +492,32 @@ fn test_sql(sql: &str) -> Result<LogicalPlan> {
492492 . with_expr_planners ( vec ! [
493493 Arc :: new( AggregateFunctionPlanner ) ,
494494 Arc :: new( WindowFunctionPlanner ) ,
495- ] ) ;
495+ ] )
496+ . with_schema (
497+ "test" ,
498+ Schema :: new_with_metadata (
499+ vec ! [
500+ Field :: new( "col_int32" , DataType :: Int32 , true ) ,
501+ Field :: new( "col_uint32" , DataType :: UInt32 , true ) ,
502+ Field :: new( "col_utf8" , DataType :: Utf8 , true ) ,
503+ Field :: new( "col_date32" , DataType :: Date32 , true ) ,
504+ Field :: new( "col_date64" , DataType :: Date64 , true ) ,
505+ // timestamp with no timezone
506+ Field :: new(
507+ "col_ts_nano_none" ,
508+ DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
509+ true ,
510+ ) ,
511+ // timestamp with UTC timezone
512+ Field :: new(
513+ "col_ts_nano_utc" ,
514+ DataType :: Timestamp ( TimeUnit :: Nanosecond , Some ( "+00:00" . into( ) ) ) ,
515+ true ,
516+ ) ,
517+ ] ,
518+ HashMap :: new ( ) ,
519+ ) ,
520+ ) ;
496521
497522 let sql_to_rel = SqlToRel :: new ( & context_provider) ;
498523 let plan = sql_to_rel. sql_statement_to_plan ( statement. clone ( ) ) ?;
@@ -510,6 +535,7 @@ fn observe(_plan: &LogicalPlan, _rule: &dyn OptimizerRule) {}
510535#[ derive( Default ) ]
511536struct MyContextProvider {
512537 options : ConfigOptions ,
538+ tables : HashMap < String , Arc < dyn TableSource > > ,
513539 udafs : HashMap < String , Arc < AggregateUDF > > ,
514540 expr_planners : Vec < Arc < dyn ExprPlanner > > ,
515541}
@@ -525,38 +551,23 @@ impl MyContextProvider {
525551 self . expr_planners = expr_planners;
526552 self
527553 }
554+
555+ fn with_schema ( mut self , name : impl Into < String > , schema : Schema ) -> Self {
556+ self . tables . insert (
557+ name. into ( ) ,
558+ Arc :: new ( MyTableSource {
559+ schema : Arc :: new ( schema) ,
560+ } ) ,
561+ ) ;
562+ self
563+ }
528564}
529565
530566impl ContextProvider for MyContextProvider {
531567 fn get_table_source ( & self , name : TableReference ) -> Result < Arc < dyn TableSource > > {
532568 let table_name = name. table ( ) ;
533- if table_name. starts_with ( "test" ) {
534- let schema = Schema :: new_with_metadata (
535- vec ! [
536- Field :: new( "col_int32" , DataType :: Int32 , true ) ,
537- Field :: new( "col_uint32" , DataType :: UInt32 , true ) ,
538- Field :: new( "col_utf8" , DataType :: Utf8 , true ) ,
539- Field :: new( "col_date32" , DataType :: Date32 , true ) ,
540- Field :: new( "col_date64" , DataType :: Date64 , true ) ,
541- // timestamp with no timezone
542- Field :: new(
543- "col_ts_nano_none" ,
544- DataType :: Timestamp ( TimeUnit :: Nanosecond , None ) ,
545- true ,
546- ) ,
547- // timestamp with UTC timezone
548- Field :: new(
549- "col_ts_nano_utc" ,
550- DataType :: Timestamp ( TimeUnit :: Nanosecond , Some ( "+00:00" . into( ) ) ) ,
551- true ,
552- ) ,
553- ] ,
554- HashMap :: new ( ) ,
555- ) ;
556-
557- Ok ( Arc :: new ( MyTableSource {
558- schema : Arc :: new ( schema) ,
559- } ) )
569+ if let Some ( table) = self . tables . get ( table_name) {
570+ Ok ( table. clone ( ) )
560571 } else {
561572 plan_err ! ( "table does not exist" )
562573 }
0 commit comments