From 912415e1e1f96aa6f28cd877e0603725a7ed94eb Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Thu, 16 Sep 2021 23:19:24 +0300 Subject: [PATCH] dialect/sql: add Add method to UpdateSet --- dialect/sql/builder.go | 6 ++++++ dialect/sql/builder_test.go | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index b6043a2d1..30d71c1a7 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -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) diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index 1111fcbd7..70614c4a2 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -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").