pub enum ColumnScope<'a> {
Unchecked,
Relations(&'a TableScope),
}Expand description
The relations an identifier in this expression can name.
Variants§
Unchecked
No relation is in scope, so no identifier is checkable here.
Used where an expression has no FROM clause behind it: stored DEFAULT
expressions, partial-index predicates, and the constant folders. A
column reference reaching one of those fails in constant folding as
SqlError::Unsupported, which is the correct answer there — the value
is not row-dependent.
Relations(&'a TableScope)
Identifiers resolve against these relations. One that resolves against
no relation, output alias, or synthetic column raises
SqlError::UnknownColumn.
Implementations§
Source§impl ColumnScope<'_>
impl ColumnScope<'_>
Sourcepub fn check_column(&self, table_ref: Option<&str>, column: &str) -> Result<()>
pub fn check_column(&self, table_ref: Option<&str>, column: &str) -> Result<()>
Reject column, optionally qualified by table_ref, when it names
nothing in this scope.
Sourcepub fn column_qualifier(
&self,
table_ref: Option<&str>,
column: &str,
) -> Result<Option<String>>
pub fn column_qualifier( &self, table_ref: Option<&str>, column: &str, ) -> Result<Option<String>>
Check column, optionally qualified by table_ref, and return the
qualifier its converted reference carries.
Outside a join’s input clauses the qualifier is kept as written. In
them, an unqualified column gets its owning relation’s qualifier, so
it reads the qualifier.column key of the merged row.
Sourcepub fn is_row_scope(&self) -> bool
pub fn is_row_scope(&self) -> bool
Whether an expression here is evaluated once per row of some relation.
Unchecked stands behind stored DEFAULTs, index predicates, and the
constant folders, none of which iterate rows.
Sourcepub fn allows_cp_functions(&self) -> bool
pub fn allows_cp_functions(&self) -> bool
Whether a sequence accessor resolves here although rows are in scope.
Only a SELECT-list scope over a relation says yes; the Control Plane
evaluates that item per output row. Unchecked never iterates rows,
so the question does not arise there.
Trait Implementations§
Source§impl<'a> Clone for ColumnScope<'a>
impl<'a> Clone for ColumnScope<'a>
impl<'a> Copy for ColumnScope<'a>
Auto Trait Implementations§
impl<'a> Freeze for ColumnScope<'a>
impl<'a> RefUnwindSafe for ColumnScope<'a>
impl<'a> Send for ColumnScope<'a>
impl<'a> Sync for ColumnScope<'a>
impl<'a> Unpin for ColumnScope<'a>
impl<'a> UnsafeUnpin for ColumnScope<'a>
impl<'a> UnwindSafe for ColumnScope<'a>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
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 moreSource§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.Source§impl<T> Pointable for T
impl<T> Pointable for T
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>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
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
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.