diff --git a/session_delete.go b/session_delete.go index f8a4c665..465e3949 100644 --- a/session_delete.go +++ b/session_delete.go @@ -29,6 +29,7 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error { cacher := session.engine.getCacher2(session.statement.RefTable) tableName := session.statement.TableName() + pkColumns := session.statement.RefTable.PKColumns() ids, err := core.GetCacheSql(cacher, tableName, newsql, args) if err != nil { resultsSlice, err := session.queryBytes(newsql, args...) @@ -40,7 +41,7 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error { for _, data := range resultsSlice { var id int64 var pk core.PK = make([]interface{}, 0) - for _, col := range session.statement.RefTable.PKColumns() { + for _, col := range pkColumns { if v, ok := data[col.Name]; !ok { return errors.New("no id") } else if col.SQLType.IsText() { diff --git a/session_delete_test.go b/session_delete_test.go index 7eddd4cd..eb3aec68 100644 --- a/session_delete_test.go +++ b/session_delete_test.go @@ -137,3 +137,32 @@ func TestDeleted(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 2, len(records3)) } + +func TestCacheDelete(t *testing.T) { + assert.NoError(t, prepareEngine()) + + cacher := NewLRUCacher(NewMemoryStore(), 1000) + testEngine.SetDefaultCacher(cacher) + + type CacheDeleteStruct struct { + Id int64 + } + + err := testEngine.CreateTables(&CacheDeleteStruct{}) + assert.NoError(t, err) + + _, err = testEngine.Insert(&CacheDeleteStruct{}) + assert.NoError(t, err) + + aff, err := testEngine.Delete(&CacheDeleteStruct{ + Id: 1, + }) + assert.NoError(t, err) + assert.EqualValues(t, aff, 1) + + aff, err = testEngine.Unscoped().Delete(&CacheDeleteStruct{ + Id: 1, + }) + assert.NoError(t, err) + assert.EqualValues(t, aff, 0) +}