UPDATE
Update rows with the Updater builder.
The Updater builder constructs UPDATE queries. Create one via Table.Update(db) or dew.Update[T](db, schema).
Basic update
err := Users.Update(db).
Set(Users.Name, "Bob").
Where(Users.ID.Eq(1)).
Exec()
// UPDATE users SET name = $1 WHERE users.id = $2Multiple SET
err := Users.Update(db).
Set(Users.Name, "Bob").
Set(Users.Age, 30).
Where(Users.ID.Eq(1)).
Exec()
// UPDATE users SET name = $1, age = $2 WHERE users.id = $3SET with expression
Use dew.Raw() for computed updates:
err := Users.Update(db).
Set(Users.Age, dew.Raw("age + ?", 1)).
Where(Users.ID.Eq(1)).
Exec()
// UPDATE users SET age = age + $1 WHERE users.id = $2Safety: WHERE required
Dew refuses to build an UPDATE without a WHERE clause to prevent accidental full-table updates:
// This returns an error:
_, _, err := Users.Update(db).Set(Users.Name, "Bob").ToSql()
// "dew: UNSAFE UPDATE! You must provide a Where clause."
// To update all rows intentionally:
err := Users.Update(db).
Set(Users.Name, "Bob").
Where(dew.Raw("1=1")).
Exec()Returning
sql, _, _ := Users.Update(db).
Set(Users.Name, "Bob").
Where(Users.ID.Eq(1)).
Returning(Users.ID, Users.Name).
ToSql()
// UPDATE users SET name = $1 WHERE users.id = $2 RETURNING id, nameScan
var id int
var name string
err := Users.Update(db).
Set(Users.Name, "Bob").
Where(Users.ID.Eq(1)).
Returning(Users.ID, Users.Name).
Scan(ctx, &id, &name)RowsAffected
n, err := Users.Update(db).
Set(Users.Name, "Bob").
Where(Users.Age.Lt(18)).
RowsAffected()Clone
base := Users.Update(db).Set(Users.Name, "Bob").Where(Users.ID.Eq(1))
clone := base.Clone()
clone.Set(Users.Age, 30)
// base is unchangedToSql
sql, args, err := Users.Update(db).
Set(Users.Name, "Bob").
Where(Users.ID.Eq(1)).
ToSql()