Improve code
This commit is contained in:
parent
02c8a4b25d
commit
dcee43899e
|
@ -24,6 +24,7 @@ import (
|
|||
"xorm.io/xorm/caches"
|
||||
"xorm.io/xorm/core"
|
||||
"xorm.io/xorm/dialects"
|
||||
"xorm.io/xorm/internal/utils"
|
||||
"xorm.io/xorm/log"
|
||||
"xorm.io/xorm/names"
|
||||
"xorm.io/xorm/schemas"
|
||||
|
@ -80,7 +81,7 @@ func (engine *Engine) CondDeleted(col *schemas.Column) builder.Cond {
|
|||
} else {
|
||||
// FIXME: mssql: The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
|
||||
if engine.dialect.DBType() != schemas.MSSQL {
|
||||
cond = builder.Eq{col.Name: zeroTime1}
|
||||
cond = builder.Eq{col.Name: utils.ZeroTime1}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// str2PK convert string value to primary key value according to tp
|
||||
|
@ -200,3 +201,7 @@ func sliceEq(left, right []string) bool {
|
|||
func indexName(tableName, idxName string) string {
|
||||
return fmt.Sprintf("IDX_%v_%v", tableName, idxName)
|
||||
}
|
||||
|
||||
func formatTime(t time.Time) string {
|
||||
return t.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
// Copyright 2017 The Xorm Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package xorm
|
||||
|
||||
import "time"
|
||||
|
||||
const (
|
||||
zeroTime0 = "0000-00-00 00:00:00"
|
||||
zeroTime1 = "0001-01-01 00:00:00"
|
||||
)
|
||||
|
||||
func formatTime(t time.Time) string {
|
||||
return t.Format("2006-01-02 15:04:05")
|
||||
}
|
||||
|
||||
func isTimeZero(t time.Time) bool {
|
||||
return t.IsZero() || formatTime(t) == zeroTime0 ||
|
||||
formatTime(t) == zeroTime1
|
||||
}
|
25
interface.go
25
interface.go
|
@ -7,6 +7,7 @@ package xorm
|
|||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
|
@ -122,3 +123,27 @@ var (
|
|||
_ EngineInterface = &Engine{}
|
||||
_ EngineInterface = &EngineGroup{}
|
||||
)
|
||||
|
||||
// JSONInterface represents an interface to handle json data
|
||||
type JSONInterface interface {
|
||||
Marshal(v interface{}) ([]byte, error)
|
||||
Unmarshal(data []byte, v interface{}) error
|
||||
}
|
||||
|
||||
var (
|
||||
// DefaultJSONHandler default json handler
|
||||
DefaultJSONHandler JSONInterface = StdJSON{}
|
||||
)
|
||||
|
||||
// StdJSON implements JSONInterface via encoding/json
|
||||
type StdJSON struct{}
|
||||
|
||||
// Marshal implements JSONInterface
|
||||
func (StdJSON) Marshal(v interface{}) ([]byte, error) {
|
||||
return json.Marshal(v)
|
||||
}
|
||||
|
||||
// Unmarshal implements JSONInterface
|
||||
func (StdJSON) Unmarshal(data []byte, v interface{}) error {
|
||||
return json.Unmarshal(data, v)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ package utils
|
|||
|
||||
import (
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Zeroable interface {
|
||||
|
@ -96,3 +97,13 @@ func IsArrayZero(v reflect.Value) bool {
|
|||
|
||||
return true
|
||||
}
|
||||
|
||||
const (
|
||||
ZeroTime0 = "0000-00-00 00:00:00"
|
||||
ZeroTime1 = "0001-01-01 00:00:00"
|
||||
)
|
||||
|
||||
func IsTimeZero(t time.Time) bool {
|
||||
return t.IsZero() || t.Format("2006-01-02 15:04:05") == ZeroTime0 ||
|
||||
t.Format("2006-01-02 15:04:05") == ZeroTime1
|
||||
}
|
||||
|
|
31
json.go
31
json.go
|
@ -1,31 +0,0 @@
|
|||
// Copyright 2019 The Xorm Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package xorm
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
// JSONInterface represents an interface to handle json data
|
||||
type JSONInterface interface {
|
||||
Marshal(v interface{}) ([]byte, error)
|
||||
Unmarshal(data []byte, v interface{}) error
|
||||
}
|
||||
|
||||
var (
|
||||
// DefaultJSONHandler default json handler
|
||||
DefaultJSONHandler JSONInterface = StdJSON{}
|
||||
)
|
||||
|
||||
// StdJSON implements JSONInterface via encoding/json
|
||||
type StdJSON struct{}
|
||||
|
||||
// Marshal implements JSONInterface
|
||||
func (StdJSON) Marshal(v interface{}) ([]byte, error) {
|
||||
return json.Marshal(v)
|
||||
}
|
||||
|
||||
// Unmarshal implements JSONInterface
|
||||
func (StdJSON) Unmarshal(data []byte, v interface{}) error {
|
||||
return json.Unmarshal(data, v)
|
||||
}
|
|
@ -14,6 +14,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"xorm.io/xorm/internal/utils"
|
||||
"xorm.io/xorm/schemas"
|
||||
)
|
||||
|
||||
|
@ -27,7 +28,7 @@ func (session *Session) str2Time(col *schemas.Column, data string) (outTime time
|
|||
parseLoc = col.TimeZone
|
||||
}
|
||||
|
||||
if sdata == zeroTime0 || sdata == zeroTime1 {
|
||||
if sdata == utils.ZeroTime0 || sdata == utils.ZeroTime1 {
|
||||
} else if !strings.ContainsAny(sdata, "- :") { // !nashtsai! has only found that mymysql driver is using this for time type column
|
||||
// time stamp
|
||||
sd, err := strconv.ParseInt(sdata, 10, 64)
|
||||
|
|
17
time_test.go
17
time_test.go
|
@ -11,6 +11,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"xorm.io/xorm/internal/utils"
|
||||
)
|
||||
|
||||
func TestTimeUserTime(t *testing.T) {
|
||||
|
@ -282,7 +283,7 @@ func TestTimeUserDeleted(t *testing.T) {
|
|||
assert.EqualValues(t, formatTime(user.CreatedAt), formatTime(user2.CreatedAt))
|
||||
assert.EqualValues(t, user.UpdatedAt.Unix(), user2.UpdatedAt.Unix())
|
||||
assert.EqualValues(t, formatTime(user.UpdatedAt), formatTime(user2.UpdatedAt))
|
||||
assert.True(t, isTimeZero(user2.DeletedAt))
|
||||
assert.True(t, utils.IsTimeZero(user2.DeletedAt))
|
||||
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
|
||||
fmt.Println("user2 str", user2.CreatedAtStr, user2.UpdatedAtStr)
|
||||
|
||||
|
@ -290,7 +291,7 @@ func TestTimeUserDeleted(t *testing.T) {
|
|||
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
assert.True(t, !isTimeZero(user3.DeletedAt))
|
||||
assert.True(t, !utils.IsTimeZero(user3.DeletedAt))
|
||||
|
||||
var user4 UserDeleted
|
||||
has, err = testEngine.Unscoped().Get(&user4)
|
||||
|
@ -336,14 +337,14 @@ func TestTimeUserDeletedDiffLoc(t *testing.T) {
|
|||
assert.EqualValues(t, formatTime(user.CreatedAt), formatTime(user2.CreatedAt))
|
||||
assert.EqualValues(t, user.UpdatedAt.Unix(), user2.UpdatedAt.Unix())
|
||||
assert.EqualValues(t, formatTime(user.UpdatedAt), formatTime(user2.UpdatedAt))
|
||||
assert.True(t, isTimeZero(user2.DeletedAt))
|
||||
assert.True(t, utils.IsTimeZero(user2.DeletedAt))
|
||||
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
|
||||
|
||||
var user3 UserDeleted2
|
||||
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
assert.True(t, !isTimeZero(user3.DeletedAt))
|
||||
assert.True(t, !utils.IsTimeZero(user3.DeletedAt))
|
||||
|
||||
var user4 UserDeleted2
|
||||
has, err = testEngine.Unscoped().Get(&user4)
|
||||
|
@ -407,14 +408,14 @@ func TestCustomTimeUserDeleted(t *testing.T) {
|
|||
assert.EqualValues(t, formatTime(time.Time(user.CreatedAt)), formatTime(time.Time(user2.CreatedAt)))
|
||||
assert.EqualValues(t, user.UpdatedAt.Unix(), user2.UpdatedAt.Unix())
|
||||
assert.EqualValues(t, formatTime(time.Time(user.UpdatedAt)), formatTime(time.Time(user2.UpdatedAt)))
|
||||
assert.True(t, isTimeZero(time.Time(user2.DeletedAt)))
|
||||
assert.True(t, utils.IsTimeZero(time.Time(user2.DeletedAt)))
|
||||
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
|
||||
|
||||
var user3 UserDeleted3
|
||||
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
assert.True(t, !isTimeZero(time.Time(user3.DeletedAt)))
|
||||
assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt)))
|
||||
|
||||
var user4 UserDeleted3
|
||||
has, err = testEngine.Unscoped().Get(&user4)
|
||||
|
@ -460,14 +461,14 @@ func TestCustomTimeUserDeletedDiffLoc(t *testing.T) {
|
|||
assert.EqualValues(t, formatTime(time.Time(user.CreatedAt)), formatTime(time.Time(user2.CreatedAt)))
|
||||
assert.EqualValues(t, user.UpdatedAt.Unix(), user2.UpdatedAt.Unix())
|
||||
assert.EqualValues(t, formatTime(time.Time(user.UpdatedAt)), formatTime(time.Time(user2.UpdatedAt)))
|
||||
assert.True(t, isTimeZero(time.Time(user2.DeletedAt)))
|
||||
assert.True(t, utils.IsTimeZero(time.Time(user2.DeletedAt)))
|
||||
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
|
||||
|
||||
var user3 UserDeleted4
|
||||
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, 1, cnt)
|
||||
assert.True(t, !isTimeZero(time.Time(user3.DeletedAt)))
|
||||
assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt)))
|
||||
|
||||
var user4 UserDeleted4
|
||||
has, err = testEngine.Unscoped().Get(&user4)
|
||||
|
|
Loading…
Reference in New Issue