From 0fdfa8d8de76afabf7dc5348bb245916eda04c61 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 5 Aug 2017 10:46:29 +0800 Subject: [PATCH] fix bug on update (#676) --- session_update_test.go | 30 ++++++++++++++++++++++++++++++ statement.go | 3 +++ 2 files changed, 33 insertions(+) diff --git a/session_update_test.go b/session_update_test.go index 31391f24..70582551 100644 --- a/session_update_test.go +++ b/session_update_test.go @@ -1123,3 +1123,33 @@ func TestNoUpdate(t *testing.T) { assert.Error(t, err) assert.EqualValues(t, "No content found to be updated", err.Error()) } + +func TestNewUpdate(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type TbUserInfo struct { + Id int64 `xorm:"pk autoincr unique BIGINT" json:"id"` + Phone string `xorm:"not null unique VARCHAR(20)" json:"phone"` + UserName string `xorm:"VARCHAR(20)" json:"user_name"` + Gender int `xorm:"default 0 INTEGER" json:"gender"` + Pw string `xorm:"VARCHAR(100)" json:"pw"` + Token string `xorm:"TEXT" json:"token"` + Avatar string `xorm:"TEXT" json:"avatar"` + Extras interface{} `xorm:"JSON" json:"extras"` + Created time.Time `xorm:"DATETIME created"` + Updated time.Time `xorm:"DATETIME updated"` + Deleted time.Time `xorm:"DATETIME deleted"` + } + + assertSync(t, new(TbUserInfo)) + + targetUsr := TbUserInfo{Phone: "13126564922"} + changeUsr := TbUserInfo{Token: "ABCDEFG"} + af, err := testEngine.Update(&changeUsr, &targetUsr) + assert.NoError(t, err) + assert.EqualValues(t, 0, af) + + af, err = testEngine.Table(new(TbUserInfo)).Where("phone=?", 13126564922).Update(&changeUsr) + assert.NoError(t, err) + assert.EqualValues(t, 0, af) +} diff --git a/statement.go b/statement.go index b4d2d877..50008d1d 100644 --- a/statement.go +++ b/statement.go @@ -272,6 +272,9 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{}, fieldValue := *fieldValuePtr fieldType := reflect.TypeOf(fieldValue.Interface()) + if fieldType == nil { + continue + } requiredField := useAllCols includeNil := useAllCols