From 7e11f585aac4898822e5aa3a41379f98694e6c81 Mon Sep 17 00:00:00 2001 From: CyJaySong Date: Fri, 14 Jul 2023 08:39:36 +0800 Subject: [PATCH] Fix deleted tag attribute zeroTime is not DatabaseTZ --- integrations/session_insert_test.go | 40 +++++++++++++++++++++++++++++ session_insert.go | 3 ++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/integrations/session_insert_test.go b/integrations/session_insert_test.go index 084deb38..03fe74a1 100644 --- a/integrations/session_insert_test.go +++ b/integrations/session_insert_test.go @@ -1202,3 +1202,43 @@ func TestInsertMultipleMap(t *testing.T) { Name: "xiaolunwen", }, res[1]) } + +func TestInsertNotDeleted(t *testing.T) { + assert.NoError(t, PrepareEngine()) + zeroTime := time.Date(1, 1, 1, 0, 0, 0, 0, testEngine.GetTZDatabase()) + + type InsertDeletedStructNotRight struct { + ID uint64 `xorm:"'ID' pk autoincr"` + DeletedAt time.Time `xorm:"'DELETED_AT' deleted notnull"` + } + // notnull tag will be ignored + err := testEngine.Sync(new(InsertDeletedStructNotRight)) + assert.NoError(t, err) + + type InsertDeletedStruct struct { + ID uint64 `xorm:"'ID' pk autoincr"` + DeletedAt time.Time `xorm:"'DELETED_AT' deleted"` + } + + assert.NoError(t, testEngine.Sync(new(InsertDeletedStruct))) + + var v1 InsertDeletedStructNotRight + _, err = testEngine.Insert(&v1) + assert.NoError(t, err) + + var v2 InsertDeletedStructNotRight + has, err := testEngine.Get(&v2) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, v2.DeletedAt.In(testEngine.GetTZDatabase()).Format("2006-01-02 15:04:05"), zeroTime.Format("2006-01-02 15:04:05")) + + var v3 InsertDeletedStruct + _, err = testEngine.Insert(&v3) + assert.NoError(t, err) + + var v4 InsertDeletedStruct + has, err = testEngine.Get(&v4) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, v4.DeletedAt.In(testEngine.GetTZDatabase()).Format("2006-01-02 15:04:05"), zeroTime.Format("2006-01-02 15:04:05")) +} diff --git a/session_insert.go b/session_insert.go index cfa26d39..4067c3a8 100644 --- a/session_insert.go +++ b/session_insert.go @@ -482,7 +482,8 @@ func (session *Session) genInsertColumns(bean interface{}) ([]string, []interfac } if col.IsDeleted { - arg, err := dialects.FormatColumnTime(session.engine.dialect, session.engine.DatabaseTZ, col, time.Time{}) + zeroTime := time.Date(1, 1, 1, 0, 0, 0, 0, session.engine.DatabaseTZ) + arg, err := dialects.FormatColumnTime(session.engine.dialect, session.engine.DatabaseTZ, col, zeroTime) if err != nil { return nil, nil, err }