Struct diesel::query_builder::UpdateStatement [−][src]
pub struct UpdateStatement<T, U, V = SetNotCalled, Ret = NoReturningClause> { /* fields omitted */ }
Expand description
Represents a complete UPDATE
statement.
See update
for usage examples, or the update
guide for a more exhaustive
set of examples.
Implementations
pub fn set<V>(self, values: V) -> UpdateStatement<T, U, V::Changeset> where
T: Table,
V: AsChangeset<Target = T>,
UpdateStatement<T, U, V::Changeset>: AsQuery,
pub fn set<V>(self, values: V) -> UpdateStatement<T, U, V::Changeset> where
T: Table,
V: AsChangeset<Target = T>,
UpdateStatement<T, U, V::Changeset>: AsQuery,
Provides the SET
clause of the UPDATE
statement.
See update
for usage examples, or the update
guide for a more exhaustive
set of examples.
Adds the given predicate to the WHERE
clause of the statement being
constructed.
If there is already a WHERE
clause, the predicate will be appended
with AND
. There is no difference in behavior between
update(table.filter(x))
and update(table).filter(x)
.
Example
let updated_rows = diesel::update(users)
.set(name.eq("Jim"))
.filter(name.eq("Sean"))
.execute(&connection);
assert_eq!(Ok(1), updated_rows);
let expected_names = vec!["Jim".to_string(), "Tess".to_string()];
let names = users.select(name).order(id).load(&connection);
assert_eq!(Ok(expected_names), names);
pub fn into_boxed<'a, DB>(self) -> IntoBoxed<'a, Self, DB> where
DB: Backend,
Self: BoxedDsl<'a, DB>,
pub fn into_boxed<'a, DB>(self) -> IntoBoxed<'a, Self, DB> where
DB: Backend,
Self: BoxedDsl<'a, DB>,
Boxes the WHERE
clause of this update statement.
This is useful for cases where you want to conditionally modify a query, but need the type to remain the same. The backend must be specified as part of this. It is not possible to box a query and have it be useable on multiple backends.
A boxed query will incur a minor performance penalty, as the query builder can no longer be inlined by the compiler. For most applications this cost will be minimal.
Example
let mut query = diesel::update(users)
.set(name.eq("Jerk"))
.into_boxed();
if !params["tess_has_been_a_jerk"] {
query = query.filter(name.ne("Tess"));
}
let updated_rows = query.execute(&connection)?;
assert_eq!(1, updated_rows);
let expected_names = vec!["Jerk", "Tess"];
let names = users.select(name).order(id).load::<String>(&connection)?;
assert_eq!(expected_names, names);
pub fn returning<E>(
self,
returns: E
) -> UpdateStatement<T, U, V, ReturningClause<E>> where
T: Table,
UpdateStatement<T, U, V, ReturningClause<E>>: Query,
pub fn returning<E>(
self,
returns: E
) -> UpdateStatement<T, U, V, ReturningClause<E>> where
T: Table,
UpdateStatement<T, U, V, ReturningClause<E>>: Query,
Specify what expression is returned after execution of the update
.
Examples
Updating a single record:
let updated_name = diesel::update(users.filter(id.eq(1)))
.set(name.eq("Dean"))
.returning(name)
.get_result(&connection);
assert_eq!(Ok("Dean".to_string()), updated_name);
Trait Implementations
impl<T, U, V> AsQuery for UpdateStatement<T, U, V, NoReturningClause> where
T: Table,
UpdateStatement<T, U, V, ReturningClause<T::AllColumns>>: Query,
impl<T, U, V> AsQuery for UpdateStatement<T, U, V, NoReturningClause> where
T: Table,
UpdateStatement<T, U, V, ReturningClause<T::AllColumns>>: Query,
type Query = UpdateStatement<T, U, V, ReturningClause<T::AllColumns>>
type Query = UpdateStatement<T, U, V, ReturningClause<T::AllColumns>>
What kind of query does this type represent?
impl<'a, T, U, V, Ret, DB> BoxedDsl<'a, DB> for UpdateStatement<T, U, V, Ret> where
U: Into<BoxedWhereClause<'a, DB>>,
impl<'a, T, U, V, Ret, DB> BoxedDsl<'a, DB> for UpdateStatement<T, U, V, Ret> where
U: Into<BoxedWhereClause<'a, DB>>,
type Output = BoxedUpdateStatement<'a, DB, T, V, Ret>
type Output = BoxedUpdateStatement<'a, DB, T, V, Ret>
The return type of internal_into_boxed
See the trait documentation.
impl<T, U, V, Ret, Predicate> FilterDsl<Predicate> for UpdateStatement<T, U, V, Ret> where
U: WhereAnd<Predicate>,
Predicate: AppearsOnTable<T>,
impl<T, U, V, Ret, Predicate> FilterDsl<Predicate> for UpdateStatement<T, U, V, Ret> where
U: WhereAnd<Predicate>,
Predicate: AppearsOnTable<T>,
type Output = UpdateStatement<T, U::Output, V, Ret>
type Output = UpdateStatement<T, U::Output, V, Ret>
The type returned by .filter
.
impl<T, U, V, Ret> Query for UpdateStatement<T, U, V, ReturningClause<Ret>> where
T: Table,
Ret: Expression + SelectableExpression<T> + NonAggregate,
impl<T, U, V, Ret> Query for UpdateStatement<T, U, V, ReturningClause<Ret>> where
T: Table,
Ret: Expression + SelectableExpression<T> + NonAggregate,
impl<T, U, V, Ret, DB> QueryFragment<DB> for UpdateStatement<T, U, V, Ret> where
DB: Backend,
T: Table,
T::FromClause: QueryFragment<DB>,
U: QueryFragment<DB>,
V: QueryFragment<DB>,
Ret: QueryFragment<DB>,
impl<T, U, V, Ret, DB> QueryFragment<DB> for UpdateStatement<T, U, V, Ret> where
DB: Backend,
T: Table,
T::FromClause: QueryFragment<DB>,
U: QueryFragment<DB>,
V: QueryFragment<DB>,
Ret: QueryFragment<DB>,
Walk over this QueryFragment
for all passes. Read more
Converts this QueryFragment
to its SQL representation. Read more
fn collect_binds(
&self,
out: &mut DB::BindCollector,
metadata_lookup: &DB::MetadataLookup
) -> QueryResult<()>
fn collect_binds(
&self,
out: &mut DB::BindCollector,
metadata_lookup: &DB::MetadataLookup
) -> QueryResult<()>
Serializes all bind parameters in this query. Read more
Is this query safe to store in the prepared statement cache? Read more
Can the SQL generated by Self
be uniquely identified by its type? Read more
fn execute(self, conn: &Conn) -> QueryResult<usize> where
Conn: Connection,
Self: ExecuteDsl<Conn>,
fn execute(self, conn: &Conn) -> QueryResult<usize> where
Conn: Connection,
Self: ExecuteDsl<Conn>,
Executes the given command, returning the number of rows affected. Read more
Executes the given query, returning a Vec
with the returned rows. Read more
Runs the command, and returns the affected row. Read more
Runs the command, returning an Vec
with the affected rows. Read more
Auto Trait Implementations
impl<T, U, V, Ret> RefUnwindSafe for UpdateStatement<T, U, V, Ret> where
Ret: RefUnwindSafe,
T: RefUnwindSafe,
U: RefUnwindSafe,
V: RefUnwindSafe,
impl<T, U, V, Ret> Send for UpdateStatement<T, U, V, Ret> where
Ret: Send,
T: Send,
U: Send,
V: Send,
impl<T, U, V, Ret> Sync for UpdateStatement<T, U, V, Ret> where
Ret: Sync,
T: Sync,
U: Sync,
V: Sync,
impl<T, U, V, Ret> Unpin for UpdateStatement<T, U, V, Ret> where
Ret: Unpin,
T: Unpin,
U: Unpin,
V: Unpin,
impl<T, U, V, Ret> UnwindSafe for UpdateStatement<T, U, V, Ret> where
Ret: UnwindSafe,
T: UnwindSafe,
U: UnwindSafe,
V: UnwindSafe,
Blanket Implementations
type Query = T
type Query = T
What kind of query does this type represent?
Mutably borrows from an owned value. Read more
impl<Conn, DB, T> ExecuteDsl<Conn, DB> for T where
DB: Backend,
T: QueryFragment<DB> + QueryId,
Conn: Connection<Backend = DB>,
impl<Conn, DB, T> ExecuteDsl<Conn, DB> for T where
DB: Backend,
T: QueryFragment<DB> + QueryId,
Conn: Connection<Backend = DB>,
Convert self
to an expression for Diesel’s query builder. Read more