From d9e6f21d604f9363563c1b6432b43e82b6c630f7 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 20 Jun 2017 15:43:21 +0800 Subject: [PATCH] fix bugs cols with incr when update (#623) --- helpers.go | 4 +++ session_update_test.go | 71 +++++++++++++++++------------------------- 2 files changed, 32 insertions(+), 43 deletions(-) diff --git a/helpers.go b/helpers.go index 5e54466e..8c0f7574 100644 --- a/helpers.go +++ b/helpers.go @@ -400,6 +400,10 @@ func genCols(table *core.Table, session *Session, bean interface{}, useCol bool, if session.Statement.ColumnStr != "" { if _, ok := getFlagForColumn(session.Statement.columnMap, col); !ok { continue + } else if _, ok := session.Statement.incrColumns[col.Name]; ok { + continue + } else if _, ok := session.Statement.decrColumns[col.Name]; ok { + continue } } if session.Statement.OmitStr != "" { diff --git a/session_update_test.go b/session_update_test.go index 2d41aceb..ef4c1e70 100644 --- a/session_update_test.go +++ b/session_update_test.go @@ -249,8 +249,9 @@ type UpdateMustCols struct { } type UpdateIncr struct { - Id int64 - Cnt int + Id int64 + Cnt int + Name string } type Article struct { @@ -545,50 +546,34 @@ func TestUpdate1(t *testing.T) { return } } +} - { +func TestUpdateIncrDecr(t *testing.T) { + assert.NoError(t, prepareEngine()) - col1 := &UpdateIncr{} - err = testEngine.Sync(col1) - if err != nil { - t.Error(err) - panic(err) - } - - _, err = testEngine.Insert(col1) - if err != nil { - t.Error(err) - panic(err) - } - - cnt, err := testEngine.Id(col1.Id).Incr(testEngine.ColumnMapper.Obj2Table("Cnt")).Update(col1) - if err != nil { - t.Error(err) - panic(err) - } - if cnt != 1 { - err = errors.New("update incr failed") - t.Error(err) - panic(err) - } - - newCol := new(UpdateIncr) - has, err := testEngine.Id(col1.Id).Get(newCol) - if err != nil { - t.Error(err) - panic(err) - } - if !has { - err = errors.New("has incr failed") - t.Error(err) - panic(err) - } - if 1 != newCol.Cnt { - err = fmt.Errorf("incr failed %v %v %v", newCol.Cnt, newCol, col1) - t.Error(err) - panic(err) - } + col1 := &UpdateIncr{ + Name: "test", } + assert.NoError(t, testEngine.Sync(col1)) + + _, err := testEngine.Insert(col1) + assert.NoError(t, err) + + colName := testEngine.ColumnMapper.Obj2Table("Cnt") + + cnt, err := testEngine.Id(col1.Id).Incr(colName).Update(col1) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + newCol := new(UpdateIncr) + has, err := testEngine.Id(col1.Id).Get(newCol) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, 1, newCol.Cnt) + + cnt, err = testEngine.Id(col1.Id).Cols(colName).Incr(colName).Update(col1) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) } type UpdatedUpdate struct {