pub struct InsertSelectSource<S: Model, V> { /* private fields */ }Expand description
Source-tagged expression operand for FieldRef::copy_from /
crate::query::DjogiField::copy_from.
§What
InsertSelectSource<S, V> wraps the source-side projection IR for one
position in an INSERT INTO ... SELECT ... mapping. The phantom S
pins the operand to a specific source model so the mapping cannot
silently cross model boundaries; the phantom V pins the value type
so a target column of type V can only be fed by a source operand of
the matching V.
§How to construct
- From a source field — call
FieldRef::as_insert_source/crate::query::DjogiField::as_insert_source. The receiver’sMpins the wrapper’sS, so building an operand from a target field gives an operand tagged with the target model which the closure return type then rejects. - From a Rust scalar — call
InsertSelectSource::literal.Sis free at construction and inferred from the closure context (a constant has no source identity of its own). - From an arithmetic composition — use
+/-/*//onInsertSelectSource<S, V>whereV: Numeric. Same-Soperands compose; mixing two different source tags fails to compile.
§Why phantom-only
The IR payload (the crate-private ExprNode enum) is type-erased at
the leaf — the SQL emitter walks one monomorphic function regardless
of S or V. S and V are present strictly to drive compile-time
checks at the mapping site; they never appear in the rendered SQL
or in the SqlAccumulator’s bind list. Cf. the parallel design on
crate::expr::Expr<V> — same rationale.
Debug + Clone are derived because the inner IR tree is both.
Copy is intentionally NOT implemented — the IR contains boxed
sub-nodes, so cheap-looking Copy would hide allocation costs in
arithmetic chains.
Implementations§
Source§impl<S: Model, V> InsertSelectSource<S, V>
impl<S: Model, V> InsertSelectSource<S, V>
Sourcepub fn literal(v: V) -> Self
pub fn literal(v: V) -> Self
Build a literal source operand from a Rust scalar.
The S parameter is polymorphic and inferred from the closure
context — a literal has no source identity of its own, so any
S satisfies the construction site. The closure’s return-type
inference then pins S to the source model the enclosing
QuerySet<S>::insert_into call uses.
§Example
// Every archived row gets the same constant `status = "ARCHIVED"`.
.insert_into::<OrderArchive, _, _>(|target, _source| vec![
target.status().copy_from(InsertSelectSource::literal("ARCHIVED".to_string())),
])V: Into<Expr<V>> is satisfied by every scalar Djogi binds today
(the crate-private crate::expr::literal module is the source of
truth for the bindable set); the Into conversion routes through
the same typed seal that Expr::literal uses.
Trait Implementations§
Source§impl<S: Model, V: Numeric> Add for InsertSelectSource<S, V>
impl<S: Model, V: Numeric> Add for InsertSelectSource<S, V>
Source§impl<S: Model> Add<InsertSelectSource<S, Duration>> for InsertSelectSource<S, OffsetDateTime>
impl<S: Model> Add<InsertSelectSource<S, Duration>> for InsertSelectSource<S, OffsetDateTime>
Source§type Output = InsertSelectSource<S, OffsetDateTime>
type Output = InsertSelectSource<S, OffsetDateTime>
+ operator.Source§impl<S: Clone + Model, V: Clone> Clone for InsertSelectSource<S, V>
impl<S: Clone + Model, V: Clone> Clone for InsertSelectSource<S, V>
Source§fn clone(&self) -> InsertSelectSource<S, V>
fn clone(&self) -> InsertSelectSource<S, V>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<S: Model, V: Numeric> Div for InsertSelectSource<S, V>
impl<S: Model, V: Numeric> Div for InsertSelectSource<S, V>
Source§impl<S: Model, V: Numeric> Mul for InsertSelectSource<S, V>
impl<S: Model, V: Numeric> Mul for InsertSelectSource<S, V>
Source§impl<S: Model, V: Numeric> Sub for InsertSelectSource<S, V>
impl<S: Model, V: Numeric> Sub for InsertSelectSource<S, V>
Source§impl<S: Model> Sub<InsertSelectSource<S, Duration>> for InsertSelectSource<S, OffsetDateTime>
impl<S: Model> Sub<InsertSelectSource<S, Duration>> for InsertSelectSource<S, OffsetDateTime>
Source§type Output = InsertSelectSource<S, OffsetDateTime>
type Output = InsertSelectSource<S, OffsetDateTime>
- operator.Auto Trait Implementations§
impl<S, V> !RefUnwindSafe for InsertSelectSource<S, V>
impl<S, V> !UnwindSafe for InsertSelectSource<S, V>
impl<S, V> Freeze for InsertSelectSource<S, V>
impl<S, V> Send for InsertSelectSource<S, V>
impl<S, V> Sync for InsertSelectSource<S, V>
impl<S, V> Unpin for InsertSelectSource<S, V>
impl<S, V> UnsafeUnpin for InsertSelectSource<S, V>
Blanket Implementations§
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<V> IntoPortableFieldValue<Option<V>> for V
impl<V> IntoPortableFieldValue<Option<V>> for V
Source§fn into_portable_field_value(self) -> Option<V>
fn into_portable_field_value(self) -> Option<V>
self into the field’s declared portable value type.
The returned value flows into Sassi’s Field<M, FieldValue>::eq /
.gt / .in_ / etc. as the right-hand-side operand. Implementors
must produce a value whose PartialEq / PartialOrd / Hash
behaviour matches the on-disk column ordering — otherwise Punnu and
the database row will disagree at evaluation time.Source§impl<V> IntoPortableFieldValue<Tracked<V>> for V
impl<V> IntoPortableFieldValue<Tracked<V>> for V
Source§fn into_portable_field_value(self) -> Tracked<V>
fn into_portable_field_value(self) -> Tracked<V>
self into the field’s declared portable value type.
The returned value flows into Sassi’s Field<M, FieldValue>::eq /
.gt / .in_ / etc. as the right-hand-side operand. Implementors
must produce a value whose PartialEq / PartialOrd / Hash
behaviour matches the on-disk column ordering — otherwise Punnu and
the database row will disagree at evaluation time.Source§impl<V> IntoPortableFieldValue<V> for V
impl<V> IntoPortableFieldValue<V> for V
Source§fn into_portable_field_value(self) -> V
fn into_portable_field_value(self) -> V
self into the field’s declared portable value type.
The returned value flows into Sassi’s Field<M, FieldValue>::eq /
.gt / .in_ / etc. as the right-hand-side operand. Implementors
must produce a value whose PartialEq / PartialOrd / Hash
behaviour matches the on-disk column ordering — otherwise Punnu and
the database row will disagree at evaluation time.Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);