Skip to content

Commit b306928

Browse files
committed
vcftools: reuse DefaultPhysicalPlanner
1 parent b33a6ed commit b306928

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

datafusion/bio-function-vcftools/src/physical/query_planner.rs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2138
impl 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

Comments
 (0)