Skip to content

Commit a35f6f1

Browse files
timsaucerclaude
andcommitted
refactor: import physical optimizer rule via from_pycapsule! macro
Replace the hand-written crates/core/src/physical_optimizer.rs with a `from_pycapsule!` invocation in the util crate, matching `physical_codec_from_pycapsule` and the other FFI capsule importers. The macro already handles the hasattr/getattr/cast/validate/pointer_checked sequence and the infallible `Arc::from(&FFI)` conversion, so the dedicated module is no longer needed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 734a813 commit a35f6f1

4 files changed

Lines changed: 12 additions & 56 deletions

File tree

crates/core/src/context.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ use datafusion_proto::physical_plan::PhysicalExtensionCodec;
5959
use datafusion_python_util::{
6060
create_logical_extension_capsule, create_physical_extension_capsule,
6161
ffi_logical_codec_from_pycapsule, get_global_ctx, get_tokio_runtime,
62-
physical_codec_from_pycapsule, spawn_future, wait_for_future,
62+
physical_codec_from_pycapsule, physical_optimizer_rule_from_pycapsule, spawn_future,
63+
wait_for_future,
6364
};
6465
use object_store::ObjectStore;
6566
use pyo3::IntoPyObjectExt;
@@ -398,7 +399,7 @@ impl PySessionContext {
398399
.with_runtime_env(runtime)
399400
.with_default_features();
400401
for rule in physical_optimizer_rules.unwrap_or_default() {
401-
let rule = crate::physical_optimizer::physical_optimizer_rule_from_pyobject(&rule)?;
402+
let rule = physical_optimizer_rule_from_pycapsule(&rule)?;
402403
state_builder = state_builder.with_physical_optimizer_rule(rule);
403404
}
404405
let session_state = state_builder.build();

crates/core/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ pub mod expr;
4646
mod functions;
4747
pub mod metrics;
4848
mod options;
49-
pub mod physical_optimizer;
5049
pub mod physical_plan;
5150
mod pyarrow_filter_expression;
5251
pub mod pyarrow_util;

crates/core/src/physical_optimizer.rs

Lines changed: 0 additions & 53 deletions
This file was deleted.

crates/util/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ use datafusion::datasource::TableProvider;
2424
use datafusion::execution::TaskContext;
2525
use datafusion::execution::context::SessionContext;
2626
use datafusion::logical_expr::Volatility;
27+
use datafusion::physical_optimizer::PhysicalOptimizerRule;
2728
use datafusion_ffi::execution::FFI_TaskContextProvider;
29+
use datafusion_ffi::physical_optimizer::FFI_PhysicalOptimizerRule;
2830
use datafusion_ffi::proto::logical_extension_codec::FFI_LogicalExtensionCodec;
2931
use datafusion_ffi::proto::physical_extension_codec::FFI_PhysicalExtensionCodec;
3032
use datafusion_ffi::table_provider::FFI_TableProvider;
@@ -332,6 +334,13 @@ from_pycapsule!(
332334
dyn PhysicalExtensionCodec
333335
);
334336

337+
from_pycapsule!(
338+
physical_optimizer_rule_from_pycapsule,
339+
"datafusion_physical_optimizer_rule",
340+
FFI_PhysicalOptimizerRule,
341+
dyn PhysicalOptimizerRule + Send + Sync
342+
);
343+
335344
try_from_pycapsule!(
336345
task_context_from_pycapsule,
337346
"datafusion_task_context_provider",

0 commit comments

Comments
 (0)