From bf55bb821828e241f6e23dada8e6b4136458fab9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 3 Nov 2020 14:37:02 +0800 Subject: [PATCH] Fix update bug --- integrations/session_update_test.go | 14 ++++++++++++++ session_update.go | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/integrations/session_update_test.go b/integrations/session_update_test.go index 07c722bd..f2105e2b 100644 --- a/integrations/session_update_test.go +++ b/integrations/session_update_test.go @@ -15,6 +15,7 @@ import ( "xorm.io/xorm/internal/statements" "xorm.io/xorm/internal/utils" "xorm.io/xorm/names" + "xorm.io/xorm/schemas" ) func TestUpdateMap(t *testing.T) { @@ -48,6 +49,19 @@ func TestUpdateMap(t *testing.T) { assert.Error(t, err) assert.True(t, statements.IsIDConditionWithNoTableErr(err)) assert.EqualValues(t, 0, cnt) + + cnt, err = testEngine.Table("update_table").Update(map[string]interface{}{ + "name": "test2", + "age": 36, + }, &UpdateTable{ + Id: tb.Id, + }) + assert.NoError(t, err) + if testEngine.Dialect().URI().DBType == schemas.SQLITE { + assert.EqualValues(t, 1, cnt) + } else { + assert.EqualValues(t, 0, cnt) + } } func TestUpdateLimit(t *testing.T) { diff --git a/session_update.go b/session_update.go index 7df8c752..0adac25e 100644 --- a/session_update.go +++ b/session_update.go @@ -273,8 +273,15 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 k = ct.Elem().Kind() } if k == reflect.Struct { + var refTable = session.statement.RefTable + if refTable == nil { + refTable, err = session.engine.TableInfo(condiBean[0]) + if err != nil { + return 0, err + } + } var err error - autoCond, err = session.statement.BuildConds(session.statement.RefTable, condiBean[0], true, true, false, true, false) + autoCond, err = session.statement.BuildConds(refTable, condiBean[0], true, true, false, true, false) if err != nil { return 0, err }