Merge branch 'master' into sogari-association-preloading

This commit is contained in:
Lunny Xiao 2023-07-27 14:34:13 +08:00
commit 6014c7aa32
37 changed files with 255 additions and 132 deletions

View File

@ -43,6 +43,7 @@ jobs:
TEST_COCKROACH_DBNAME: xorm_test
TEST_COCKROACH_USERNAME: root
TEST_COCKROACH_PASSWORD:
IGNORE_TEST_DELETE_LIMIT: true
run: sleep 20 && make test-cockroach
services:

4
.gitignore vendored
View File

@ -35,7 +35,7 @@ test.db.sql
*coverage.out
test.db
integrations/*.sql
integrations/test_sqlite*
tests/*.sql
tests/test_sqlite*
cover.out
cover.html

View File

@ -9,7 +9,7 @@ SED_INPLACE := sed -i
GO_DIRS := caches contexts integrations core dialects internal log migrate names schemas tags
GOFILES := $(wildcard *.go)
GOFILES += $(shell find $(GO_DIRS) -name "*.go" -type f)
INTEGRATION_PACKAGES := xorm.io/xorm/integrations
INTEGRATION_PACKAGES := xorm.io/xorm/tests
PACKAGES ?= $(filter-out $(INTEGRATION_PACKAGES),$(shell $(GO) list ./...))
TEST_COCKROACH_HOST ?= cockroach:26257

View File

@ -35,6 +35,56 @@ func AsInt64(src interface{}) (int64, error) {
return int64(v), nil
case uint64:
return int64(v), nil
case *int:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *int16:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *int32:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *int8:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *int64:
if v == nil {
return 0, nil
}
return *v, nil
case *uint:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *uint8:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *uint16:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *uint32:
if v == nil {
return 0, nil
}
return int64(*v), nil
case *uint64:
if v == nil {
return 0, nil
}
return int64(*v), nil
case []byte:
return strconv.ParseInt(string(v), 10, 64)
case string:
@ -110,9 +160,7 @@ func AsUint64(src interface{}) (uint64, error) {
return 0, fmt.Errorf("unsupported value %T as uint64", src)
}
var (
_ sql.Scanner = &NullUint64{}
)
var _ sql.Scanner = &NullUint64{}
// NullUint64 represents an uint64 that may be null.
// NullUint64 implements the Scanner interface so
@ -142,9 +190,7 @@ func (n NullUint64) Value() (driver.Value, error) {
return n.Uint64, nil
}
var (
_ sql.Scanner = &NullUint32{}
)
var _ sql.Scanner = &NullUint32{}
// NullUint32 represents an uint32 that may be null.
// NullUint32 implements the Scanner interface so

View File

@ -20,6 +20,9 @@ func (statement *Statement) writeDeleteOrder(w *builder.BytesWriter) error {
}
if statement.LimitN != nil && *statement.LimitN > 0 {
if statement.Start > 0 {
return fmt.Errorf("Delete with Limit start is unsupported")
}
limitNValue := *statement.LimitN
if _, err := fmt.Fprintf(w, " LIMIT %d", limitNValue); err != nil {
return err

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"
@ -28,7 +28,7 @@ func TestCacheFind(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(MailBox)))
var inserts = []*MailBox{
inserts := []*MailBox{
{
Id: 0,
Username: "user1",
@ -105,7 +105,7 @@ func TestCacheFind2(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(MailBox2)))
var inserts = []*MailBox2{
inserts := []*MailBox2{
{
Id: 0,
Username: "user1",
@ -156,7 +156,7 @@ func TestCacheGet(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(MailBox3)))
var inserts = []*MailBox3{
inserts := []*MailBox3{
{
Username: "user1",
Password: "pass1",

View File

@ -5,7 +5,7 @@
//go:build dm
// +build dm
package integrations
package tests
import "xorm.io/xorm/schemas"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"context"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"
@ -23,7 +23,7 @@ func BenchmarkGetVars(b *testing.B) {
assert.NoError(b, testEngine.Sync(new(BenchmarkGetVars)))
var v = BenchmarkGetVars{
v := BenchmarkGetVars{
Name: "myname",
}
_, err := testEngine.Insert(&v)
@ -54,7 +54,7 @@ func BenchmarkGetStruct(b *testing.B) {
assert.NoError(b, testEngine.Sync(new(BenchmarkGetStruct)))
var v = BenchmarkGetStruct{
v := BenchmarkGetStruct{
Name: "myname",
}
_, err := testEngine.Insert(&v)
@ -86,13 +86,13 @@ func BenchmarkFindStruct(b *testing.B) {
assert.NoError(b, testEngine.Sync(new(BenchmarkFindStruct)))
var v = BenchmarkFindStruct{
v := BenchmarkFindStruct{
Name: "myname",
}
_, err := testEngine.Insert(&v)
assert.NoError(b, err)
var mynames = make([]BenchmarkFindStruct, 0, 1)
mynames := make([]BenchmarkFindStruct, 0, 1)
b.StartTimer()
for i := 0; i < b.N; i++ {
err := testEngine.Find(&mynames)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"errors"
@ -200,7 +200,7 @@ func TestProcessors(t *testing.T) {
// --
// test find map processors
var p2FindMap = make(map[int64]*ProcessorsStruct)
p2FindMap := make(map[int64]*ProcessorsStruct)
err = testEngine.Find(&p2FindMap)
assert.NoError(t, err)
@ -848,13 +848,13 @@ func TestAfterLoadProcessor(t *testing.T) {
assertSync(t, new(AfterLoadStructA), new(AfterLoadStructB))
var a = AfterLoadStructA{
a := AfterLoadStructA{
Content: "testa",
}
_, err := testEngine.Insert(&a)
assert.NoError(t, err)
var b = AfterLoadStructB{
b := AfterLoadStructB{
Content: "testb",
AId: a.Id,
}

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"errors"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"
@ -22,7 +22,7 @@ func TestSetExpr(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(UserExprIssue)))
var issue = UserExprIssue{
issue := UserExprIssue{
Title: "my issue",
}
cnt, err := testEngine.Insert(&issue)
@ -44,7 +44,7 @@ func TestSetExpr(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var not = "NOT"
not := "NOT"
if testEngine.Dialect().URI().DBType == schemas.MSSQL || testEngine.Dialect().URI().DBType == schemas.DAMENG {
not = "~"
}
@ -118,7 +118,7 @@ func TestMustCol(t *testing.T) {
assertSync(t, new(CustomerUpdate))
var customer = CustomerUpdate{
customer := CustomerUpdate{
ParentId: 1,
}
cnt, err := testEngine.Insert(&customer)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"errors"
@ -37,7 +37,7 @@ func TestBuilder(t *testing.T) {
assert.NoError(t, err)
var cond Condition
var q = testEngine.Quote
q := testEngine.Quote
has, err := testEngine.Where(builder.Eq{q("col_name"): "col1"}).Get(&cond)
assert.NoError(t, err)
assert.Equal(t, true, has, "records should exist")
@ -90,7 +90,7 @@ func TestBuilder(t *testing.T) {
assert.EqualValues(t, 0, len(conds), "records should not exist")
// complex condtions
var where = builder.NewCond()
where := builder.NewCond()
if true {
where = where.And(builder.Eq{q("col_name"): "col1"})
where = where.Or(builder.And(builder.In(q("col_name"), "col1", "col2"), builder.Expr(q("col_name")+" = ?", "col1")))

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"

View File

@ -2,9 +2,10 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"os"
"testing"
"time"
@ -70,6 +71,63 @@ func TestDelete(t *testing.T) {
assert.False(t, has)
}
func TestDeleteLimit(t *testing.T) {
assert.NoError(t, PrepareEngine())
if testEngine.Dialect().URI().DBType == schemas.MSSQL || os.Getenv("IGNORE_TEST_DELETE_LIMIT") == "true" {
t.Skip()
return
}
type UserinfoDeleteLimit struct {
Uid int64 `xorm:"id pk not null autoincr"`
IsMan bool
}
assert.NoError(t, testEngine.Sync2(new(UserinfoDeleteLimit)))
session := testEngine.NewSession()
defer session.Close()
var err error
if testEngine.Dialect().URI().DBType == schemas.MSSQL {
err = session.Begin()
assert.NoError(t, err)
_, err = session.Exec("SET IDENTITY_INSERT userinfo_delete_limit ON")
assert.NoError(t, err)
}
user := UserinfoDeleteLimit{Uid: 1, IsMan: true}
cnt, err := session.Insert(&user)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
user2 := UserinfoDeleteLimit{Uid: 2}
cnt, err = session.Insert(&user2)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
if testEngine.Dialect().URI().DBType == schemas.MSSQL {
err = session.Commit()
assert.NoError(t, err)
}
cnt, err = testEngine.Limit(1, 1).Delete(&UserinfoDeleteLimit{})
assert.Error(t, err)
assert.EqualValues(t, 0, cnt)
cnt, err = testEngine.Limit(1).Desc("id").Delete(&UserinfoDeleteLimit{})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var users []UserinfoDeleteLimit
err = testEngine.Find(&users)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(users))
assert.EqualValues(t, 1, users[0].Uid)
assert.EqualValues(t, true, users[0].IsMan)
}
func TestDeleted(t *testing.T) {
assert.NoError(t, PrepareEngine())

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"context"
@ -106,14 +106,14 @@ func TestExistStructForJoin(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var orderlist = OrderList{
orderlist := OrderList{
Eid: ply.Id,
}
cnt, err = testEngine.Insert(&orderlist)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var um = Number{
um := Number{
Lid: orderlist.Id,
}
cnt, err = testEngine.Insert(&um)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"database/sql"
@ -1012,4 +1012,12 @@ func TestGetBytesVars(t *testing.T) {
assert.True(t, has)
assert.EqualValues(t, []byte("bytes1-1"), gbv.Bytes1)
assert.EqualValues(t, []byte("bytes2-2"), gbv.Bytes2)
type MyID int64
var myID MyID
has, err = testEngine.Table("get_bytes_vars").Select("id").Desc("id").Get(&myID)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, gbv.Id, myID)
}

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"
@ -142,8 +142,13 @@ func TestInsert(t *testing.T) {
assert.NoError(t, PrepareEngine())
assertSync(t, new(Userinfo))
user := Userinfo{0, "xiaolunwen", "dev", "lunny", time.Now(),
Userdetail{Id: 1}, 1.78, []byte{1, 2, 3}, true}
user := Userinfo{
0, "xiaolunwen", "dev", "lunny", time.Now(),
Userdetail{Id: 1},
1.78,
[]byte{1, 2, 3},
true,
}
cnt, err := testEngine.Insert(&user)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt, "insert not returned 1")
@ -161,8 +166,10 @@ func TestInsertAutoIncr(t *testing.T) {
assertSync(t, new(Userinfo))
// auto increment insert
user := Userinfo{Username: "xiaolunwen2", Departname: "dev", Alias: "lunny", Created: time.Now(),
Detail: Userdetail{Id: 1}, Height: 1.78, Avatar: []byte{1, 2, 3}, IsMan: true}
user := Userinfo{
Username: "xiaolunwen2", Departname: "dev", Alias: "lunny", Created: time.Now(),
Detail: Userdetail{Id: 1}, Height: 1.78, Avatar: []byte{1, 2, 3}, IsMan: true,
}
cnt, err := testEngine.Insert(&user)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -184,7 +191,7 @@ func TestInsertDefault(t *testing.T) {
err := testEngine.Sync(di)
assert.NoError(t, err)
var di2 = DefaultInsert{Name: "test"}
di2 := DefaultInsert{Name: "test"}
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("Status")).Insert(&di2)
assert.NoError(t, err)
@ -210,7 +217,7 @@ func TestInsertDefault2(t *testing.T) {
err := testEngine.Sync(di)
assert.NoError(t, err)
var di2 = DefaultInsert2{Name: "test"}
di2 := DefaultInsert2{Name: "test"}
_, err = testEngine.Omit(testEngine.GetColumnMapper().Obj2Table("CheckTime")).Insert(&di2)
assert.NoError(t, err)
@ -438,7 +445,7 @@ func TestCreatedJsonTime(t *testing.T) {
assert.True(t, has)
assert.EqualValues(t, time.Time(ci5.Created).Unix(), time.Time(di5.Created).Unix())
var dis = make([]MyJSONTime, 0)
dis := make([]MyJSONTime, 0)
err = testEngine.Find(&dis)
assert.NoError(t, err)
}
@ -762,7 +769,7 @@ func TestInsertWhere(t *testing.T) {
assert.NoError(t, PrepareEngine())
assertSync(t, new(InsertWhere))
var i = InsertWhere{
i := InsertWhere{
RepoId: 1,
Width: 10,
Height: 20,
@ -872,7 +879,7 @@ func TestInsertExpr2(t *testing.T) {
assertSync(t, new(InsertExprsRelease))
var ie = InsertExprsRelease{
ie := InsertExprsRelease{
RepoId: 1,
IsTag: true,
}
@ -1047,7 +1054,7 @@ func TestInsertIntSlice(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(InsertIntSlice)))
var v = InsertIntSlice{
v := InsertIntSlice{
NameIDs: []int{1, 2},
}
cnt, err := testEngine.Insert(&v)
@ -1064,7 +1071,7 @@ func TestInsertIntSlice(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var v3 = InsertIntSlice{
v3 := InsertIntSlice{
NameIDs: nil,
}
cnt, err = testEngine.Insert(&v3)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"testing"
@ -59,7 +59,7 @@ func TestBufferIterate(t *testing.T) {
assert.NoError(t, testEngine.Sync(new(UserBufferIterate)))
var size = 20
size := 20
for i := 0; i < size; i++ {
cnt, err := testEngine.Insert(&UserBufferIterate{
IsMan: true,
@ -68,7 +68,7 @@ func TestBufferIterate(t *testing.T) {
assert.EqualValues(t, 1, cnt)
}
var cnt = 0
cnt := 0
err := testEngine.BufferSize(9).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
user := bean.(*UserBufferIterate)
assert.EqualValues(t, cnt+1, user.Id)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"sort"
@ -53,17 +53,21 @@ type StringPK struct {
Name string
}
type ID int64
type MyIntPK struct {
type (
ID int64
MyIntPK struct {
ID ID `xorm:"pk autoincr"`
Name string
}
}
)
type StrID string
type MyStringPK struct {
type (
StrID string
MyStringPK struct {
ID StrID `xorm:"pk notnull"`
Name string
}
}
)
func TestIntId(t *testing.T) {
assert.NoError(t, PrepareEngine())
@ -187,7 +191,7 @@ func TestUintId(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
var inserts = []UintId{
inserts := []UintId{
{Name: "test1"},
{Name: "test2"},
}
@ -390,7 +394,7 @@ func TestCompositeKey(t *testing.T) {
assert.True(t, has)
assert.EqualValues(t, compositeKeyVal, compositeKeyVal2)
var cps = make([]CompositeKey, 0)
cps := make([]CompositeKey, 0)
err = testEngine.Find(&cps)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(cps))
@ -460,13 +464,15 @@ func TestCompositeKey2(t *testing.T) {
assert.EqualValues(t, 1, cnt)
}
type MyString string
type UserPK2 struct {
type (
MyString string
UserPK2 struct {
UserId MyString `xorm:"varchar(19) not null pk"`
NickName string `xorm:"varchar(19) not null"`
GameId uint32 `xorm:"integer pk"`
Score int32 `xorm:"integer"`
}
}
)
func TestCompositeKey3(t *testing.T) {
assert.NoError(t, PrepareEngine())

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"bytes"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"strconv"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"
@ -25,13 +25,11 @@ func TestSum(t *testing.T) {
assert.NoError(t, PrepareEngine())
assert.NoError(t, testEngine.Sync(new(SumStruct)))
var (
cases = []SumStruct{
cases := []SumStruct{
{1, 6.2},
{2, 5.3},
{92, -0.2},
}
)
var i int
var f float32
@ -84,13 +82,11 @@ func TestSumWithTableName(t *testing.T) {
assert.NoError(t, PrepareEngine())
assert.NoError(t, testEngine.Sync(new(SumStructWithTableName)))
var (
cases = []SumStructWithTableName{
cases := []SumStructWithTableName{
{1, 6.2},
{2, 5.3},
{92, -0.2},
}
)
var i int
var f float32
@ -138,13 +134,11 @@ func TestSumCustomColumn(t *testing.T) {
Float float32
}
var (
cases = []SumStruct2{
cases := []SumStruct2{
{1, 6.2},
{2, 5.3},
{92, -0.2},
}
)
assert.NoError(t, testEngine.Sync(new(SumStruct2)))

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"database/sql"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"
@ -24,7 +24,7 @@ func TestTransaction(t *testing.T) {
}
counter(t)
//defer counter()
// defer counter()
session := testEngine.NewSession()
defer session.Close()
@ -58,7 +58,7 @@ func TestCombineTransaction(t *testing.T) {
}
counter()
//defer counter()
// defer counter()
session := testEngine.NewSession()
defer session.Close()
@ -187,7 +187,6 @@ func TestMultipleTransaction(t *testing.T) {
}
func TestInsertMulti2InterfaceTransaction(t *testing.T) {
type Multi2InterfaceTransaction struct {
ID uint64 `xorm:"id pk autoincr"`
Name string

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"database/sql"
@ -162,7 +162,7 @@ func createEngine(dbType, connStr string) error {
if err != nil {
return err
}
var tableNames = make([]interface{}, 0, len(tables))
tableNames := make([]interface{}, 0, len(tables))
for _, table := range tables {
tableNames = append(tableNames, table.Name)
}

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"fmt"
@ -10,6 +10,7 @@ import (
"strings"
"testing"
"time"
"xorm.io/xorm/convert"
"xorm.io/xorm/internal/utils"
@ -18,7 +19,7 @@ import (
)
func formatTime(t time.Time, scales ...int) string {
var layout = "2006-01-02 15:04:05"
layout := "2006-01-02 15:04:05"
if len(scales) > 0 && scales[0] > 0 {
layout += "." + strings.Repeat("0", scales[0])
}
@ -35,7 +36,7 @@ func TestTimeUserTime(t *testing.T) {
assertSync(t, new(TimeUser))
var user = TimeUser{
user := TimeUser{
Id: "lunny",
OperTime: time.Now(),
}
@ -80,7 +81,7 @@ func TestTimeUserTimeDiffLoc(t *testing.T) {
assertSync(t, new(TimeUser2))
var user = TimeUser2{
user := TimeUser2{
Id: "lunny",
OperTime: time.Now(),
}
@ -110,7 +111,7 @@ func TestTimeUserCreated(t *testing.T) {
assertSync(t, new(UserCreated))
var user = UserCreated{
user := UserCreated{
Id: "lunny",
}
@ -154,7 +155,7 @@ func TestTimeUserCreatedDiffLoc(t *testing.T) {
assertSync(t, new(UserCreated2))
var user = UserCreated2{
user := UserCreated2{
Id: "lunny",
}
@ -184,7 +185,7 @@ func TestTimeUserUpdated(t *testing.T) {
assertSync(t, new(UserUpdated))
var user = UserUpdated{
user := UserUpdated{
Id: "lunny",
}
@ -204,7 +205,7 @@ func TestTimeUserUpdated(t *testing.T) {
assert.EqualValues(t, formatTime(user.UpdatedAt), formatTime(user2.UpdatedAt))
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt)
var user3 = UserUpdated{
user3 := UserUpdated{
Id: "lunny2",
}
@ -250,7 +251,7 @@ func TestTimeUserUpdatedDiffLoc(t *testing.T) {
assertSync(t, new(UserUpdated2))
var user = UserUpdated2{
user := UserUpdated2{
Id: "lunny",
}
@ -270,7 +271,7 @@ func TestTimeUserUpdatedDiffLoc(t *testing.T) {
assert.EqualValues(t, formatTime(user.UpdatedAt), formatTime(user2.UpdatedAt))
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt)
var user3 = UserUpdated2{
user3 := UserUpdated2{
Id: "lunny2",
}
@ -304,7 +305,7 @@ func TestTimeUserDeleted(t *testing.T) {
assertSync(t, new(UserDeleted))
var user = UserDeleted{
user := UserDeleted{
Id: "lunny",
}
@ -367,7 +368,7 @@ func TestTimeUserDeletedDiffLoc(t *testing.T) {
assertSync(t, new(UserDeleted2))
var user = UserDeleted2{
user := UserDeleted2{
Id: "lunny",
}
@ -412,7 +413,7 @@ func (j JSONDate) MarshalJSON() ([]byte, error) {
}
func (j *JSONDate) UnmarshalJSON(value []byte) error {
var v = strings.TrimSpace(strings.Trim(string(value), "\""))
v := strings.TrimSpace(strings.Trim(string(value), "\""))
t, err := time.ParseInLocation("2006-01-02 15:04:05", v, time.Local)
if err != nil {
@ -438,7 +439,7 @@ func TestCustomTimeUserDeleted(t *testing.T) {
assertSync(t, new(UserDeleted3))
var user = UserDeleted3{
user := UserDeleted3{
Id: "lunny",
}
@ -500,7 +501,7 @@ func TestCustomTimeUserDeletedDiffLoc(t *testing.T) {
assertSync(t, new(UserDeleted4))
var user = UserDeleted4{
user := UserDeleted4{
Id: "lunny",
}
@ -583,7 +584,7 @@ func TestTimestamp(t *testing.T) {
assertSync(t, new(TimestampStruct))
var d1 = TimestampStruct{
d1 := TimestampStruct{
InsertTime: time.Now(),
}
cnt, err := testEngine.Insert(&d1)
@ -625,10 +626,10 @@ func TestTimestamp(t *testing.T) {
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"
timeTmp1 := time.Date(2023, 7, 14, 11, 30, 0, 0, loc)
timeTmp2 := time.Date(2023, 7, 14, 0, 0, 0, 0, loc)
time1StampStr := strconv.FormatInt(timeTmp1.Unix(), 10)
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)

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"database/sql"

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integrations
package tests
import (
"errors"