Skip to content

Commit 3a1f656

Browse files
authored
Fix: update not found when updating unchanged record (#39)
* update not found spec * fix mysql driver
1 parent 8f6fc6c commit 3a1f656

File tree

5 files changed

+41
-0
lines changed

5 files changed

+41
-0
lines changed

adapter/mysql/mysql.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ var _ rel.Adapter = (*Adapter)(nil)
3131
func Open(dsn string) (*Adapter, error) {
3232
var err error
3333

34+
// force clientFoundRows=true
35+
// this allows not found record check when updating a record.
36+
if strings.ContainsRune(dsn, '?') {
37+
dsn += "&clientFoundRows=true"
38+
} else {
39+
dsn += "?clientFoundRows=true"
40+
}
41+
3442
adapter := &Adapter{
3543
Adapter: &sql.Adapter{
3644
Config: &sql.Config{

adapter/mysql/mysql_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ func TestAdapter_specs(t *testing.T) {
101101

102102
// Update Specs
103103
specs.Update(t, repo)
104+
specs.UpdateNotFound(t, repo)
104105
specs.UpdateHasManyInsert(t, repo)
105106
specs.UpdateHasManyUpdate(t, repo)
106107
specs.UpdateHasManyReplace(t, repo)
@@ -121,6 +122,20 @@ func TestAdapter_specs(t *testing.T) {
121122
specs.ForeignKeyConstraint(t, repo)
122123
}
123124

125+
func TestAdapter_Open(t *testing.T) {
126+
// with parameter
127+
assert.NotPanics(t, func() {
128+
adapter, _ := Open("root@tcp(localhost:3306)/rel_test?charset=utf8")
129+
defer adapter.Close()
130+
})
131+
132+
// without paremeter
133+
assert.NotPanics(t, func() {
134+
adapter, _ := Open("root@tcp(localhost:3306)/rel_test")
135+
defer adapter.Close()
136+
})
137+
}
138+
124139
// func TestAdapter_InsertAll_error(t *testing.T) {
125140
// adapter, err := Open(dsn())
126141
// paranoid.Panic(err, "failed to open database connection")

adapter/postgres/postgres_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ func TestAdapter_specs(t *testing.T) {
106106

107107
// Update Specs
108108
specs.Update(t, repo)
109+
specs.UpdateNotFound(t, repo)
109110
specs.UpdateHasManyInsert(t, repo)
110111
specs.UpdateHasManyUpdate(t, repo)
111112
specs.UpdateHasManyReplace(t, repo)

adapter/specs/update.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func Update(t *testing.T, repo rel.Repository) {
3232
assert.Equal(t, 23, user.Age)
3333
assert.Equal(t, &note, user.Note)
3434

35+
// update unchanged
36+
assert.Nil(t, repo.Update(ctx, &user))
37+
3538
var (
3639
queried User
3740
)
@@ -42,6 +45,19 @@ func Update(t *testing.T, repo rel.Repository) {
4245
assert.Equal(t, user, queried)
4346
}
4447

48+
// UpdateNotFound tests specification for updating a not found record.
49+
func UpdateNotFound(t *testing.T, repo rel.Repository) {
50+
var (
51+
user = User{
52+
ID: 0,
53+
Name: "update",
54+
}
55+
)
56+
57+
// update unchanged
58+
assert.Equal(t, rel.NotFoundError{}, repo.Update(ctx, &user))
59+
}
60+
4561
// UpdateHasManyInsert tests specification for updating a record and inserting has many association.
4662
func UpdateHasManyInsert(t *testing.T, repo rel.Repository) {
4763
var (

adapter/sqlite3/sqlite3_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ func TestAdapter_specs(t *testing.T) {
104104

105105
// Update Specs
106106
specs.Update(t, repo)
107+
specs.UpdateNotFound(t, repo)
107108
specs.UpdateHasManyInsert(t, repo)
108109
specs.UpdateHasManyUpdate(t, repo)
109110
specs.UpdateHasManyReplace(t, repo)

0 commit comments

Comments
 (0)