From 8401f513741c25f381281788328c0b0318942cf5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 3 Aug 2021 23:23:44 +0800 Subject: [PATCH] Fix mssql timestampz --- dialects/mssql.go | 4 ++- integrations/time_test.go | 58 ++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/dialects/mssql.go b/dialects/mssql.go index 584ea61e..b3517fb9 100644 --- a/dialects/mssql.go +++ b/dialects/mssql.go @@ -320,7 +320,7 @@ func (db *mssql) SQLType(c *schemas.Column) string { res = schemas.DateTime } case schemas.TimeStampz: - res = "DATETIMEOFFSET" + res = "DATETIME2" c.Length = 7 case schemas.MediumInt, schemas.TinyInt, schemas.SmallInt, schemas.UnsignedMediumInt, schemas.UnsignedTinyInt, schemas.UnsignedSmallInt: res = schemas.Int @@ -502,6 +502,8 @@ func (db *mssql) GetColumns(queryer core.Queryer, ctx context.Context, tableName col.Length /= 2 col.Length2 /= 2 } + case "DATETIME2": + col.SQLType = schemas.SQLType{Name: schemas.DateTime, DefaultLength: 7, DefaultLength2: 0} case "IMAGE": col.SQLType = schemas.SQLType{Name: schemas.VarBinary, DefaultLength: 0, DefaultLength2: 0} case "NCHAR": diff --git a/integrations/time_test.go b/integrations/time_test.go index 39192dc8..7dd68669 100644 --- a/integrations/time_test.go +++ b/integrations/time_test.go @@ -571,25 +571,51 @@ func TestDeletedInt64(t *testing.T) { } func TestTimestamp(t *testing.T) { - assert.NoError(t, PrepareEngine()) + { + assert.NoError(t, PrepareEngine()) - type TimestampStruct struct { - Id int64 - InsertTime time.Time `xorm:"DATETIME(6)"` + type TimestampStruct struct { + Id int64 + InsertTime time.Time `xorm:"DATETIME(6)"` + } + + assertSync(t, new(TimestampStruct)) + + var d1 = TimestampStruct{ + InsertTime: time.Now(), + } + cnt, err := testEngine.Insert(&d1) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var d2 TimestampStruct + has, err := testEngine.ID(d1.Id).Get(&d2) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, formatTime(d1.InsertTime, 6), formatTime(d2.InsertTime, 6)) } - assertSync(t, new(TimestampStruct)) + { + assert.NoError(t, PrepareEngine()) - var d1 = TimestampStruct{ - InsertTime: time.Now(), + type TimestampzStruct struct { + Id int64 + InsertTime time.Time `xorm:"TIMESTAMPZ"` + } + + assertSync(t, new(TimestampzStruct)) + + var d3 = TimestampzStruct{ + InsertTime: time.Now(), + } + cnt, err := testEngine.Insert(&d3) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var d4 TimestampzStruct + has, err := testEngine.ID(d3.Id).Get(&d4) + assert.NoError(t, err) + assert.True(t, has) + assert.EqualValues(t, formatTime(d3.InsertTime, 6), formatTime(d4.InsertTime, 6)) } - cnt, err := testEngine.Insert(&d1) - assert.NoError(t, err) - assert.EqualValues(t, 1, cnt) - - var d2 TimestampStruct - has, err := testEngine.ID(d1.Id).Get(&d2) - assert.NoError(t, err) - assert.True(t, has) - assert.EqualValues(t, formatTime(d1.InsertTime, 6), formatTime(d2.InsertTime, 6)) }