@@ -15,13 +15,33 @@ use super::extension_planner::FusedArrayTransformPlanner;
1515
1616/// A custom QueryPlanner that uses a physical planner configured with
1717/// the FusedArrayTransformPlanner extension for handling FusedArrayTransform nodes.
18- #[ derive( Debug , Default ) ]
19- pub struct VcfQueryPlanner ;
18+ ///
19+ /// The physical planner is initialized once and reused for all queries,
20+ /// avoiding repeated allocations since both DefaultPhysicalPlanner and
21+ /// FusedArrayTransformPlanner are stateless.
22+ pub struct VcfQueryPlanner {
23+ physical_planner : DefaultPhysicalPlanner ,
24+ }
25+
26+ impl std:: fmt:: Debug for VcfQueryPlanner {
27+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
28+ f. debug_struct ( "VcfQueryPlanner" ) . finish ( )
29+ }
30+ }
31+
32+ impl Default for VcfQueryPlanner {
33+ fn default ( ) -> Self {
34+ Self :: new ( )
35+ }
36+ }
2037
2138impl VcfQueryPlanner {
22- /// Create a new VcfQueryPlanner.
39+ /// Create a new VcfQueryPlanner with a pre-configured physical planner .
2340 pub fn new ( ) -> Self {
24- Self
41+ let physical_planner = DefaultPhysicalPlanner :: with_extension_planners ( vec ! [ Arc :: new(
42+ FusedArrayTransformPlanner :: new( ) ,
43+ ) ] ) ;
44+ Self { physical_planner }
2545 }
2646}
2747
@@ -32,15 +52,10 @@ impl QueryPlanner for VcfQueryPlanner {
3252 logical_plan : & LogicalPlan ,
3353 session_state : & SessionState ,
3454 ) -> datafusion:: common:: Result < Arc < dyn ExecutionPlan > > {
35- // Create a physical planner with our extension planner for FusedArrayTransform
36- let physical_planner = DefaultPhysicalPlanner :: with_extension_planners ( vec ! [ Arc :: new(
37- FusedArrayTransformPlanner :: new( ) ,
38- ) ] ) ;
39-
4055 let display_string = logical_plan. display ( ) ;
4156 info ! ( "VcfQueryPlanner: Creating physical plan for logical plan: {display_string}" ) ;
4257
43- physical_planner
58+ self . physical_planner
4459 . create_physical_plan ( logical_plan, session_state)
4560 . await
4661 }
0 commit comments