dialect/sql: add Add method to UpdateSet

This commit is contained in:
Ariel Mashraki
2021-09-16 23:19:24 +03:00
committed by Ariel Mashraki
parent 3c650e507e
commit 912415e1e1
2 changed files with 12 additions and 4 deletions

View File

@@ -934,6 +934,12 @@ func (u *UpdateSet) Set(column string, v interface{}) *UpdateSet {
return u
}
// Add adds a numeric value to the given column.
func (u *UpdateSet) Add(column string, v interface{}) *UpdateSet {
u.update.Add(column, v)
return u
}
// SetNull sets a column as null value.
func (u *UpdateSet) SetNull(column string) *UpdateSet {
u.update.SetNull(column)

View File

@@ -1720,12 +1720,13 @@ func TestInsert_OnConflict(t *testing.T) {
// Update all new values excepts id field.
ResolveWith(func(u *UpdateSet) {
u.SetIgnore("id")
u.Add("version", 1)
}),
UpdateWhere(NEQ("updated_at", 0)),
).
Query()
require.Equal(t, `INSERT INTO "users" ("id", "email") VALUES ($1, $2) ON CONFLICT ("email") WHERE "name" = $3 DO UPDATE SET "id" = "users"."id", "email" = "excluded"."email" WHERE "updated_at" <> $4`, query)
require.Equal(t, []interface{}{"1", "user@example.com", "Ariel", 0}, args)
require.Equal(t, `INSERT INTO "users" ("id", "email") VALUES ($1, $2) ON CONFLICT ("email") WHERE "name" = $3 DO UPDATE SET "id" = "users"."id", "email" = "excluded"."email", "version" = COALESCE("version", 0) + $4 WHERE "updated_at" <> $5`, query)
require.Equal(t, []interface{}{"1", "user@example.com", "Ariel", 1, 0}, args)
query, args = Dialect(dialect.Postgres).
Insert("users").
@@ -1809,11 +1810,12 @@ func TestInsert_OnConflict(t *testing.T) {
ResolveWith(func(s *UpdateSet) {
s.SetExcluded("name")
s.SetNull("created_at")
s.Add("version", 1)
}),
).
Query()
require.Equal(t, "INSERT INTO `users` (`id`, `name`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `created_at` = NULL, `name` = VALUES(`name`)", query)
require.Equal(t, []interface{}{"1", "Mashraki"}, args)
require.Equal(t, "INSERT INTO `users` (`id`, `name`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `created_at` = NULL, `name` = VALUES(`name`), `version` = COALESCE(`version`, 0) + ?", query)
require.Equal(t, []interface{}{"1", "Mashraki", 1}, args)
query, args = Dialect(dialect.MySQL).
Insert("users").