mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
dialect/sql: calling Update.Add after Update.Set should append expression (#2168)
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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").
|
||||
|
||||
Reference in New Issue
Block a user