pub struct BoundInsert {Show 16 fields
pub table: TableInfo,
pub target_source: usize,
pub columns: Vec<ColumnSource>,
pub rowid: Option<ColumnSource>,
pub named_rowid: Option<usize>,
pub source: BoundInsertSource,
pub arity: usize,
pub on_conflict: Option<ConflictAction>,
pub checks: Vec<BoundCheck>,
pub not_null_defaults: Vec<BoundDefault>,
pub index_exprs: Vec<BoundIndexExprs>,
pub upsert: Vec<BoundUpsert>,
pub sequence_root: u32,
pub returning: Vec<BoundResultColumn>,
pub triggers: Vec<BoundTrigger>,
pub replace_triggers: Vec<BoundTrigger>,
}Expand description
A bound INSERT.
Fields§
§table: TableInfoThe table being written.
target_source: usizeThe statement-wide number of the FROM term being written.
It used to be implicitly zero, because a DML statement had exactly one source. A trigger body is compiled into the statement that fires it, so its target takes the next number after the firing statement’s - and a compiler that assumed zero read the wrong cursor for every fire after the first.
columns: Vec<ColumnSource>Where each table column’s value comes from, in column order.
rowid: Option<ColumnSource>Where the rowid comes from, when the statement supplies one.
named_rowid: Option<usize>Which value of the supplied row is the rowid, when the statement named it outright.
INSERT INTO t(rowid, a) VALUES (7, 'x') is legal on any rowid table,
including one with no INTEGER PRIMARY KEY to alias it and including a
virtual table. It is recorded separately from rowid because it is not
a column: nothing writes it into the record.
source: BoundInsertSourceThe rows.
arity: usizeHow many values each source row supplies.
on_conflict: Option<ConflictAction>The statement’s conflict algorithm, when it wrote one.
checks: Vec<BoundCheck>The table’s CHECK constraints.
not_null_defaults: Vec<BoundDefault>The DEFAULTs a REPLACE may stand in for a NULL, by column.
index_exprs: Vec<BoundIndexExprs>The expressions the table’s partial and expression indexes need.
upsert: Vec<BoundUpsert>The ON CONFLICT ... DO UPDATE clause, when there is one.
sequence_root: u32sqlite_sequence’s root page, when the target is AUTOINCREMENT.
Resolved here rather than in the compiler because it is a fact about the
catalog, and the catalog is what the binder holds. It is zero for every
other table, which is also what it reads as before the first
AUTOINCREMENT table in a database is created.
returning: Vec<BoundResultColumn>The RETURNING columns.
triggers: Vec<BoundTrigger>The triggers this write fires, in schema order.
replace_triggers: Vec<BoundTrigger>The foreign-key actions a REPLACE fires for the row it removes.
A REPLACE that deletes a row to make room for another is a delete,
and the keys pointing at that row have to be told. Written DELETE
triggers are not fired - that is SQLite’s rule with its default
recursive_triggers = off - so these are only the ones a key implies.