pub struct PhysicalRecursiveExtend {
pub source_table_id: u64,
pub rel_table_ids: Vec<u64>,
pub lower_bound: u64,
pub upper_bound: u64,
pub direction: ExtendDirection,
pub semantic: PathSemantic,
pub table_catalog: Option<Arc<TableCatalog>>,
pub weight_property: Option<String>,
pub cost_output_name: Option<String>,
}Expand description
Physical operator for variable-length path matching (BFS traversal).
For each source node, performs BFS up to upper_bound depth and emits
result rows for all nodes reachable at depths between lower_bound and
upper_bound.
Uses GDS-style path tracking to record actual paths (node IDs + edge IDs) and enforces path semantics (WALK/TRAIL/ACYCLIC).
Produces a DataChunk with columns: (src_offset, dst_offset, length, path_node_ids, path_edge_ids[, cost])
When weight_property is Some, uses Dijkstra’s algorithm for weighted
shortest path traversal (port of C++ WeightedSPPathsFunction).
The cost column is appended to the output.
Fields§
§source_table_id: u64§rel_table_ids: Vec<u64>§lower_bound: u64§upper_bound: u64§direction: ExtendDirection§semantic: PathSemantic§table_catalog: Option<Arc<TableCatalog>>§weight_property: Option<String>Optional edge weight property name for weighted shortest path. When set, Dijkstra traversal is used instead of BFS.
cost_output_name: Option<String>Optional name for the cost output column.
Trait Implementations§
Source§impl PhysicalOperatorExec for PhysicalRecursiveExtend
impl PhysicalOperatorExec for PhysicalRecursiveExtend
fn operator_type(&self) -> &str
fn execute(&self, input: Vec<DataChunk>) -> OperatorResult
Auto Trait Implementations§
impl !RefUnwindSafe for PhysicalRecursiveExtend
impl !UnwindSafe for PhysicalRecursiveExtend
impl Freeze for PhysicalRecursiveExtend
impl Send for PhysicalRecursiveExtend
impl Sync for PhysicalRecursiveExtend
impl Unpin for PhysicalRecursiveExtend
impl UnsafeUnpin for PhysicalRecursiveExtend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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