pub struct PhysicalIntersect {
pub num_build_sides: u32,
pub probe_key_col: u32,
pub build_key_col: u32,
}Expand description
Physical intersect operator.
For multi-pattern matching like MATCH (a)-[:r1]->(b), (a)-[:r2]->(c):
- Multiple build sides each produce a hash table keyed by the shared variable
a - The probe side produces candidate values for
a - For each probe key, all build hash tables are probed
- The matching node ID lists are pairwise intersected (two-way sorted merge)
- Only keys that appear in ALL build sides produce output
Implementation: a simplified version of the C++ Intersect (intersect.h).
Builds hash tables from build chunks, probes with probe chunks, and does
pairwise intersection using sorted node ID comparison.
Fields§
§num_build_sides: u32Number of build hash tables (one per pattern).
probe_key_col: u32Column index of the key in the probe side.
build_key_col: u32Column index of the key in each build side.
Implementations§
Source§impl PhysicalIntersect
impl PhysicalIntersect
pub fn execute_binary( &self, build_chunks: &[DataChunk], probe_chunks: &[DataChunk], ) -> OperatorResult
Sourcepub fn execute_sides(
&self,
build_sides: &[Vec<DataChunk>],
probe_chunks: &[DataChunk],
) -> OperatorResult
pub fn execute_sides( &self, build_sides: &[Vec<DataChunk>], probe_chunks: &[DataChunk], ) -> OperatorResult
Execute the intersect against independently-produced build sides.
Each build side is hashed into its own table keyed on the shared node ID.
A probe row passes only when its key is present in EVERY build table, and
the output is the full cross product of the matching build rows (so a
shared node with k neighbors per side produces k1 * k2 * ... rows).
Output column layout: [probe columns] + [build side 1 columns] + ....
Auto Trait Implementations§
impl Freeze for PhysicalIntersect
impl RefUnwindSafe for PhysicalIntersect
impl Send for PhysicalIntersect
impl Sync for PhysicalIntersect
impl Unpin for PhysicalIntersect
impl UnsafeUnpin for PhysicalIntersect
impl UnwindSafe for PhysicalIntersect
Blanket Implementations§
impl<T> Allocation for T
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> 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