pub type InsertBuilder<'a, Schema, State, Table, Marker = (), Row = ()> = QueryBuilder<'a, Schema, State, Table, Marker, Row>;Expand description
Builds an INSERT query specifically for PostgreSQL.
Provides a type-safe, fluent API for constructing INSERT statements with support for typed conflict resolution, batch inserts, and returning clauses.
§Type Parameters
Schema: The database schema type, ensuring only valid tables can be referencedState: The current builder state, enforcing proper query construction orderTable: The table being inserted into
Aliased Type§
pub struct InsertBuilder<'a, Schema, State, Table, Marker = (), Row = ()> {
pub sql: SQL<'a, PostgresValue<'a>>,
/* private fields */
}Fields§
§sql: SQL<'a, PostgresValue<'a>>Implementations§
Source§impl<'a, Schema, Table> InsertBuilder<'a, Schema, InsertInitial, Table>where
Table: PostgresTable<'a>,
impl<'a, Schema, Table> InsertBuilder<'a, Schema, InsertInitial, Table>where
Table: PostgresTable<'a>,
Sourcepub fn value<T>(
self,
value: Table::Insert<T>,
) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>
pub fn value<T>( self, value: Table::Insert<T>, ) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>
Specifies a single row to insert. Shorthand for .values([row]).
Sourcepub fn values<I, T>(
self,
values: I,
) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>where
I: IntoIterator<Item = Table::Insert<T>>,
pub fn values<I, T>(
self,
values: I,
) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>where
I: IntoIterator<Item = Table::Insert<T>>,
Specifies multiple rows to insert.
Sourcepub fn select<Q>(
self,
query: Q,
) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>where
Q: ToSQL<'a, PostgresValue<'a>>,
pub fn select<Q>(
self,
query: Q,
) -> InsertBuilder<'a, Schema, InsertValuesSet, Table>where
Q: ToSQL<'a, PostgresValue<'a>>,
Inserts rows produced by a SELECT query without an explicit column list.
The SELECT output must provide every table column in declaration order.
Source§impl<'a, S, T> InsertBuilder<'a, S, InsertValuesSet, T>
impl<'a, S, T> InsertBuilder<'a, S, InsertValuesSet, T>
Sourcepub fn on_conflict<C: ConflictTarget<T>>(
self,
target: C,
) -> OnConflictBuilder<'a, S, T>
pub fn on_conflict<C: ConflictTarget<T>>( self, target: C, ) -> OnConflictBuilder<'a, S, T>
Begins a typed ON CONFLICT clause targeting specific columns.
The target must implement ConflictTarget<T>, which is auto-generated for
primary key columns, unique columns, and unique indexes.
Returns an OnConflictBuilder to specify do_nothing() or do_update().
§Examples
fn main() {
use drizzle::postgres::prelude::*;
use drizzle::postgres::builder::QueryBuilder;
#[PostgresTable(name = "users")]
struct User {
#[column(serial, primary)]
id: i32,
name: String,
#[column(unique)]
email: Option<String>,
}
#[PostgresIndex(unique)]
struct UserEmailIdx(User::email);
#[derive(PostgresSchema)]
struct Schema {
user: User,
user_email_idx: UserEmailIdx,
}
let builder = QueryBuilder::new::<Schema>();
let schema = Schema::new();
let user = schema.user;
// Target a specific column
builder.insert(user).values([InsertUser::new("Alice")])
.on_conflict(user.id).do_nothing();
// Target with DO UPDATE using EXCLUDED
builder.insert(user).values([InsertUser::new("Alice")])
.on_conflict(user.email).do_update(UpdateUser::default().with_name("updated"));
// Target a unique index
builder.insert(user).values([InsertUser::new("Alice")])
.on_conflict(schema.user_email_idx).do_nothing();
}Sourcepub fn on_conflict_on_constraint<C: NamedConstraint<T>>(
self,
target: C,
) -> OnConflictBuilder<'a, S, T>
pub fn on_conflict_on_constraint<C: NamedConstraint<T>>( self, target: C, ) -> OnConflictBuilder<'a, S, T>
Begins a typed ON CONFLICT ON CONSTRAINT clause (PostgreSQL-only).
The target must implement NamedConstraint<T>, which is auto-generated
for unique indexes.
Returns an OnConflictBuilder to specify do_nothing() or do_update().
§Examples
fn main() {
use drizzle::postgres::prelude::*;
use drizzle::postgres::builder::QueryBuilder;
#[PostgresTable(name = "users")]
struct User {
#[column(serial, primary)]
id: i32,
name: String,
#[column(unique)]
email: Option<String>,
}
#[PostgresIndex(unique)]
struct UserEmailIdx(User::email);
#[derive(PostgresSchema)]
struct Schema {
user: User,
user_email_idx: UserEmailIdx,
}
let builder = QueryBuilder::new::<Schema>();
let schema = Schema::new();
builder.insert(schema.user).values([InsertUser::new("Alice")])
.on_conflict_on_constraint(schema.user_email_idx).do_nothing();
}Sourcepub fn on_conflict_do_nothing(
self,
) -> InsertBuilder<'a, S, InsertOnConflictSet, T>
pub fn on_conflict_do_nothing( self, ) -> InsertBuilder<'a, S, InsertOnConflictSet, T>
Shorthand for ON CONFLICT DO NOTHING without specifying a target.
This matches any constraint violation.
Sourcepub fn returning<Columns>(
self,
columns: Columns,
) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
pub fn returning<Columns>( self, columns: Columns, ) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
Adds a RETURNING clause and transitions to ReturningSet state
Source§impl<'a, S, T> InsertBuilder<'a, S, InsertOnConflictSet, T>
impl<'a, S, T> InsertBuilder<'a, S, InsertOnConflictSet, T>
Sourcepub fn returning<Columns>(
self,
columns: Columns,
) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
pub fn returning<Columns>( self, columns: Columns, ) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
Adds a RETURNING clause after ON CONFLICT
Source§impl<'a, S, T> InsertBuilder<'a, S, InsertDoUpdateSet, T>
impl<'a, S, T> InsertBuilder<'a, S, InsertDoUpdateSet, T>
Sourcepub fn where<E>(
self,
condition: E,
) -> InsertBuilder<'a, S, InsertOnConflictSet, T>
pub fn where<E>( self, condition: E, ) -> InsertBuilder<'a, S, InsertOnConflictSet, T>
Adds a WHERE clause to the DO UPDATE SET clause.
Generates: ON CONFLICT (col) DO UPDATE SET ... WHERE condition
Sourcepub fn returning<Columns>(
self,
columns: Columns,
) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
pub fn returning<Columns>( self, columns: Columns, ) -> InsertBuilder<'a, S, InsertReturningSet, T, Scoped<<Columns as IntoSelectTarget>::Marker, Cons<T, Nil>>, <<Columns as IntoSelectTarget>::Marker as ResolveRow<T>>::Row>
Adds a RETURNING clause after DO UPDATE SET