diff --git a/dialects/time.go b/dialects/time.go index 4a6beb77..81fc2a16 100644 --- a/dialects/time.go +++ b/dialects/time.go @@ -22,7 +22,7 @@ func FormatColumnTime(dialect Dialect, dbLocation *time.Location, col *schemas.C return 0, nil } if col.SQLType.Name == schemas.TimeStamp || col.SQLType.Name == schemas.TimeStampz { - t = time.Unix(0, 0) + return 0, nil } } diff --git a/internal/statements/statement.go b/internal/statements/statement.go index cf4b10c5..61db60c3 100644 --- a/internal/statements/statement.go +++ b/internal/statements/statement.go @@ -706,6 +706,8 @@ func (statement *Statement) CondDeleted(col *schemas.Column) builder.Cond { cond := builder.NewCond() if col.SQLType.IsNumeric() { cond = builder.Eq{colName: 0} + } else if col.SQLType.Name == schemas.TimeStamp || col.SQLType.Name == schemas.TimeStampz { + cond = builder.Eq{colName: 0} } else { cond = builder.Eq{colName: utils.ZeroTime1} } diff --git a/tests/session_insert_test.go b/tests/session_insert_test.go index e0dc73b8..92ccc0d2 100644 --- a/tests/session_insert_test.go +++ b/tests/session_insert_test.go @@ -1287,6 +1287,44 @@ func TestInsertNotDeletedNum(t *testing.T) { assert.Equal(t, v4.DeletedAt, int64(0)) } +func TestInsertNotDeletedTimeStamp(t *testing.T) { + assert.NoError(t, PrepareEngine()) + type TestInsertNotDeletedStructNotRight struct { + ID uint64 `xorm:"'ID' pk autoincr"` + DeletedAt time.Time `xorm:"'DELETED_AT' deleted notnull TIMESTAMP"` + } + // notnull tag will be ignored + err := testEngine.Sync(new(TestInsertNotDeletedStructNotRight)) + assert.NoError(t, err) + + type TestInsertNotDeletedStruct struct { + ID uint64 `xorm:"'ID' pk autoincr"` + DeletedAt time.Time `xorm:"'DELETED_AT' deleted TIMESTAMP"` + } + + assert.NoError(t, testEngine.Sync(new(TestInsertNotDeletedStruct))) + + var v1 TestInsertNotDeletedStructNotRight + _, err = testEngine.Insert(&v1) + assert.NoError(t, err) + + var v2 TestInsertNotDeletedStructNotRight + has, err := testEngine.Get(&v2) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, v2.DeletedAt, time.Unix(0, 0)) + + var v3 TestInsertNotDeletedStruct + _, err = testEngine.Insert(&v3) + assert.NoError(t, err) + + var v4 TestInsertNotDeletedStruct + has, err = testEngine.Get(&v4) + assert.NoError(t, err) + assert.True(t, has) + assert.Equal(t, v4.DeletedAt, time.Time{}) +} + type MyAutoTimeFields1 struct { Id int64 Dt time.Time `xorm:"created DATETIME"`