Skip to main content

GraphExecutionContext

Struct GraphExecutionContext 

Source
pub struct GraphExecutionContext { /* private fields */ }
Expand description

Shared context for graph operators.

Provides access to graph-specific resources needed during query execution:

  • CSR adjacency cache for fast neighbor lookups
  • L0 buffers for MVCC visibility of uncommitted changes
  • Property manager for lazy-loading vertex/edge properties
  • Storage manager for schema and dataset access

§Example

let ctx = GraphExecutionContext::new(
    storage_manager,
    l0_buffer,
    property_manager,
);

// Get neighbors with L0 overlay
let neighbors = ctx.get_neighbors(vid, edge_type_id, Direction::Outgoing);

Implementations§

Source§

impl GraphExecutionContext

Source

pub fn new( storage: Arc<StorageManager>, l0: Arc<RwLock<L0Buffer>>, property_manager: Arc<PropertyManager>, ) -> Self

Create a new graph execution context.

§Arguments
  • storage - Storage manager for schema and dataset access
  • l0 - Current L0 buffer for MVCC visibility
  • property_manager - Manager for lazy property loading
Source

pub fn with_l0_context( storage: Arc<StorageManager>, l0_context: L0Context, property_manager: Arc<PropertyManager>, ) -> Self

Create context with full L0 visibility.

§Arguments
  • storage - Storage manager for schema and dataset access
  • l0_context - L0 visibility context with all buffers
  • property_manager - Manager for lazy property loading
Source

pub fn from_query_context( storage: Arc<StorageManager>, query_ctx: &QueryContext, property_manager: Arc<PropertyManager>, ) -> Self

Create context from a query context.

Source

pub fn with_deadline(self, deadline: Instant) -> Self

Set query timeout deadline.

Source

pub fn with_writer(self, writer: Arc<Writer>) -> Self

Attach the outer transaction’s writer handle so declared WRITE-mode procedures invoked through this context can run their Cypher bodies via the write-enabled inner-query host.

Source

pub fn writer(&self) -> Option<&Arc<Writer>>

Borrow the outer transaction’s writer handle, if any.

Source

pub fn with_algo_registry(self, registry: Arc<AlgorithmRegistry>) -> Self

Set the algorithm registry for uni.algo.* procedure dispatch.

Source

pub fn algo_registry(&self) -> Option<&Arc<AlgorithmRegistry>>

Get a reference to the algorithm registry, if set.

Source

pub fn with_procedure_registry(self, registry: Arc<ProcedureRegistry>) -> Self

Set the external procedure registry for test/user-defined procedures.

Source

pub fn with_xervo_runtime(self, runtime: Arc<ModelRuntime>) -> Self

Set Uni-Xervo runtime for query-time auto-embedding.

Source

pub fn procedure_registry(&self) -> Option<&Arc<ProcedureRegistry>>

Get a reference to the procedure registry, if set.

Source

pub fn with_plugin_registry(self, registry: Arc<PluginRegistry>) -> Self

Attach the plugin registry. Required by the M5h.2 native-label plugin-storage routing in columnar_scan_vertex_batch_static.

Source

pub fn plugin_registry(&self) -> Option<&Arc<PluginRegistry>>

Reference to the plugin registry (if set).

Source

pub fn xervo_runtime(&self) -> Option<&Arc<ModelRuntime>>

Source

pub fn push_warning(&self, warning: QueryWarning)

Record a runtime warning.

Source

pub fn take_warnings(&self) -> Vec<QueryWarning>

Take all collected warnings, leaving the collector empty.

Source

pub fn check_timeout(&self) -> Result<()>

Check if the query has timed out.

§Errors

Returns an error if the deadline has passed.

Source

pub fn storage(&self) -> &Arc<StorageManager>

Get a reference to the storage manager.

Source

pub fn adjacency_manager(&self) -> Arc<AdjacencyManager>

Get a reference to the adjacency manager.

Source

pub fn property_manager(&self) -> &Arc<PropertyManager>

Get a reference to the property manager.

Source

pub fn l0_context(&self) -> &L0Context

