Skip to main content

FFI_QueryPlanner

Struct FFI_QueryPlanner 

Source
pub struct FFI_QueryPlanner {
    pub version: unsafe extern "C" fn() -> u64,
    pub library_marker_id: extern "C" fn() -> usize,
    /* private fields */
}
Expand description

An ABI-stable handle to a QueryPlanner owned by another library.

The Rust-facing adapters serialize the input LogicalPlan and resulting ExecutionPlan; callers do not invoke the byte-oriented function pointer directly.

Fields§

§version: unsafe extern "C" fn() -> u64

Return the major DataFusion version number of this planner.

§library_marker_id: extern "C" fn() -> usize

Utility to identify when FFI objects are accessed locally through the foreign interface. See crate::get_library_marker_id.

Implementations§

Source§

impl FFI_QueryPlanner

Source

pub fn new( planner: Arc<dyn QueryPlanner + Send + Sync>, runtime: Option<Handle>, task_ctx_provider: impl Into<FFI_TaskContextProvider>, logical_codec: Arc<dyn LogicalExtensionCodec>, physical_codec: Arc<dyn PhysicalExtensionCodec>, ) -> Self

Creates an FFI_QueryPlanner with native extension codecs.

Both codecs are required so that the caller states which extension nodes survive the boundary. Pass DefaultLogicalExtensionCodec and DefaultPhysicalExtensionCodec when no custom nodes are involved. runtime and task_ctx_provider support codec callbacks across the FFI boundary.

Source

pub fn new_with_ffi_codecs( planner: Arc<dyn QueryPlanner + Send + Sync>, logical_codec: FFI_LogicalExtensionCodec, physical_codec: FFI_PhysicalExtensionCodec, ) -> Self

Creates an FFI_QueryPlanner using prebuilt FFI extension codecs.

If planner is already foreign, this re-exports its original FFI handle rather than adding another wrapper layer. The handle still adopts the codecs supplied here, so they are never silently discarded.

Source

pub async fn create_physical_plan_with_session_runtime( &self, logical_plan: &LogicalPlan, session: &dyn Session, session_runtime: Option<Handle>, ) -> Result<Arc<dyn ExecutionPlan>>

Creates a physical plan through this planner’s FFI interface.

This serializes logical_plan, exports session as an FFI_SessionRef, invokes the planner’s owning library, and deserializes its physical-plan response. session_runtime is attached to the exported session for callbacks that need its Tokio runtime.

The QueryPlanner implementation for ForeignQueryPlanner cannot obtain the session owner’s runtime from the trait API, so it calls this method with None. Embedders that own the runtime and need session callbacks to enter it must call this method directly with Some(handle).

Trait Implementations§

Source§

impl Clone for FFI_QueryPlanner

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FFI_QueryPlanner

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for FFI_QueryPlanner

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl From<&FFI_QueryPlanner> for Arc<dyn QueryPlanner + Send + Sync>

Source§

fn from(planner: &FFI_QueryPlanner) -> Self

Converts to this type from the input type.
Source§

impl Send for FFI_QueryPlanner

Source§

impl Sync for FFI_QueryPlanner

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<Source> AccessAs for Source

Source§

fn ref_as<T>(&self) -> <Source as IGuardRef<T>>::Guard<'_>
where Source: IGuardRef<T>, T: ?Sized,

Provides immutable access to a type as if it were its ABI-unstable equivalent.
Source§

fn mut_as<T>(&mut self) -> <Source as IGuardMut<T>>::GuardMut<'_>
where Source: IGuardMut<T>, T: ?Sized,

Provides mutable access to a type as if it were its ABI-unstable equivalent.
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, As> IGuardMut<As> for T
where T: Into<As>, As: Into<T>,

Source§

type GuardMut<'a> = MutAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary after applying its changes to the original.
Source§

fn guard_mut_inner(&mut self) -> <T as IGuardMut<As>>::GuardMut<'_>

Construct the temporary and guard it through a mutable reference.
Source§

impl<T, As> IGuardRef<As> for T
where T: Into<As>, As: Into<T>,

Source§

type Guard<'a> = RefAs<'a, T, As> where T: 'a

The type of the guard which will clean up the temporary.
Source§

fn guard_ref_inner(&self) -> <T as IGuardRef<As>>::Guard<'_>

Construct the temporary and guard it through an immutable reference.
Source§

impl<T> Includes<End> for T

Source§

type Output = End

The result
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V