dialect/sql: reset predicate before execute (#1092)

This commit is contained in:
Ariel Mashraki
2020-12-28 11:45:16 +02:00
committed by GitHub
parent b33fd90bd9
commit 0f7ab71e24
2 changed files with 19 additions and 1 deletions

View File

@@ -769,7 +769,7 @@ func (u *UpdateBuilder) Empty() bool {
// Query returns query representation of an `UPDATE` statement.
func (u *UpdateBuilder) Query() (string, []interface{}) {
u.WriteString("UPDATE ")
u.Ident(u.table).Pad().WriteString("SET ")
u.Ident(u.table).WriteString(" SET ")
for i, c := range u.nulls {
if i > 0 {
u.Comma()
@@ -1219,6 +1219,10 @@ func (p *Predicate) Append(f func(*Builder)) *Predicate {
// Query returns query representation of a predicate.
func (p *Predicate) Query() (string, []interface{}) {
if p.Len() > 0 || len(p.args) > 0 {
p.Reset()
p.args = nil
}
for _, f := range p.fns {
f(&p.Builder)
}

View File

@@ -297,6 +297,20 @@ func TestBuilder(t *testing.T) {
wantQuery: `UPDATE "users" SET "name" = $1 WHERE "name" = $2`,
wantArgs: []interface{}{"foo", "bar"},
},
{
input: func() Querier {
p1, p2 := EQ("name", "bar"), Or(EQ("age", 10), EQ("age", 20))
return Dialect(dialect.Postgres).
Update("users").
Set("name", "foo").
Where(p1).
Where(p2).
Where(p1).
Where(p2)
}(),
wantQuery: `UPDATE "users" SET "name" = $1 WHERE (("name" = $2 AND ("age" = $3 OR "age" = $4)) AND "name" = $5) AND ("age" = $6 OR "age" = $7)`,
wantArgs: []interface{}{"foo", "bar", 10, 20, "bar", 10, 20},
},
{
input: Update("users").Set("name", "foo").SetNull("spouse_id"),
wantQuery: "UPDATE `users` SET `spouse_id` = NULL, `name` = ?",