pub struct CompiledDefault { /* private fields */ }Expand description
One column DEFAULT, classified and parsed.
Compilation is the only step that reads the declaration text, so a caller
holding a CompiledDefault cannot parse the expression a second time.
Implementations§
Source§impl CompiledDefault
impl CompiledDefault
Sourcepub fn declare(column: &str, expr: &str) -> Result<Self>
pub fn declare(column: &str, expr: &str) -> Result<Self>
Compile the DEFAULT declared on column without evaluating it.
A parse error propagates verbatim, so the DDL gate can map an
unregistered function name onto SQLSTATE 42883.
A sequence accessor is parsed, never called, so declaring a column must never advance a sequence.
Sourcepub fn compile(column: &str, expr: &str) -> Result<Self>
pub fn compile(column: &str, expr: &str) -> Result<Self>
Compile the DEFAULT declared on column for row materialization.
An expression the parser refuses raises SqlError::UnevaluableDefault
rather than a parse error: DDL already refused those at declaration, so
a statement reaching here found one the catalog cannot resolve.
Sourcepub fn literal(&self) -> Option<&Value>
pub fn literal(&self) -> Option<&Value>
The constant this DEFAULT spells, when it is a bare literal.
A generator or a parsed expression has no value until evaluation, so
it yields None. The DDL gate checks a literal against the declared
column type through this, so a DEFAULT the column cannot hold is
refused where it is declared.
Sourcepub fn referenced_columns(&self) -> Vec<String>
pub fn referenced_columns(&self) -> Vec<String>
Every row column this DEFAULT reads, in first-seen order.
A column DEFAULT is evaluated with no row in scope, so a non-empty answer means the declaration can never produce a value. A generator or a literal reads no column.
Sourcepub fn is_volatile(&self) -> bool
pub fn is_volatile(&self) -> bool
Whether this DEFAULT produces a fresh value on every evaluation.
A plan carrying one is never admitted to the plan cache, or the cache replays one execution’s value into every later one.
Sourcepub fn evaluate(&self, catalog: &dyn SqlCatalog) -> Result<Value>
pub fn evaluate(&self, catalog: &dyn SqlCatalog) -> Result<Value>
Evaluate to one value. catalog resolves nextval and currval.
Takes no expression text, so the per-row path cannot re-parse.
Trait Implementations§
Source§impl Clone for CompiledDefault
impl Clone for CompiledDefault
Auto Trait Implementations§
impl Freeze for CompiledDefault
impl RefUnwindSafe for CompiledDefault
impl Send for CompiledDefault
impl Sync for CompiledDefault
impl Unpin for CompiledDefault
impl UnsafeUnpin for CompiledDefault
impl UnwindSafe for CompiledDefault
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.