pub enum IrPathJoin {
Single {
source_alias: String,
fk_col: String,
target: IrSource,
},
Multi {
source_alias: String,
junction_alias: String,
join: IrMultiLinkJoin,
target: IrSource,
},
BacklinkSingle {
source_alias: String,
fk_col: String,
target: IrSource,
},
Function {
fn_module: String,
fn_name: String,
args: Vec<IrExpr>,
target: IrSource,
},
Lateral {
inner: Box<IrPathSelect>,
target: IrSource,
},
BacklinkMulti {
source_alias: String,
junction_alias: String,
junction_table: String,
module: String,
owner_col: String,
current_col: String,
target: IrSource,
},
}Variants§
Single
Traverse a single (FK) link.
Multi
Traverse a multi-link via a junction table.
BacklinkSingle
Reverse of a single FK link: find owner rows whose FK column points to the current row.
Function
An object-returning user function as the next row source —
translation := latest(.id) traversed as .translation.value.
Emitted as a CROSS JOIN LATERAL, since args reference the alias
the traversal has reached so far.
Lateral
A computed pointer that carries its own FILTER/ORDER BY/LIMIT as the
next row source — .translation.name, where translation is
select .translations filter … order by … limit 1. Those modifiers
apply per source row, which a plain join cannot express, so the
computed’s own traversal becomes a correlated JOIN LATERAL.
BacklinkMulti
Reverse of a multi-link: traverse the junction table in reverse.
Trait Implementations§
Source§impl Clone for IrPathJoin
impl Clone for IrPathJoin
Auto Trait Implementations§
impl Freeze for IrPathJoin
impl RefUnwindSafe for IrPathJoin
impl Send for IrPathJoin
impl Sync for IrPathJoin
impl Unpin for IrPathJoin
impl UnsafeUnpin for IrPathJoin
impl UnwindSafe for IrPathJoin
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.