Browse Source

User.save use upsert with mysql

pull/6262/head
Timshel 3 weeks ago
parent
commit
ba6176d36d
  1. 16
      src/db/models/user.rs

16
src/db/models/user.rs

@ -285,22 +285,14 @@ impl User {
db_run! {conn: db_run! {conn:
mysql { mysql {
let value = UserDb::to_db(self); let value = UserDb::to_db(self);
// Don't use replace_into() since it wants to delete the record first.
match diesel::update(users::table)
.filter(users::uuid.eq(&self.uuid))
.set(&value)
.execute(conn)
{
Ok(1) => Ok(()),
Ok(_) => {
diesel::insert_into(users::table) diesel::insert_into(users::table)
.values(value) .values(&value)
.on_conflict(diesel::dsl::DuplicatedKeys)
.do_update()
.set(&value)
.execute(conn) .execute(conn)
.map_res("Error saving user") .map_res("Error saving user")
} }
Err(e) => Err(e.into()),
}.map_res("Error updating user")
}
postgresql, sqlite { postgresql, sqlite {
let value = UserDb::to_db(self); let value = UserDb::to_db(self);
diesel::insert_into(users::table) // Insert or update diesel::insert_into(users::table) // Insert or update

Loading…
Cancel
Save