pub struct SubqueryExecutor;Expand description
Executor for SPARQL subqueries
Implementations§
Source§impl SubqueryExecutor
impl SubqueryExecutor
Sourcepub fn execute(
&self,
subquery: &Subquery,
outer_bindings: &[HashMap<String, String>],
) -> SubqueryResult
pub fn execute( &self, subquery: &Subquery, outer_bindings: &[HashMap<String, String>], ) -> SubqueryResult
Execute a subquery given a set of outer bindings.
The algorithm:
- For each triple pattern in the inner WHERE, generate candidate bindings by matching against the outer bindings (simulated evaluation).
- If the subquery is correlated, inject the outer binding into every candidate.
- Apply FILTER expressions (simple equality checks on bound variables).
- Project to the SELECT variables.
- Apply DISTINCT, OFFSET, LIMIT.
Sourcepub fn project(
bindings: Vec<HashMap<String, String>>,
vars: &[String],
) -> Vec<HashMap<String, String>>
pub fn project( bindings: Vec<HashMap<String, String>>, vars: &[String], ) -> Vec<HashMap<String, String>>
Project bindings to only the specified variables.
If vars is empty, all variables are kept (SELECT *).
Sourcepub fn deduplicate(
bindings: Vec<HashMap<String, String>>,
) -> Vec<HashMap<String, String>>
pub fn deduplicate( bindings: Vec<HashMap<String, String>>, ) -> Vec<HashMap<String, String>>
Remove duplicate bindings
Sourcepub fn apply_limit_offset(
bindings: Vec<HashMap<String, String>>,
limit: Option<usize>,
offset: Option<usize>,
) -> Vec<HashMap<String, String>>
pub fn apply_limit_offset( bindings: Vec<HashMap<String, String>>, limit: Option<usize>, offset: Option<usize>, ) -> Vec<HashMap<String, String>>
Apply LIMIT and OFFSET to a binding sequence
Sourcepub fn variables_used(query: &SelectQuery) -> Vec<String>
pub fn variables_used(query: &SelectQuery) -> Vec<String>
Return all variable names used in the query’s WHERE clause
Return true if the subquery references any outer variables in its WHERE clause
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SubqueryExecutor
impl RefUnwindSafe for SubqueryExecutor
impl Send for SubqueryExecutor
impl Sync for SubqueryExecutor
impl Unpin for SubqueryExecutor
impl UnsafeUnpin for SubqueryExecutor
impl UnwindSafe for SubqueryExecutor
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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)
Converts
&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)
Converts
&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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.