dialect/sql: calling Update.Add after Update.Set should append expression (#2168)

This commit is contained in:
Ariel Mashraki
2021-11-25 12:03:12 +02:00
committed by GitHub
parent b3ab990952
commit b99ce66f40
2 changed files with 21 additions and 2 deletions

View File

@@ -1079,9 +1079,11 @@ func (u *UpdateBuilder) Set(column string, v interface{}) *UpdateBuilder {
return u
}
// Add adds a numeric value to the given column.
// Add adds a numeric value to the given column. Note that, calling Set(c)
// after Add(c) will erase previous calls with c from the builder.
func (u *UpdateBuilder) Add(column string, v interface{}) *UpdateBuilder {
return u.Set(column, ExprFunc(func(b *Builder) {
u.columns = append(u.columns, column)
u.values = append(u.values, ExprFunc(func(b *Builder) {
b.WriteString("COALESCE")
b.Nested(func(b *Builder) {
b.Ident(Table(u.table).C(column)).Comma().WriteByte('0')
@@ -1089,6 +1091,7 @@ func (u *UpdateBuilder) Add(column string, v interface{}) *UpdateBuilder {
b.WriteString(" + ")
b.Arg(v)
}))
return u
}
// SetNull sets a column as null value.

View File

@@ -457,6 +457,22 @@ func TestBuilder(t *testing.T) {
wantQuery: "UPDATE `users` SET `age` = COALESCE(`users`.`age`, 0) + ? WHERE `nickname` LIKE ?",
wantArgs: []interface{}{1, "a8m%"},
},
{
input: Update("users").
Set("age", 1).
Add("age", 2).
Where(HasPrefix("nickname", "a8m")),
wantQuery: "UPDATE `users` SET `age` = ?, `age` = COALESCE(`users`.`age`, 0) + ? WHERE `nickname` LIKE ?",
wantArgs: []interface{}{1, 2, "a8m%"},
},
{
input: Update("users").
Add("age", 2).
Set("age", 1).
Where(HasPrefix("nickname", "a8m")),
wantQuery: "UPDATE `users` SET `age` = ? WHERE `nickname` LIKE ?",
wantArgs: []interface{}{1, "a8m%"},
},
{
input: Dialect(dialect.Postgres).
Update("users").