Skip to content

Commit 0351705

Browse files
authored
add more tests for update (go-xorm#24)
1 parent 3d1ab23 commit 0351705

File tree

8 files changed

+75
-42
lines changed

8 files changed

+75
-42
lines changed

builder.go

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,30 +42,6 @@ type Builder struct {
4242
having string
4343
}
4444

45-
// Select creates a select Builder
46-
func Select(cols ...string) *Builder {
47-
builder := &Builder{cond: NewCond()}
48-
return builder.Select(cols...)
49-
}
50-
51-
// Insert creates an insert Builder
52-
func Insert(eq Eq) *Builder {
53-
builder := &Builder{cond: NewCond()}
54-
return builder.Insert(eq)
55-
}
56-
57-
// Update creates an update Builder
58-
func Update(updates ...Eq) *Builder {
59-
builder := &Builder{cond: NewCond()}
60-
return builder.Update(updates...)
61-
}
62-
63-
// Delete creates a delete Builder
64-
func Delete(conds ...Cond) *Builder {
65-
builder := &Builder{cond: NewCond()}
66-
return builder.Delete(conds...)
67-
}
68-
6945
// Where sets where SQL
7046
func (b *Builder) Where(cond Cond) *Builder {
7147
b.cond = b.cond.And(cond)
@@ -182,7 +158,12 @@ func (b *Builder) Insert(eq Eq) *Builder {
182158

183159
// Update sets update SQL
184160
func (b *Builder) Update(updates ...Eq) *Builder {
185-
b.updates = updates
161+
b.updates = make([]Eq, 0, len(updates))
162+
for _, update := range updates {
163+
if update.IsValid() {
164+
b.updates = append(b.updates, update)
165+
}
166+
}
186167
b.optype = updateType
187168
return b
188169
}

builder_delete.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import (
88
"fmt"
99
)
1010

11+
// Delete creates a delete Builder
12+
func Delete(conds ...Cond) *Builder {
13+
builder := &Builder{cond: NewCond()}
14+
return builder.Delete(conds...)
15+
}
16+
1117
func (b *Builder) deleteWriteTo(w Writer) error {
1218
if len(b.tableName) <= 0 {
1319
return ErrNoTableName

builder_insert.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ import (
1010
"fmt"
1111
)
1212

13+
// Insert creates an insert Builder
14+
func Insert(eq Eq) *Builder {
15+
builder := &Builder{cond: NewCond()}
16+
return builder.Insert(eq)
17+
}
18+
1319
func (b *Builder) insertWriteTo(w Writer) error {
1420
if len(b.tableName) <= 0 {
1521
return errors.New("no table indicated")

builder_select.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ import (
99
"fmt"
1010
)
1111

12+
// Select creates a select Builder
13+
func Select(cols ...string) *Builder {
14+
builder := &Builder{cond: NewCond()}
15+
return builder.Select(cols...)
16+
}
17+
1218
func (b *Builder) selectWriteTo(w Writer) error {
1319
if len(b.tableName) <= 0 {
1420
return errors.New("no table indicated")

builder_test.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -418,20 +418,6 @@ func TestBuilderInsert(t *testing.T) {
418418
fmt.Println(sql, args)
419419
}
420420

421-
func TestBuilderUpdate(t *testing.T) {
422-
sql, args, err := Update(Eq{"a": 2}).From("table1").Where(Eq{"a": 1}).ToSQL()
423-
assert.NoError(t, err)
424-
fmt.Println(sql, args)
425-
426-
sql, args, err = Update(Eq{"a": 2, "b": Incr(1)}).From("table2").Where(Eq{"a": 1}).ToSQL()
427-
assert.NoError(t, err)
428-
fmt.Println(sql, args)
429-
430-
sql, args, err = Update(Eq{"a": 2, "b": Incr(1), "c": Decr(1), "d": Expr("select count(*) from table2")}).From("table2").Where(Eq{"a": 1}).ToSQL()
431-
assert.NoError(t, err)
432-
fmt.Println(sql, args)
433-
}
434-
435421
func TestSubquery(t *testing.T) {
436422
subb := Select("id").From("table_b").Where(Eq{"b": "a"})
437423
b := Select("a, b").From("table_a").Where(

builder_update.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@
55
package builder
66

77
import (
8-
"errors"
98
"fmt"
109
)
1110

11+
// Update creates an update Builder
12+
func Update(updates ...Eq) *Builder {
13+
builder := &Builder{cond: NewCond()}
14+
return builder.Update(updates...)
15+
}
16+
1217
func (b *Builder) updateWriteTo(w Writer) error {
1318
if len(b.tableName) <= 0 {
14-
return errors.New("no table indicated")
19+
return ErrNoTableName
1520
}
1621
if len(b.updates) <= 0 {
17-
return errors.New("no column to be update")
22+
return ErrNoColumnToUpdate
1823
}
1924

2025
if _, err := fmt.Fprintf(w, "UPDATE %s SET ", b.tableName); err != nil {

builder_update_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright 2018 The Xorm Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package builder
6+
7+
import (
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func TestBuilderUpdate(t *testing.T) {
14+
sql, args, err := Update(Eq{"a": 2}).From("table1").Where(Eq{"a": 1}).ToSQL()
15+
assert.NoError(t, err)
16+
assert.EqualValues(t, "UPDATE table1 SET a=? WHERE a=?", sql)
17+
assert.EqualValues(t, []interface{}{2, 1}, args)
18+
19+
sql, args, err = Update(Eq{"a": 2, "b": 1}).From("table1").Where(Eq{"a": 1}).ToSQL()
20+
assert.NoError(t, err)
21+
assert.EqualValues(t, "UPDATE table1 SET a=?,b=? WHERE a=?", sql)
22+
assert.EqualValues(t, []interface{}{2, 1, 1}, args)
23+
24+
sql, args, err = Update(Eq{"a": 2, "b": Incr(1)}).From("table2").Where(Eq{"a": 1}).ToSQL()
25+
assert.NoError(t, err)
26+
assert.EqualValues(t, "UPDATE table2 SET a=?,b=b+? WHERE a=?", sql)
27+
assert.EqualValues(t, []interface{}{2, 1, 1}, args)
28+
29+
sql, args, err = Update(Eq{"a": 2, "b": Incr(1), "c": Decr(1), "d": Expr("select count(*) from table2")}).From("table2").Where(Eq{"a": 1}).ToSQL()
30+
assert.NoError(t, err)
31+
assert.EqualValues(t, "UPDATE table2 SET a=?,b=b+?,c=c-?,d=(select count(*) from table2) WHERE a=?", sql)
32+
assert.EqualValues(t, []interface{}{2, 1, 1, 1}, args)
33+
34+
sql, args, err = Update(Eq{"a": 2}).Where(Eq{"a": 1}).ToSQL()
35+
assert.Error(t, err)
36+
assert.EqualValues(t, ErrNoTableName, err)
37+
38+
sql, args, err = Update(Eq{}).From("table1").Where(Eq{"a": 1}).ToSQL()
39+
assert.Error(t, err)
40+
assert.EqualValues(t, ErrNoColumnToUpdate, err)
41+
}

error.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ var (
1717
ErrNeedMoreArguments = errors.New("Need more sql arguments")
1818
// ErrNoTableName no table name
1919
ErrNoTableName = errors.New("No table indicated")
20+
// ErrNoColumnToUpdate no column to update
21+
ErrNoColumnToUpdate = errors.New("No column to be update")
2022
)

0 commit comments

Comments
 (0)