Skip to content

Commit c4607f0

Browse files
committed
feat: add arguments for From method in UpdateBuilder
1 parent 1ded578 commit c4607f0

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

update.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ func (b UpdateBuilder) SetMap(clauses map[string]interface{}) UpdateBuilder {
244244

245245
// From adds FROM clause to the query
246246
// FROM is valid construct in postgresql only.
247-
func (b UpdateBuilder) From(from string) UpdateBuilder {
248-
return builder.Set(b, "From", newPart(from)).(UpdateBuilder)
247+
func (b UpdateBuilder) From(from string, args ...interface{}) UpdateBuilder {
248+
return builder.Set(b, "From", newPart(from, args...)).(UpdateBuilder)
249249
}
250250

251251
// FromSelect sets a subquery into the FROM clause of the query.

update_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,26 @@ func TestUpdateBuilderFrom(t *testing.T) {
8989
assert.Equal(t, "UPDATE employees SET sales_count = ? FROM accounts WHERE accounts.name = ?", sql)
9090
}
9191

92+
func TestUpdateBuilderParamFrom(t *testing.T) {
93+
fromArgs := []interface{}{
94+
1, 5,
95+
2, 5,
96+
}
97+
sql, _, err := Update("employees").
98+
Set("sales_count", Expr("c.sales_count")).
99+
From("(VALUES (?, ?), (?, ?)) AS c(id, sales_count)", fromArgs).
100+
Where("id = c.id").
101+
ToSql()
102+
assert.NoError(t, err)
103+
104+
expectedSql :=
105+
"UPDATE employees " +
106+
"SET sales_count = c.sales_count " +
107+
"FROM (VALUES (?, ?), (?, ?)) AS c(id, sales_count) " +
108+
"WHERE id = c.id"
109+
assert.Equal(t, expectedSql, sql)
110+
}
111+
92112
func TestUpdateBuilderFromSelect(t *testing.T) {
93113
sql, _, err := Update("employees").
94114
Set("sales_count", 100).

0 commit comments

Comments
 (0)