From 54ec855eca4f05be86fdf3d91375e671fb44c1bb Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 9 Jun 2021 11:32:38 +0800 Subject: [PATCH 1/3] Fix bug didn't reset statement on update --- integrations/session_find_test.go | 26 ++++++++++++++++++++++++++ session_update.go | 9 ++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/integrations/session_find_test.go b/integrations/session_find_test.go index cd623417..0ea12e26 100644 --- a/integrations/session_find_test.go +++ b/integrations/session_find_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "xorm.io/xorm" "xorm.io/xorm/internal/utils" "xorm.io/xorm/names" @@ -1020,3 +1021,28 @@ func TestDistinctAndCols(t *testing.T) { assert.EqualValues(t, 1, len(names)) assert.EqualValues(t, "test", names[0]) } + +func TestUpdateFind(t *testing.T) { + type TestUpdateFind struct { + Id int64 + Name string + } + + assert.NoError(t, PrepareEngine()) + assertSync(t, new(TestUpdateFind)) + + session := testEngine.NewSession() + defer session.Close() + + var tuf = TestUpdateFind{ + Name: "test", + } + _, err := session.Insert(&tuf) + assert.NoError(t, err) + _, err = session.Where("id = ?", tuf.Id).Update(&TestUpdateFind{}) + assert.EqualError(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) + + var tufs []TestUpdateFind + err = session.Where("id = ?", tuf.Id).Find(&tufs) + assert.NoError(t, err) +} diff --git a/session_update.go b/session_update.go index 9e4cddb1..f791bb2d 100644 --- a/session_update.go +++ b/session_update.go @@ -17,6 +17,11 @@ import ( "xorm.io/xorm/schemas" ) +// enumerated all errors +var ( + ErrNoColumnsTobeUpdated = errors.New("no columns found to be updated") +) + func (session *Session) cacheUpdate(table *schemas.Table, tableName, sqlStr string, args ...interface{}) error { if table == nil || session.tx != nil { @@ -144,6 +149,8 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 defer session.Close() } + defer session.resetStatement() + if session.statement.LastError != nil { return 0, session.statement.LastError } @@ -329,7 +336,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 } if len(colNames) <= 0 { - return 0, errors.New("No content found to be updated") + return 0, ErrNoColumnsTobeUpdated } condSQL, condArgs, err = session.statement.GenCondSQL(cond) -- 2.40.1 From b070bda8ff86ce458eb485e7dc5a4d3eebc51436 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 9 Jun 2021 16:59:22 +0800 Subject: [PATCH 2/3] Fix test --- integrations/session_update_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integrations/session_update_test.go b/integrations/session_update_test.go index df0631c4..bd0c6c1f 100644 --- a/integrations/session_update_test.go +++ b/integrations/session_update_test.go @@ -792,7 +792,7 @@ func TestNoUpdate(t *testing.T) { _, err = testEngine.ID(1).Update(&NoUpdate{}) assert.Error(t, err) - assert.EqualValues(t, "No content found to be updated", err.Error()) + assert.EqualValues(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) } func TestNewUpdate(t *testing.T) { @@ -922,7 +922,7 @@ func TestDeletedUpdate(t *testing.T) { assert.EqualValues(t, 1, cnt) cnt, err = testEngine.ID(s.Id).Cols("deleted_at").Update(&DeletedUpdatedStruct{}) - assert.EqualValues(t, "No content found to be updated", err.Error()) + assert.EqualValues(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) assert.EqualValues(t, 0, cnt) cnt, err = testEngine.ID(s.Id).Unscoped().Cols("deleted_at").Update(&DeletedUpdatedStruct{}) -- 2.40.1 From b37c6e8cbf5a3a148270cd9c9b89699951e203fd Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 11 Jun 2021 13:38:49 +0800 Subject: [PATCH 3/3] Fix test --- integrations/session_update_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integrations/session_update_test.go b/integrations/session_update_test.go index bd0c6c1f..15d2f694 100644 --- a/integrations/session_update_test.go +++ b/integrations/session_update_test.go @@ -792,7 +792,7 @@ func TestNoUpdate(t *testing.T) { _, err = testEngine.ID(1).Update(&NoUpdate{}) assert.Error(t, err) - assert.EqualValues(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) + assert.EqualError(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) } func TestNewUpdate(t *testing.T) { @@ -922,7 +922,7 @@ func TestDeletedUpdate(t *testing.T) { assert.EqualValues(t, 1, cnt) cnt, err = testEngine.ID(s.Id).Cols("deleted_at").Update(&DeletedUpdatedStruct{}) - assert.EqualValues(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) + assert.EqualError(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) assert.EqualValues(t, 0, cnt) cnt, err = testEngine.ID(s.Id).Unscoped().Cols("deleted_at").Update(&DeletedUpdatedStruct{}) -- 2.40.1