dialect/sql/sqlgraph: support custom modifiers in UPDATE commands

This commit is contained in:
Ariel Mashraki
2022-08-05 11:45:30 +03:00
committed by Ariel Mashraki
parent 9f481d8716
commit 0fd641333c
2 changed files with 59 additions and 1 deletions

View File

@@ -1571,6 +1571,33 @@ func TestUpdateNode(t *testing.T) {
},
wantUser: &user{name: "Ariel", age: 30, id: 1},
},
{
name: "fields/set_modifier",
spec: &UpdateSpec{
Node: &NodeSpec{
Table: "users",
Columns: []string{"id", "name", "age"},
ID: &FieldSpec{Column: "id", Type: field.TypeInt, Value: 1},
},
Modifiers: []func(*sql.UpdateBuilder){
func(u *sql.UpdateBuilder) {
u.Set("name", sql.Expr(sql.Lower("name")))
},
},
},
prepare: func(mock sqlmock.Sqlmock) {
mock.ExpectBegin()
mock.ExpectExec(escape("UPDATE `users` SET `name` = LOWER(`name`) WHERE `id` = ?")).
WithArgs(1).
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectQuery(escape("SELECT `id`, `name`, `age` FROM `users` WHERE `id` = ?")).
WithArgs(1).
WillReturnRows(sqlmock.NewRows([]string{"id", "age", "name"}).
AddRow(1, 30, "Ariel"))
mock.ExpectCommit()
},
wantUser: &user{name: "Ariel", age: 30, id: 1},
},
{
name: "fields/add_set_clear",
spec: &UpdateSpec{
@@ -1909,6 +1936,25 @@ func TestUpdateNodes(t *testing.T) {
},
wantAffected: 1,
},
{
name: "with modifier",
spec: &UpdateSpec{
Node: &NodeSpec{
Table: "users",
ID: &FieldSpec{Column: "id", Type: field.TypeInt},
},
Modifiers: []func(*sql.UpdateBuilder){
func(u *sql.UpdateBuilder) {
u.Set("id", sql.Expr("id + 1")).OrderBy("id")
},
},
},
prepare: func(mock sqlmock.Sqlmock) {
mock.ExpectExec(escape("UPDATE `users` SET `id` = id + 1 ORDER BY `id`")).
WillReturnResult(sqlmock.NewResult(0, 1))
},
wantAffected: 1,
},
{
name: "own_fks/m2o_o2o_inverse",
spec: &UpdateSpec{