Get a reference to the L0 context.

Source

pub fn deadline_for_host(&self) -> Option<Instant>

Wall-clock deadline for the surrounding query, if any.

Internal accessor used by crate::query::executor::procedure_host::QueryProcedureHost to snapshot the deadline so procedure plugins can implement check_timeout without holding a borrow on this context.

Source

pub fn cancellation_token_for_host(&self) -> Option<CancellationToken>

Cancellation token clone for the surrounding query, if any.

Internal accessor for crate::query::executor::procedure_host::QueryProcedureHost; see Self::deadline_for_host.

Source

pub fn query_context(&self) -> QueryContext

Create a query context for property manager calls.

If there is no current L0 buffer (e.g., for snapshot queries), creates an empty one.

Source

pub async fn ensure_adjacency_warmed( &self, edge_type_ids: &[u32], direction: Direction, ) -> Result<()>

Ensure adjacency CSRs are warmed for the given edge types and direction.

This loads any missing CSR data from storage into the adjacency manager so that subsequent get_neighbors calls return complete results. Skips warming if the adjacency manager already has data (Main CSR or active overlay) for the edge type, avoiding duplicate entries.

Source

pub fn warming_future( self: &Arc<Self>, edge_type_ids: Vec<u32>, direction: Direction, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send>>

Create a boxed warming future for use in DataFusion stream state machines.

Wraps ensure_adjacency_warmed into a Pin<Box<dyn Future<Output = DFResult<()>> + Send>> suitable for polling in stream poll_next implementations.

Source

pub fn get_neighbors( &self, vid: Vid, edge_type: u32, direction: Direction, ) -> Vec<(Vid, Eid)>

Get neighbors for a vertex, merging CSR and all L0 buffers.

This implements the MVCC visibility rules:

  1. Load from CSR (L2 + L1 merged, auto-warms on cache miss)
  2. Overlay pending flush L0s (oldest to newest)
  3. Overlay current L0
  4. Overlay transaction L0 (if present)
  5. Filter tombstones (handled by overlay)
§Arguments
  • vid - Source vertex ID
  • edge_type - Edge type ID to traverse
  • direction - Traversal direction (Outgoing, Incoming, or Both)
§Returns

Vector of (neighbor VID, edge ID) pairs.

Source

pub fn get_neighbors_batch( &self, vids: &[Vid], edge_type: u32, direction: Direction, ) -> Vec<(Vid, Vid, Eid)>

Get neighbors for multiple vertices in batch.

More efficient than calling get_neighbors repeatedly as it amortizes lock acquisition for L0 buffers.

§Arguments
  • vids - Source vertex IDs
  • edge_type - Edge type ID to traverse
  • direction - Traversal direction
§Returns

Vector of (source VID, neighbor VID, edge ID) triples.

Source

pub fn resolve_stored_edge_endpoints( &self, eid: Eid, traversal_src: Vid, traversal_dst: Vid, edge_type_ids: &[u32], ) -> (u64, u64)

Resolve an edge’s STORED (src, dst) orientation given a traversed hop.

A relationship in a path must report its stored (start -> end) direction even when the path traversed it backward (undirected -[r]- or incoming <-[r]-). This first consults the L0 visibility chain (exact for in-memory edges); if the edge has been flushed to durable storage and is no longer L0-resident, it recovers the orientation with a bounded directed-outgoing adjacency probe: the edge is stored (traversal_src -> traversal_dst) iff eid appears among traversal_src’s outgoing neighbours for one of edge_type_ids, otherwise it is the reverse. Falls back to the traversal order only when the probe is inconclusive (e.g. the type carries no CSR adjacency).

The probe costs at most the out-degree of one vertex per candidate edge type — never a full edge scan — and reads the adjacency manager directly, so it does not perturb the SSI read-set.

§Examples
let (src, dst) =
    ctx.resolve_stored_edge_endpoints(eid, node_path[i], node_path[i + 1], &edge_type_ids);

Trait Implementations§

Source§

impl Debug for GraphExecutionContext

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

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

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> PluginState for T
where T: Send + Sync + 'static,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more