Fix the issue of incorrect insertion of data in non UTC time zone zero for numeric types
This commit is contained in:
parent
0311205d4d
commit
747a357ea9
|
@ -22,7 +22,7 @@ func FormatColumnTime(dialect Dialect, dbLocation *time.Location, col *schemas.C
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
if col.SQLType.Name == schemas.TimeStamp || col.SQLType.Name == schemas.TimeStampz {
|
if col.SQLType.Name == schemas.TimeStamp || col.SQLType.Name == schemas.TimeStampz {
|
||||||
t = time.Unix(0, 0)
|
return 0, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -706,6 +706,8 @@ func (statement *Statement) CondDeleted(col *schemas.Column) builder.Cond {
|
||||||
cond := builder.NewCond()
|
cond := builder.NewCond()
|
||||||
if col.SQLType.IsNumeric() {
|
if col.SQLType.IsNumeric() {
|
||||||
cond = builder.Eq{colName: 0}
|
cond = builder.Eq{colName: 0}
|
||||||
|
} else if col.SQLType.Name == schemas.TimeStamp || col.SQLType.Name == schemas.TimeStampz {
|
||||||
|
cond = builder.Eq{colName: 0}
|
||||||
} else {
|
} else {
|
||||||
cond = builder.Eq{colName: utils.ZeroTime1}
|
cond = builder.Eq{colName: utils.ZeroTime1}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1287,6 +1287,44 @@ func TestInsertNotDeletedNum(t *testing.T) {
|
||||||
assert.Equal(t, v4.DeletedAt, int64(0))
|
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 {
|
type MyAutoTimeFields1 struct {
|
||||||
Id int64
|
Id int64
|
||||||
Dt time.Time `xorm:"created DATETIME"`
|
Dt time.Time `xorm:"created DATETIME"`
|
||||||
|
|
Loading…
Reference in New Issue