From d6e31ce7156c2d31ccb8217b1bd366291478e1d1 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 21 Feb 2020 17:24:28 +0800 Subject: [PATCH] Fix int time deleted bug --- engine.go | 5 +++-- time_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/engine.go b/engine.go index 21b0ec05..e95d97b1 100644 --- a/engine.go +++ b/engine.go @@ -92,10 +92,11 @@ func (engine *Engine) BufferSize(size int) *Session { // CondDeleted returns the conditions whether a record is soft deleted. func (engine *Engine) CondDeleted(colName string) builder.Cond { + cond := builder.IsNull{colName}.Or(builder.Eq{colName: 0}) if engine.dialect.DBType() == core.MSSQL { - return builder.IsNull{colName} + return cond } - return builder.IsNull{colName}.Or(builder.Eq{colName: zeroTime1}) + return cond.Or(builder.Eq{colName: zeroTime1}) } // ShowSQL show SQL statement or not on logger if log level is great than INFO diff --git a/time_test.go b/time_test.go index 9a821983..6ee97fe1 100644 --- a/time_test.go +++ b/time_test.go @@ -477,3 +477,40 @@ func TestCustomTimeUserDeletedDiffLoc(t *testing.T) { assert.EqualValues(t, formatTime(time.Time(user3.DeletedAt)), formatTime(time.Time(user4.DeletedAt))) fmt.Println("user3", user3.DeletedAt, user4.DeletedAt) } + +func TestDeletedInt64(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type DeletedInt64Struct struct { + Id int64 + Deleted int64 `xorm:"deleted default(0) notnull"` // timestamp + } + + assertSync(t, new(DeletedInt64Struct)) + + var d1 DeletedInt64Struct + cnt, err := testEngine.Insert(&d1) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var d2 DeletedInt64Struct + has, err := testEngine.ID(d1.Id).Get(&d2) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, d1, d2) + + cnt, err = testEngine.ID(d1.Id).NoAutoCondition().Delete(&d1) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var d3 DeletedInt64Struct + has, err = testEngine.ID(d1.Id).Get(&d3) + assert.NoError(t, err) + assert.False(t, has) + + var d4 DeletedInt64Struct + has, err = testEngine.ID(d1.Id).Unscoped().Get(&d4) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, d1, d4) +}