Merge branch 'master' into lunny/refactor_writer

This commit is contained in:
Lunny Xiao 2023-07-20 18:29:13 +08:00
commit 49285501e2
4 changed files with 64 additions and 6 deletions

View File

@ -41,7 +41,7 @@ func String2Time(s string, originalLocation *time.Location, convertedLocation *t
dt = dt.In(convertedLocation) dt = dt.In(convertedLocation)
return &dt, nil return &dt, nil
} else if len(s) >= 21 && s[10] == 'T' && s[19] == '.' { } else if len(s) >= 21 && s[10] == 'T' && s[19] == '.' {
dt, err := time.Parse(time.RFC3339, s) dt, err := time.Parse(time.RFC3339Nano, s)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -360,15 +360,15 @@ func (engine *Engine) NoAutoCondition(no ...bool) *Session {
return session.NoAutoCondition(no...) return session.NoAutoCondition(no...)
} }
func (engine *Engine) loadTableInfo(table *schemas.Table) error { func (engine *Engine) loadTableInfo(ctx context.Context, table *schemas.Table) error {
colSeq, cols, err := engine.dialect.GetColumns(engine.db, engine.defaultContext, table.Name) colSeq, cols, err := engine.dialect.GetColumns(engine.db, ctx, table.Name)
if err != nil { if err != nil {
return err return err
} }
for _, name := range colSeq { for _, name := range colSeq {
table.AddColumn(cols[name]) table.AddColumn(cols[name])
} }
indexes, err := engine.dialect.GetIndexes(engine.db, engine.defaultContext, table.Name) indexes, err := engine.dialect.GetIndexes(engine.db, ctx, table.Name)
if err != nil { if err != nil {
return err return err
} }
@ -404,7 +404,7 @@ func (engine *Engine) DBMetas() ([]*schemas.Table, error) {
} }
for _, table := range tables { for _, table := range tables {
if err = engine.loadTableInfo(table); err != nil { if err = engine.loadTableInfo(engine.defaultContext, table); err != nil {
return nil, err return nil, err
} }
} }

View File

@ -6,9 +6,11 @@ package integrations
import ( import (
"fmt" "fmt"
"strconv"
"strings" "strings"
"testing" "testing"
"time" "time"
"xorm.io/xorm/convert"
"xorm.io/xorm/internal/utils" "xorm.io/xorm/internal/utils"
@ -619,3 +621,59 @@ func TestTimestamp(t *testing.T) {
assert.EqualValues(t, formatTime(d3.InsertTime, 6), formatTime(d4.InsertTime, 6)) assert.EqualValues(t, formatTime(d3.InsertTime, 6), formatTime(d4.InsertTime, 6))
}*/ }*/
} }
func TestString2Time(t *testing.T) {
loc, err := time.LoadLocation("Asia/Shanghai")
assert.NoError(t, err)
var timeTmp1 = time.Date(2023, 7, 14, 11, 30, 0, 0, loc)
var timeTmp2 = time.Date(2023, 7, 14, 0, 0, 0, 0, loc)
var time1StampStr = strconv.FormatInt(timeTmp1.Unix(), 10)
var timeStr = "0000-00-00 00:00:00"
dt, err := convert.String2Time(timeStr, time.Local, time.Local)
assert.NoError(t, err)
assert.True(t, dt.Nanosecond() == 0)
timeStr = "0001-01-01 00:00:00"
dt, err = convert.String2Time(timeStr, time.Local, time.Local)
assert.NoError(t, err)
assert.True(t, dt.Nanosecond() == 0)
timeStr = "2023-07-14 11:30:00"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp1.In(time.UTC).Equal(*dt))
timeStr = "2023-07-14T11:30:00Z"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp1.In(time.UTC).Equal(*dt))
timeStr = "2023-07-14T11:30:00+08:00"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp1.In(time.UTC).Equal(*dt))
timeStr = "2023-07-14T11:30:00.00000000+08:00"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp1.In(time.UTC).Equal(*dt))
timeStr = "0000-00-00"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, dt.Nanosecond() == 0)
timeStr = "0001-01-01"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, dt.Nanosecond() == 0)
timeStr = "2023-07-14"
dt, err = convert.String2Time(timeStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp2.In(time.UTC).Equal(*dt))
dt, err = convert.String2Time(time1StampStr, loc, time.UTC)
assert.NoError(t, err)
assert.True(t, timeTmp1.In(time.UTC).Equal(*dt))
}

View File

@ -116,7 +116,7 @@ func (session *Session) SyncWithOptions(opts SyncOptions, beans ...interface{})
} }
// this will modify an old table // this will modify an old table
if err = engine.loadTableInfo(oriTable); err != nil { if err = engine.loadTableInfo(session.ctx, oriTable); err != nil {
return nil, err return nil, err
} }