improve tests #1250

Closed
lunny wants to merge 14 commits from lunny/improve_tests into master
24 changed files with 578 additions and 748 deletions

View File

@ -44,18 +44,39 @@ jobs:
- run: go test -v -race -db="sqlite3" -conn_str="./test.db" -coverprofile=coverage1-1.txt -covermode=atomic
- run: go test -v -race -db="sqlite3" -conn_str="./test.db" -cache=true -coverprofile=coverage1-2.txt -covermode=atomic
- run: go test -v -race -db="sqlite3" -conn_str="./test.db" -map_type=same -coverprofile=coverage1-3.txt -covermode=atomic
- run: go test -v -race -db="sqlite3" -conn_str="./test.db" -map_type=same -cache=true -coverprofile=coverage1-4.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -coverprofile=coverage2-1.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -cache=true -coverprofile=coverage2-2.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -map_type=same -coverprofile=coverage2-3.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -map_type=same -cache=true -coverprofile=coverage2-4.txt -covermode=atomic
- run: go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -coverprofile=coverage3-1.txt -covermode=atomic
- run: go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -cache=true -coverprofile=coverage3-2.txt -covermode=atomic
- run: go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -map_type=same -coverprofile=coverage3-3.txt -covermode=atomic
- run: go test -v -race -db="mymysql" -conn_str="xorm_test/root/" -map_type=same -cache=true -coverprofile=coverage3-4.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -coverprofile=coverage4-1.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -cache=true -coverprofile=coverage4-2.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -map_type=same -coverprofile=coverage4-3.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -map_type=same -cache=true -coverprofile=coverage4-4.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -coverprofile=coverage5-1.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -schema=xorm -cache=true -coverprofile=coverage5-2.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -map_type=same -schema=xorm -coverprofile=coverage5-3.txt -covermode=atomic
- run: go test -v -race -db="postgres" -conn_str="dbname=xorm_test sslmode=disable" -map_type=same -schema=xorm -cache=true -coverprofile=coverage5-4.txt -covermode=atomic
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -coverprofile=coverage6-1.txt -covermode=atomic
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -cache=true -coverprofile=coverage6-2.txt -covermode=atomic
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -map_type=same -coverprofile=coverage6-3.txt -covermode=atomic
- run: go test -v -race -db="mssql" -conn_str="server=localhost;user id=sa;password=yourStrong(!)Password;database=xorm_test" -map_type=same -cache=true -coverprofile=coverage6-4.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@tcp(localhost:4000)/xorm_test" -ignore_select_update=true -coverprofile=coverage7-1.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@tcp(localhost:4000)/xorm_test" -ignore_select_update=true -cache=true -coverprofile=coverage7-2.txt -covermode=atomic
- run: gocovmerge coverage1-1.txt coverage1-2.txt coverage2-1.txt coverage2-2.txt coverage3-1.txt coverage3-2.txt coverage4-1.txt coverage4-2.txt coverage5-1.txt coverage5-2.txt coverage6-1.txt coverage6-2.txt coverage7-1.txt coverage7-2.txt > coverage.txt
- run: go test -v -race -db="mysql" -conn_str="root:@tcp(localhost:4000)/xorm_test" -map_type=same -ignore_select_update=true -coverprofile=coverage7-3.txt -covermode=atomic
- run: go test -v -race -db="mysql" -conn_str="root:@tcp(localhost:4000)/xorm_test" -map_type=same -ignore_select_update=true -cache=true -coverprofile=coverage7-4.txt -covermode=atomic
- run: gocovmerge coverage1-1.txt coverage1-2.txt coverage1-3.txt coverage1-4.txt coverage2-1.txt coverage2-2.txt coverage2-3.txt coverage2-4.txt coverage3-1.txt coverage3-2.txt coverage3-3.txt coverage3-4.txt coverage4-1.txt coverage4-2.txt coverage4-3.txt coverage4-4.txt coverage5-1.txt coverage5-2.txt coverage5-3.txt coverage5-4.txt coverage6-1.txt coverage6-2.txt coverage6-3.txt coverage6-4.txt coverage7-1.txt coverage7-2.txt coverage7-3.txt coverage7-4.txt > coverage.txt
- run: bash <(curl -s https://codecov.io/bash)

View File

@ -59,8 +59,10 @@ func TestCacheFind(t *testing.T) {
assert.Equal(t, inserts[i].Password, box.Password)
}
idName := colMapper.Obj2Table("Id")
boxes = make([]MailBox, 0, 2)
assert.NoError(t, testEngine.Alias("a").Where("a.id > -1").Asc("a.id").Find(&boxes))
assert.NoError(t, testEngine.Alias("a").Where("`a`.`"+idName+"` > -1").Asc("a."+idName).Find(&boxes))
assert.EqualValues(t, 2, len(boxes))
for i, box := range boxes {
assert.Equal(t, inserts[i].Id, box.Id)
@ -74,8 +76,10 @@ func TestCacheFind(t *testing.T) {
Password string
}
tableName := tableMapper.Obj2Table("MailBox")
boxes2 := make([]MailBox4, 0, 2)
assert.NoError(t, testEngine.Table("mail_box").Where("mail_box.id > -1").Asc("mail_box.id").Find(&boxes2))
assert.NoError(t, testEngine.Table(tableName).Where("`"+tableName+"`.`"+idName+"` > -1").Asc(tableName+"."+idName).Find(&boxes2))
assert.EqualValues(t, 2, len(boxes2))
for i, box := range boxes2 {
assert.Equal(t, inserts[i].Id, box.Id)
@ -161,15 +165,17 @@ func TestCacheGet(t *testing.T) {
_, err := testEngine.Insert(inserts[0])
assert.NoError(t, err)
idName := colMapper.Obj2Table("Id")
var box1 MailBox3
has, err := testEngine.Where("id = ?", inserts[0].Id).Get(&box1)
has, err := testEngine.Where("`"+idName+"` = ?", inserts[0].Id).Get(&box1)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, "user1", box1.Username)
assert.EqualValues(t, "pass1", box1.Password)
var box2 MailBox3
has, err = testEngine.Where("id = ?", inserts[0].Id).Get(&box2)
has, err = testEngine.Where("`"+idName+"` = ?", inserts[0].Id).Get(&box2)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, "user1", box2.Username)

View File

@ -20,7 +20,7 @@ func (engine *Engine) tbNameWithSchema(v string) string {
engine.dialect.URI().Schema != "" &&
engine.dialect.URI().Schema != postgresPublicSchema &&
strings.Index(v, ".") == -1 {
return engine.dialect.URI().Schema + "." + v
return engine.Quote(engine.dialect.URI().Schema) + "." + v
}
return v
}

View File

@ -91,8 +91,8 @@ type EngineInterface interface {
NoAutoTime() *Session
Quote(string) string
SetCacher(string, core.Cacher)
SetConnMaxLifetime(time.Duration)
SetColumnMapper(core.IMapper)
SetConnMaxLifetime(time.Duration)
SetDefaultCacher(core.Cacher)
SetLogger(logger core.ILogger)
SetLogLevel(core.LogLevel)

View File

@ -48,7 +48,8 @@ func TestSetExpr(t *testing.T) {
if testEngine.Dialect().DBType() == core.MSSQL {
not = "~"
}
cnt, err = testEngine.SetExpr("show", not+" `show`").ID(1).Update(new(UserExpr))
showName := colMapper.Obj2Table("Show")
cnt, err = testEngine.SetExpr(showName, not+" `"+showName+"`").ID(1).Update(new(UserExpr))
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -81,7 +82,9 @@ func TestCols(t *testing.T) {
assert.NoError(t, err)
sess := testEngine.ID(1)
_, err = sess.Cols("col1").Cols("col2").Update(&ColsTable{
col1Name := colMapper.Obj2Table("Col1")
col2Name := colMapper.Obj2Table("Col2")
_, err = sess.Cols(col1Name).Cols(col2Name).Update(&ColsTable{
Col1: "",
Col2: "",
})
@ -130,7 +133,8 @@ func TestMustCol(t *testing.T) {
}
customer.ParentId = 0
affected, err := testEngine.MustCols("parent_id").Update(&customer, &CustomerOnlyId{Id: customer.Id})
parentIDName := colMapper.Obj2Table("ParentId")
affected, err := testEngine.MustCols(parentIDName).Update(&customer, &CustomerOnlyId{Id: customer.Id})
assert.NoError(t, err)
assert.EqualValues(t, 1, affected)
}

View File

@ -9,8 +9,8 @@ import (
"fmt"
"testing"
"xorm.io/builder"
"github.com/stretchr/testify/assert"
"xorm.io/builder"
)
func TestBuilder(t *testing.T) {
@ -36,63 +36,67 @@ func TestBuilder(t *testing.T) {
_, err = testEngine.Insert(&Condition{TableName: "table1", ColName: "col1", Op: OpEqual, Value: "1"})
assert.NoError(t, err)
colNameName := "`" + colMapper.Obj2Table("ColName") + "`"
opName := "`" + colMapper.Obj2Table("Op") + "`"
valueName := "`" + colMapper.Obj2Table("Value") + "`"
var cond Condition
has, err := testEngine.Where(builder.Eq{"col_name": "col1"}).Get(&cond)
has, err := testEngine.Where(builder.Eq{colNameName: "col1"}).Get(&cond)
assert.NoError(t, err)
assert.Equal(t, true, has, "records should exist")
has, err = testEngine.Where(builder.Eq{"col_name": "col1"}.
And(builder.Eq{"op": OpEqual})).
has, err = testEngine.Where(builder.Eq{colNameName: "col1"}.
And(builder.Eq{opName: OpEqual})).
NoAutoCondition().
Get(&cond)
assert.NoError(t, err)
assert.Equal(t, true, has, "records should exist")
has, err = testEngine.Where(builder.Eq{"col_name": "col1", "op": OpEqual, "value": "1"}).
has, err = testEngine.Where(builder.Eq{colNameName: "col1", opName: OpEqual, valueName: "1"}).
NoAutoCondition().
Get(&cond)
assert.NoError(t, err)
assert.Equal(t, true, has, "records should exist")
has, err = testEngine.Where(builder.Eq{"col_name": "col1"}.
And(builder.Neq{"op": OpEqual})).
has, err = testEngine.Where(builder.Eq{colNameName: "col1"}.
And(builder.Neq{opName: OpEqual})).
NoAutoCondition().
Get(&cond)
assert.NoError(t, err)
assert.Equal(t, false, has, "records should not exist")
var conds []Condition
err = testEngine.Where(builder.Eq{"col_name": "col1"}.
And(builder.Eq{"op": OpEqual})).
err = testEngine.Where(builder.Eq{colNameName: "col1"}.
And(builder.Eq{opName: OpEqual})).
Find(&conds)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(conds), "records should exist")
conds = make([]Condition, 0)
err = testEngine.Where(builder.Like{"col_name", "col"}).Find(&conds)
err = testEngine.Where(builder.Like{colNameName, "col"}).Find(&conds)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(conds), "records should exist")
conds = make([]Condition, 0)
err = testEngine.Where(builder.Expr("col_name = ?", "col1")).Find(&conds)
err = testEngine.Where(builder.Expr(colNameName+" = ?", "col1")).Find(&conds)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(conds), "records should exist")
conds = make([]Condition, 0)
err = testEngine.Where(builder.In("col_name", "col1", "col2")).Find(&conds)
err = testEngine.Where(builder.In(colNameName, "col1", "col2")).Find(&conds)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(conds), "records should exist")
conds = make([]Condition, 0)
err = testEngine.NotIn("col_name", "col1", "col2").Find(&conds)
err = testEngine.NotIn(colNameName, "col1", "col2").Find(&conds)
assert.NoError(t, err)
assert.EqualValues(t, 0, len(conds), "records should not exist")
// complex condtions
var where = builder.NewCond()
if true {
where = where.And(builder.Eq{"col_name": "col1"})
where = where.Or(builder.And(builder.In("col_name", "col1", "col2"), builder.Expr("col_name = ?", "col1")))
where = where.And(builder.Eq{colNameName: "col1"})
where = where.Or(builder.And(builder.In(colNameName, "col1", "col2"), builder.Expr(colNameName+" = ?", "col1")))
}
conds = make([]Condition, 0)
@ -219,7 +223,8 @@ func TestFindAndCount(t *testing.T) {
assert.NoError(t, err)
var results []FindAndCount
sess := testEngine.Where("name = ?", "test1")
nameName := colMapper.Obj2Table("Name")
sess := testEngine.Where("`"+nameName+"` = ?", "test1")
conds := sess.Conds()
err = sess.Find(&results)
assert.NoError(t, err)

View File

@ -46,31 +46,35 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err)
assert.False(t, has)
has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{})
nameName := "`" + colMapper.Obj2Table("Name") + "`"
has, err = testEngine.Where(nameName+" = ?", "test1").Exist(&RecordExist{})
assert.NoError(t, err)
assert.True(t, has)
has, err = testEngine.Where("name = ?", "test2").Exist(&RecordExist{})
has, err = testEngine.Where(nameName+" = ?", "test2").Exist(&RecordExist{})
assert.NoError(t, err)
assert.False(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where name = ?", "test1").Exist()
tableName := "`" + tableMapper.Obj2Table("RecordExist") + "`"
has, err = testEngine.SQL("select * from "+testEngine.TableName(tableName, true)+" where "+nameName+" = ?", "test1").Exist()
assert.NoError(t, err)
assert.True(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where name = ?", "test2").Exist()
has, err = testEngine.SQL("select * from "+testEngine.TableName(tableName, true)+" where "+nameName+" = ?", "test2").Exist()
assert.NoError(t, err)
assert.False(t, has)
has, err = testEngine.Table("record_exist").Exist()
has, err = testEngine.Table(tableName).Exist()
assert.NoError(t, err)
assert.True(t, has)
has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist()
has, err = testEngine.Table(tableName).Where(nameName+" = ?", "test1").Exist()
assert.NoError(t, err)
assert.True(t, has)
has, err = testEngine.Table("record_exist").Where("name = ?", "test2").Exist()
has, err = testEngine.Table(tableName).Where(nameName+" = ?", "test2").Exist()
assert.NoError(t, err)
assert.False(t, has)
}

View File

@ -10,7 +10,6 @@ import (
"testing"
"time"
"xorm.io/core"
"github.com/stretchr/testify/assert"
)
@ -53,10 +52,18 @@ func TestJoinLimit(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
tableName := "`" + tableMapper.Obj2Table("CheckList") + "`"
tableName2 := "`" + tableMapper.Obj2Table("Salary") + "`"
tableName3 := "`" + tableMapper.Obj2Table("Empsetting") + "`"
idName := "`" + colMapper.Obj2Table("Id") + "`"
lIDName := "`" + colMapper.Obj2Table("Lid") + "`"
eIDName := "`" + colMapper.Obj2Table("Eid") + "`"
var salaries []Salary
err = testEngine.Table("salary").
Join("INNER", "check_list", "check_list.id = salary.lid").
Join("LEFT", "empsetting", "empsetting.id = check_list.eid").
err = testEngine.Table(tableName2).
Join("INNER", tableName, tableName+"."+idName+" = "+tableName2+"."+lIDName).
Join("LEFT", tableName3, tableName3+"."+idName+" = "+tableName+"."+eIDName).
Limit(10, 0).
Find(&salaries)
assert.NoError(t, err)
@ -133,7 +140,7 @@ type TeamUser struct {
}
func (TeamUser) TableName() string {
return "team_user"
return tableMapper.Obj2Table("TeamUser")
}
func TestFind3(t *testing.T) {
@ -142,51 +149,58 @@ func TestFind3(t *testing.T) {
err := testEngine.Sync2(new(Team), teamUser)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("TeamUser")
teamTableName := tableMapper.Obj2Table("Team")
idName := "`" + colMapper.Obj2Table("Id") + "`"
orgIDName := "`" + colMapper.Obj2Table("OrgId") + "`"
uidName := "`" + colMapper.Obj2Table("Uid") + "`"
teamIDName := "`" + colMapper.Obj2Table("TeamId") + "`"
var teams []Team
err = testEngine.Cols("`team`.id").
Where("`team_user`.org_id=?", 1).
And("`team_user`.uid=?", 2).
Join("INNER", "`team_user`", "`team_user`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`"+tableName+"`."+orgIDName+"=?", 1).
And("`"+tableName+"`."+uidName+"=?", 2).
Join("INNER", "`"+tableName+"`", "`"+tableName+"`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
teams = make([]Team, 0)
err = testEngine.Cols("`team`.id").
Where("`team_user`.org_id=?", 1).
And("`team_user`.uid=?", 2).
Join("INNER", teamUser, "`team_user`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`"+tableName+"`."+orgIDName+"=?", 1).
And("`"+tableName+"`."+uidName+"=?", 2).
Join("INNER", teamUser, "`"+tableName+"`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
teams = make([]Team, 0)
err = testEngine.Cols("`team`.id").
Where("`team_user`.org_id=?", 1).
And("`team_user`.uid=?", 2).
Join("INNER", []interface{}{teamUser}, "`team_user`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`"+tableName+"`."+orgIDName+"=?", 1).
And("`"+tableName+"`."+uidName+"=?", 2).
Join("INNER", []interface{}{teamUser}, "`"+tableName+"`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
teams = make([]Team, 0)
err = testEngine.Cols("`team`.id").
Where("`tu`.org_id=?", 1).
And("`tu`.uid=?", 2).
Join("INNER", []string{"team_user", "tu"}, "`tu`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`tu`."+orgIDName+"=?", 1).
And("`tu`."+uidName+"=?", 2).
Join("INNER", []string{tableName, "tu"}, "`tu`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
teams = make([]Team, 0)
err = testEngine.Cols("`team`.id").
Where("`tu`.org_id=?", 1).
And("`tu`.uid=?", 2).
Join("INNER", []interface{}{"team_user", "tu"}, "`tu`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`tu`."+orgIDName+"=?", 1).
And("`tu`."+uidName+"=?", 2).
Join("INNER", []interface{}{tableName, "tu"}, "`tu`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
teams = make([]Team, 0)
err = testEngine.Cols("`team`.id").
Where("`tu`.org_id=?", 1).
And("`tu`.uid=?", 2).
Join("INNER", []interface{}{teamUser, "tu"}, "`tu`.team_id=`team`.id").
err = testEngine.Cols("`"+teamTableName+"`."+idName).
Where("`tu`."+orgIDName+"=?", 1).
And("`tu`."+uidName+"=?", 2).
Join("INNER", []interface{}{teamUser, "tu"}, "`tu`."+teamIDName+"=`"+teamTableName+"`."+idName).
Find(&teams)
assert.NoError(t, err)
}
@ -197,10 +211,8 @@ func TestFindMap(t *testing.T) {
users := make(map[int64]Userinfo)
err := testEngine.Find(&users)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
for _, user := range users {
fmt.Println(user)
}
@ -212,10 +224,8 @@ func TestFindMap2(t *testing.T) {
users := make(map[int64]*Userinfo)
err := testEngine.Find(&users)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
for id, user := range users {
fmt.Println(id, user)
}
@ -257,13 +267,17 @@ func TestOrder(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(Userinfo))
idName := "id"
userName := colMapper.Obj2Table("Username")
heightName := colMapper.Obj2Table("Height")
users := make([]Userinfo, 0)
err := testEngine.OrderBy("id desc").Find(&users)
err := testEngine.OrderBy(idName + " desc").Find(&users)
assert.NoError(t, err)
fmt.Println(users)
users2 := make([]Userinfo, 0)
err = testEngine.Asc("id", "username").Desc("height").Find(&users2)
err = testEngine.Asc(idName, userName).Desc(heightName).Find(&users2)
assert.NoError(t, err)
fmt.Println(users2)
}
@ -272,8 +286,11 @@ func TestGroupBy(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(Userinfo))
idName := "`id`"
userName := colMapper.Obj2Table("Username")
users := make([]Userinfo, 0)
err := testEngine.GroupBy("id, username").Find(&users)
err := testEngine.GroupBy(idName + ", `" + userName + "`").Find(&users)
assert.NoError(t, err)
}
@ -281,62 +298,19 @@ func TestHaving(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(Userinfo))
userName := "`" + colMapper.Obj2Table("Username") + "`"
users := make([]Userinfo, 0)
err := testEngine.GroupBy("username").Having("username='xlw'").Find(&users)
err := testEngine.GroupBy(userName).Having(userName + "='xlw'").Find(&users)
assert.NoError(t, err)
fmt.Println(users)
/*users = make([]Userinfo, 0)
users = make([]Userinfo, 0)
err = testEngine.Cols("id, username").GroupBy("username").Having("username='xlw'").Find(&users)
if err != nil {
t.Error(err)
panic(err)
}
fmt.Println(users)*/
}
func TestOrderSameMapper(t *testing.T) {
assert.NoError(t, prepareEngine())
testEngine.UnMapType(rValue(new(Userinfo)).Type())
mapper := testEngine.GetTableMapper()
testEngine.SetMapper(core.SameMapper{})
defer func() {
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.SetMapper(mapper)
}()
assertSync(t, new(Userinfo))
users := make([]Userinfo, 0)
err := testEngine.OrderBy("(id) desc").Find(&users)
assert.NoError(t, err)
fmt.Println(users)
users2 := make([]Userinfo, 0)
err = testEngine.Asc("(id)", "Username").Desc("Height").Find(&users2)
assert.NoError(t, err)
fmt.Println(users2)
}
func TestHavingSameMapper(t *testing.T) {
assert.NoError(t, prepareEngine())
testEngine.UnMapType(rValue(new(Userinfo)).Type())
mapper := testEngine.GetTableMapper()
testEngine.SetMapper(core.SameMapper{})
defer func() {
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.SetMapper(mapper)
}()
assertSync(t, new(Userinfo))
users := make([]Userinfo, 0)
err := testEngine.GroupBy("`Username`").Having("`Username`='xlw'").Find(&users)
if err != nil {
t.Fatal(err)
}
fmt.Println(users)
}
@ -345,29 +319,31 @@ func TestFindInts(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
idName := "id"
var idsInt64 []int64
err := testEngine.Table(userinfo).Cols("id").Desc("id").Find(&idsInt64)
err := testEngine.Table(userinfo).Cols(idName).Desc(idName).Find(&idsInt64)
if err != nil {
t.Fatal(err)
}
fmt.Println(idsInt64)
var idsInt32 []int32
err = testEngine.Table(userinfo).Cols("id").Desc("id").Find(&idsInt32)
err = testEngine.Table(userinfo).Cols(idName).Desc(idName).Find(&idsInt32)
if err != nil {
t.Fatal(err)
}
fmt.Println(idsInt32)
var idsInt []int
err = testEngine.Table(userinfo).Cols("id").Desc("id").Find(&idsInt)
err = testEngine.Table(userinfo).Cols(idName).Desc(idName).Find(&idsInt)
if err != nil {
t.Fatal(err)
}
fmt.Println(idsInt)
var idsUint []uint
err = testEngine.Table(userinfo).Cols("id").Desc("id").Find(&idsUint)
err = testEngine.Table(userinfo).Cols(idName).Desc(idName).Find(&idsUint)
if err != nil {
t.Fatal(err)
}
@ -375,7 +351,7 @@ func TestFindInts(t *testing.T) {
type MyInt int
var idsMyInt []MyInt
err = testEngine.Table(userinfo).Cols("id").Desc("id").Find(&idsMyInt)
err = testEngine.Table(userinfo).Cols(idName).Desc(idName).Find(&idsMyInt)
if err != nil {
t.Fatal(err)
}
@ -387,8 +363,10 @@ func TestFindStrings(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
username := testEngine.GetColumnMapper().Obj2Table("Username")
idName := "id"
var idsString []string
err := testEngine.Table(userinfo).Cols(username).Desc("id").Find(&idsString)
err := testEngine.Table(userinfo).Cols(username).Desc(idName).Find(&idsString)
if err != nil {
t.Fatal(err)
}
@ -400,9 +378,10 @@ func TestFindMyString(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
username := testEngine.GetColumnMapper().Obj2Table("Username")
idName := "id"
var idsMyString []MyString
err := testEngine.Table(userinfo).Cols(username).Desc("id").Find(&idsMyString)
err := testEngine.Table(userinfo).Cols(username).Desc(idName).Find(&idsMyString)
if err != nil {
t.Fatal(err)
}
@ -415,8 +394,10 @@ func TestFindInterface(t *testing.T) {
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
username := testEngine.GetColumnMapper().Obj2Table("Username")
idName := "id"
var idsInterface []interface{}
err := testEngine.Table(userinfo).Cols(username).Desc("id").Find(&idsInterface)
err := testEngine.Table(userinfo).Cols(username).Desc(idName).Find(&idsInterface)
if err != nil {
t.Fatal(err)
}
@ -428,8 +409,10 @@ func TestFindSliceBytes(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
idName := "id"
var ids [][][]byte
err := testEngine.Table(userinfo).Desc("id").Find(&ids)
err := testEngine.Table(userinfo).Desc(idName).Find(&ids)
if err != nil {
t.Fatal(err)
}
@ -443,8 +426,10 @@ func TestFindSlicePtrString(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
idName := "id"
var ids [][]*string
err := testEngine.Table(userinfo).Desc("id").Find(&ids)
err := testEngine.Table(userinfo).Desc(idName).Find(&ids)
if err != nil {
t.Fatal(err)
}
@ -458,8 +443,10 @@ func TestFindMapBytes(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
idName := "id"
var ids []map[string][]byte
err := testEngine.Table(userinfo).Desc("id").Find(&ids)
err := testEngine.Table(userinfo).Desc(idName).Find(&ids)
if err != nil {
t.Fatal(err)
}
@ -473,8 +460,10 @@ func TestFindMapPtrString(t *testing.T) {
assertSync(t, new(Userinfo))
userinfo := testEngine.GetTableMapper().Obj2Table("Userinfo")
idName := "id"
var ids []map[string]*string
err := testEngine.Table(userinfo).Desc("id").Find(&ids)
err := testEngine.Table(userinfo).Desc(idName).Find(&ids)
assert.NoError(t, err)
for _, record := range ids {
fmt.Println(record)
@ -508,7 +497,6 @@ func TestFindBit(t *testing.T) {
}
func TestFindMark(t *testing.T) {
type Mark struct {
Mark1 string `xorm:"VARCHAR(1)"`
Mark2 string `xorm:"VARCHAR(1)"`
@ -568,27 +556,31 @@ func TestFindAndCountOneFunc(t *testing.T) {
assert.EqualValues(t, 2, len(results))
assert.EqualValues(t, 2, cnt)
idName := "`" + colMapper.Obj2Table("Id") + "`"
msgName := "`" + colMapper.Obj2Table("Msg") + "`"
contentName := "`" + colMapper.Obj2Table("Content") + "`"
results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).FindAndCount(&results)
cnt, err = testEngine.Where(msgName+" = ?", true).FindAndCount(&results)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt)
results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Limit(1).FindAndCount(&results)
cnt, err = testEngine.Where(msgName+" = ?", true).Limit(1).FindAndCount(&results)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt)
results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Select("id, content, msg").
cnt, err = testEngine.Where(msgName+" = ?", true).Select(idName + ", " + contentName + ", " + msgName).
Limit(1).FindAndCount(&results)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt)
results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Desc("id").
cnt, err = testEngine.Where(msgName+" = ?", true).Desc(idName).
Limit(1).FindAndCount(&results)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(results))
@ -617,17 +609,20 @@ func TestFindMapStringId(t *testing.T) {
deviceIDs := []string{"1"}
deviceIDName := "`" + colMapper.Obj2Table("Deviceid") + "`"
statusName := "`" + colMapper.Obj2Table("Status") + "`"
deviceMaps := make(map[string]*FindMapDevice, len(deviceIDs))
err = testEngine.
Where("status = ?", 1).
In("deviceid", deviceIDs).
Where(statusName+" = ?", 1).
In(deviceIDName, deviceIDs).
Find(&deviceMaps)
assert.NoError(t, err)
deviceMaps2 := make(map[string]FindMapDevice, len(deviceIDs))
err = testEngine.
Where("status = ?", 1).
In("deviceid", deviceIDs).
Where(statusName+" = ?", 1).
In(deviceIDName, deviceIDs).
Find(&deviceMaps2)
assert.NoError(t, err)
@ -658,7 +653,7 @@ func TestFindMapStringId(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
sum, err := testEngine.SumInt(new(FindMapDevice), "status")
sum, err := testEngine.SumInt(new(FindMapDevice), statusName)
assert.NoError(t, err)
assert.EqualValues(t, 2, sum)
@ -791,13 +786,20 @@ func TestFindJoin(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(SceneItem), new(DeviceUserPrivrels))
tableName1 := "`" + tableMapper.Obj2Table("SceneItem") + "`"
tableName2 := "`" + tableMapper.Obj2Table("DeviceUserPrivrels") + "`"
deviceIDName := "`" + colMapper.Obj2Table("DeviceId") + "`"
userIDName := "`" + colMapper.Obj2Table("UserId") + "`"
typeName := "`" + colMapper.Obj2Table("Type") + "`"
var scenes []SceneItem
err := testEngine.Join("LEFT OUTER", "device_user_privrels", "device_user_privrels.device_id=scene_item.device_id").
Where("scene_item.type=?", 3).Or("device_user_privrels.user_id=?", 339).Find(&scenes)
err := testEngine.Join("LEFT OUTER", tableName2, tableName1+"."+deviceIDName+"="+tableName2+"."+deviceIDName).
Where(tableName1+"."+typeName+"=?", 3).Or(tableName2+"."+userIDName+"=?", 339).Find(&scenes)
assert.NoError(t, err)
scenes = make([]SceneItem, 0)
err = testEngine.Join("LEFT OUTER", new(DeviceUserPrivrels), "device_user_privrels.device_id=scene_item.device_id").
Where("scene_item.type=?", 3).Or("device_user_privrels.user_id=?", 339).Find(&scenes)
err = testEngine.Join("LEFT OUTER", new(DeviceUserPrivrels), tableName1+"."+deviceIDName+"="+tableName2+"."+deviceIDName).
Where(tableName1+"."+typeName+"=?", 3).Or(tableName2+"."+userIDName+"=?", 339).Find(&scenes)
assert.NoError(t, err)
}

View File

@ -35,14 +35,20 @@ func TestGetVar(t *testing.T) {
_, err := testEngine.InsertOne(&data)
assert.NoError(t, err)
tableName := "`" + tableMapper.Obj2Table("GetVar") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
ageName := colMapper.Obj2Table("Age")
moneyName := colMapper.Obj2Table("Money")
var msg string
has, err := testEngine.Table("get_var").Cols("msg").Get(&msg)
has, err := testEngine.Table(tableName).Cols("`" + msgName + "`").Get(&msg)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, "hi", msg)
var age int
has, err = testEngine.Table("get_var").Cols("age").Get(&age)
has, err = testEngine.Table(tableName).Cols("`" + ageName + "`").Get(&age)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, 28, age)
@ -54,9 +60,9 @@ func TestGetVar(t *testing.T) {
assert.Equal(t, 28, ageMax)
var age2 int64
has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20).
And("age < ?", 30).
has, err = testEngine.Table(tableName).Cols("`"+ageName+"`").
Where("`"+ageName+"` > ?", 20).
And("`"+ageName+"` < ?", 30).
Get(&age2)
assert.NoError(t, err)
assert.Equal(t, true, has)
@ -126,72 +132,72 @@ func TestGetVar(t *testing.T) {
assert.EqualValues(t, 28, age10)
var id sql.NullInt64
has, err = testEngine.Table("get_var").Cols("id").Get(&id)
has, err = testEngine.Table(tableName).Cols("`" + idName + "`").Get(&id)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, id.Valid)
assert.EqualValues(t, data.Id, id.Int64)
var msgNull sql.NullString
has, err = testEngine.Table("get_var").Cols("msg").Get(&msgNull)
has, err = testEngine.Table(tableName).Cols("`" + msgName + "`").Get(&msgNull)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, msgNull.Valid)
assert.EqualValues(t, data.Msg, msgNull.String)
var nullMoney sql.NullFloat64
has, err = testEngine.Table("get_var").Cols("money").Get(&nullMoney)
has, err = testEngine.Table(tableName).Cols("`" + moneyName + "`").Get(&nullMoney)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, true, nullMoney.Valid)
assert.EqualValues(t, data.Money, nullMoney.Float64)
var money float64
has, err = testEngine.Table("get_var").Cols("money").Get(&money)
has, err = testEngine.Table(tableName).Cols("`" + moneyName + "`").Get(&money)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money))
var money2 float64
if testEngine.Dialect().DBType() == core.MSSQL {
has, err = testEngine.SQL("SELECT TOP 1 money FROM " + testEngine.TableName("get_var", true)).Get(&money2)
has, err = testEngine.SQL("SELECT TOP 1 `" + moneyName + "` FROM " + testEngine.TableName(tableName, true)).Get(&money2)
} else {
has, err = testEngine.SQL("SELECT money FROM " + testEngine.TableName("get_var", true) + " LIMIT 1").Get(&money2)
has, err = testEngine.SQL("SELECT `" + moneyName + "` FROM " + testEngine.TableName(tableName, true) + " LIMIT 1").Get(&money2)
}
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money2))
var money3 float64
has, err = testEngine.SQL("SELECT money FROM " + testEngine.TableName("get_var", true) + " WHERE money > 20").Get(&money3)
has, err = testEngine.SQL("SELECT `" + moneyName + "` FROM " + testEngine.TableName(tableName, true) + " WHERE `" + moneyName + "` > 20").Get(&money3)
assert.NoError(t, err)
assert.Equal(t, false, has)
var valuesString = make(map[string]string)
has, err = testEngine.Table("get_var").Get(&valuesString)
has, err = testEngine.Table(tableName).Get(&valuesString)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, 5, len(valuesString))
assert.Equal(t, "1", valuesString["id"])
assert.Equal(t, "hi", valuesString["msg"])
assert.Equal(t, "28", valuesString["age"])
assert.Equal(t, "1.5", valuesString["money"])
assert.Equal(t, "1", valuesString[idName])
assert.Equal(t, "hi", valuesString[msgName])
assert.Equal(t, "28", valuesString[ageName])
assert.Equal(t, "1.5", valuesString[moneyName])
// for mymysql driver, interface{} will be []byte, so ignore it currently
if testEngine.Dialect().DriverName() != "mymysql" {
var valuesInter = make(map[string]interface{})
has, err = testEngine.Table("get_var").Where("id = ?", 1).Select("*").Get(&valuesInter)
has, err = testEngine.Table(tableName).Where("`"+idName+"` = ?", 1).Select("*").Get(&valuesInter)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, 5, len(valuesInter))
assert.EqualValues(t, 1, valuesInter["id"])
assert.Equal(t, "hi", fmt.Sprintf("%s", valuesInter["msg"]))
assert.EqualValues(t, 28, valuesInter["age"])
assert.Equal(t, "1.5", fmt.Sprintf("%v", valuesInter["money"]))
assert.EqualValues(t, 1, valuesInter[idName])
assert.Equal(t, "hi", fmt.Sprintf("%s", valuesInter[msgName]))
assert.EqualValues(t, 28, valuesInter[ageName])
assert.Equal(t, "1.5", fmt.Sprintf("%v", valuesInter[moneyName]))
}
var valuesSliceString = make([]string, 5)
has, err = testEngine.Table("get_var").Get(&valuesSliceString)
has, err = testEngine.Table(tableName).Get(&valuesSliceString)
assert.NoError(t, err)
assert.Equal(t, true, has)
assert.Equal(t, "1", valuesSliceString[0])
@ -200,7 +206,7 @@ func TestGetVar(t *testing.T) {
assert.Equal(t, "1.5", valuesSliceString[3])
var valuesSliceInter = make([]interface{}, 5)
has, err = testEngine.Table("get_var").Get(&valuesSliceInter)
has, err = testEngine.Table(tableName).Get(&valuesSliceInter)
assert.NoError(t, err)
assert.Equal(t, true, has)
@ -329,15 +335,17 @@ func TestJSONString(t *testing.T) {
})
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("JsonJson")
var js JsonString
has, err := testEngine.Table("json_json").Get(&js)
has, err := testEngine.Table(tableName).Get(&js)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, 1, js.Id)
assert.EqualValues(t, `["1","2"]`, js.Content)
var jss []JsonString
err = testEngine.Table("json_json").Find(&jss)
err = testEngine.Table(tableName).Find(&jss)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(jss))
assert.EqualValues(t, `["1","2"]`, jss[0].Content)
@ -366,9 +374,12 @@ func TestGetActionMapping(t *testing.T) {
})
assert.NoError(t, err)
scriptIdName := colMapper.Obj2Table("ScriptId")
rollbackIdName := colMapper.Obj2Table("RollbackId")
var valuesSlice = make([]string, 2)
has, err := testEngine.Table(new(ActionMapping)).
Cols("script_id", "rollback_id").
Cols(scriptIdName, rollbackIdName).
ID("1").Get(&valuesSlice)
assert.NoError(t, err)
assert.True(t, has)
@ -393,9 +404,10 @@ func TestGetStructId(t *testing.T) {
Id int64
}
idName := "`" + colMapper.Obj2Table("Id") + "`"
//var id int64
var maxid maxidst
sql := "select max(id) as id from " + testEngine.TableName(&TestGetStruct{}, true)
sql := "select max(" + idName + ") as id from " + testEngine.Quote(testEngine.TableName(&TestGetStruct{}, true))
has, err := testEngine.SQL(sql).Get(&maxid)
assert.NoError(t, err)
assert.True(t, has)

View File

@ -494,7 +494,8 @@ func TestDefaultTime3(t *testing.T) {
Cuser: "userId",
Muser: "userId",
}
cnt, err := testEngine.Omit("end_time").InsertOne(prepareTask)
endTimeName := colMapper.Obj2Table("EndTime")
cnt, err := testEngine.Omit(endTimeName).InsertOne(prepareTask)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
}
@ -752,10 +753,14 @@ func TestInsertMap(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(InsertMap))
widthName := colMapper.Obj2Table("Width")
heightName := colMapper.Obj2Table("Height")
nameName := colMapper.Obj2Table("Name")
cnt, err := testEngine.Table(new(InsertMap)).Insert(map[string]interface{}{
"width": 20,
"height": 10,
"name": "lunny",
widthName: 20,
heightName: 10,
nameName: "lunny",
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -768,10 +773,12 @@ func TestInsertMap(t *testing.T) {
assert.EqualValues(t, 10, im.Height)
assert.EqualValues(t, "lunny", im.Name)
cnt, err = testEngine.Table("insert_map").Insert(map[string]interface{}{
"width": 30,
"height": 10,
"name": "lunny",
tableName := tableMapper.Obj2Table("InsertMap")
cnt, err = testEngine.Table(tableName).Insert(map[string]interface{}{
widthName: 30,
heightName: 10,
nameName: "lunny",
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -787,16 +794,16 @@ func TestInsertMap(t *testing.T) {
assert.EqualValues(t, 10, ims[1].Height)
assert.EqualValues(t, "lunny", ims[1].Name)
cnt, err = testEngine.Table("insert_map").Insert([]map[string]interface{}{
cnt, err = testEngine.Table(tableName).Insert([]map[string]interface{}{
{
"width": 40,
"height": 10,
"name": "lunny",
widthName: 40,
heightName: 10,
nameName: "lunny",
},
{
"width": 50,
"height": 10,
"name": "lunny",
widthName: 50,
heightName: 10,
nameName: "lunny",
},
})
assert.NoError(t, err)

View File

@ -37,14 +37,22 @@ func TestQueryString(t *testing.T) {
_, err := testEngine.InsertOne(data)
assert.NoError(t, err)
records, err := testEngine.QueryString("select * from " + testEngine.TableName("get_var2", true))
tableName := tableMapper.Obj2Table("GetVar2")
records, err := testEngine.QueryString("select * from `" + testEngine.TableName(tableName, true) + "`")
assert.NoError(t, err)
assert.Equal(t, 1, len(records))
assert.Equal(t, 5, len(records[0]))
assert.Equal(t, "1", records[0]["id"])
assert.Equal(t, "hi", records[0]["msg"])
assert.Equal(t, "28", records[0]["age"])
assert.Equal(t, "1.5", records[0]["money"])
idName := colMapper.Obj2Table("Id")
ageName := colMapper.Obj2Table("Age")
msgName := colMapper.Obj2Table("Msg")
moneyName := colMapper.Obj2Table("Money")
assert.Equal(t, "1", records[0][idName])
assert.Equal(t, "hi", records[0][msgName])
assert.Equal(t, "28", records[0][ageName])
assert.Equal(t, "1.5", records[0][moneyName])
}
func TestQueryString2(t *testing.T) {
@ -63,12 +71,17 @@ func TestQueryString2(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
records, err := testEngine.QueryString("select * from " + testEngine.TableName("get_var3", true))
tableName := "`" + tableMapper.Obj2Table("GetVar3") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
records, err := testEngine.QueryString("select * from " + testEngine.TableName(tableName, true))
assert.NoError(t, err)
assert.Equal(t, 1, len(records))
assert.Equal(t, 2, len(records[0]))
assert.Equal(t, "1", records[0]["id"])
assert.True(t, "0" == records[0]["msg"] || "false" == records[0]["msg"])
assert.Equal(t, "1", records[0][idName])
assert.True(t, "0" == records[0][msgName] || "false" == records[0][msgName])
}
func toString(i interface{}) string {
@ -128,14 +141,20 @@ func TestQueryInterface(t *testing.T) {
_, err := testEngine.InsertOne(data)
assert.NoError(t, err)
records, err := testEngine.QueryInterface("select * from " + testEngine.TableName("get_var_interface", true))
tableName := "`" + tableMapper.Obj2Table("GetVarInterface") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
ageName := colMapper.Obj2Table("Age")
moneyName := colMapper.Obj2Table("Money")
records, err := testEngine.QueryInterface("select * from " + testEngine.TableName(tableName, true))
assert.NoError(t, err)
assert.Equal(t, 1, len(records))
assert.Equal(t, 5, len(records[0]))
assert.EqualValues(t, 1, toInt64(records[0]["id"]))
assert.Equal(t, "hi", toString(records[0]["msg"]))
assert.EqualValues(t, 28, toInt64(records[0]["age"]))
assert.EqualValues(t, 1.5, toFloat64(records[0]["money"]))
assert.EqualValues(t, 1, toInt64(records[0][idName]))
assert.Equal(t, "hi", toString(records[0][msgName]))
assert.EqualValues(t, 28, toInt64(records[0][ageName]))
assert.EqualValues(t, 1.5, toFloat64(records[0][moneyName]))
}
func TestQueryNoParams(t *testing.T) {
@ -162,27 +181,33 @@ func TestQueryNoParams(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
ageName := colMapper.Obj2Table("Age")
moneyName := colMapper.Obj2Table("Money")
assertResult := func(t *testing.T, results []map[string][]byte) {
assert.EqualValues(t, 1, len(results))
id, err := strconv.ParseInt(string(results[0]["id"]), 10, 64)
id, err := strconv.ParseInt(string(results[0][idName]), 10, 64)
assert.NoError(t, err)
assert.EqualValues(t, 1, id)
assert.Equal(t, "message", string(results[0]["msg"]))
assert.Equal(t, "message", string(results[0][msgName]))
age, err := strconv.Atoi(string(results[0]["age"]))
age, err := strconv.Atoi(string(results[0][ageName]))
assert.NoError(t, err)
assert.EqualValues(t, 20, age)
money, err := strconv.ParseFloat(string(results[0]["money"]), 32)
money, err := strconv.ParseFloat(string(results[0][moneyName]), 32)
assert.NoError(t, err)
assert.EqualValues(t, 3000, money)
}
results, err := testEngine.Table("query_no_params").Limit(10).Query()
tableName := "`" + tableMapper.Obj2Table("QueryNoParams") + "`"
results, err := testEngine.Table(tableName).Limit(10).Query()
assert.NoError(t, err)
assertResult(t, results)
results, err = testEngine.SQL("select * from " + testEngine.TableName("query_no_params", true)).Query()
results, err = testEngine.SQL("select * from " + testEngine.TableName(tableName, true)).Query()
assert.NoError(t, err)
assertResult(t, results)
}
@ -203,24 +228,29 @@ func TestQueryStringNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
records, err := testEngine.Table("get_var4").Limit(1).QueryString()
tableName := "`" + tableMapper.Obj2Table("GetVar4") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
records, err := testEngine.Table(tableName).Limit(1).QueryString()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, "1", records[0]["id"])
assert.EqualValues(t, "1", records[0][idName])
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
assert.EqualValues(t, "false", records[0]["msg"])
assert.EqualValues(t, "false", records[0][msgName])
} else {
assert.EqualValues(t, "0", records[0]["msg"])
assert.EqualValues(t, "0", records[0][msgName])
}
records, err = testEngine.Table("get_var4").Where(builder.Eq{"id": 1}).QueryString()
records, err = testEngine.Table(tableName).Where(builder.Eq{"`" + idName + "`": 1}).QueryString()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, "1", records[0]["id"])
assert.EqualValues(t, "1", records[0][idName])
if testEngine.Dialect().DBType() == core.POSTGRES || testEngine.Dialect().DBType() == core.MSSQL {
assert.EqualValues(t, "false", records[0]["msg"])
assert.EqualValues(t, "false", records[0][msgName])
} else {
assert.EqualValues(t, "0", records[0]["msg"])
assert.EqualValues(t, "0", records[0][msgName])
}
}
@ -240,7 +270,9 @@ func TestQuerySliceStringNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
records, err := testEngine.Table("get_var6").Limit(1).QuerySliceString()
tableName := "`" + tableMapper.Obj2Table("GetVar6") + "`"
records, err := testEngine.Table(tableName).Limit(1).QuerySliceString()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, "1", records[0][0])
@ -250,7 +282,8 @@ func TestQuerySliceStringNoParam(t *testing.T) {
assert.EqualValues(t, "0", records[0][1])
}
records, err = testEngine.Table("get_var6").Where(builder.Eq{"id": 1}).QuerySliceString()
idName := colMapper.Obj2Table("Id")
records, err = testEngine.Table(tableName).Where(builder.Eq{"`" + idName + "`": 1}).QuerySliceString()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, "1", records[0][0])
@ -277,17 +310,21 @@ func TestQueryInterfaceNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
records, err := testEngine.Table("get_var5").Limit(1).QueryInterface()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, 1, toInt64(records[0]["id"]))
assert.EqualValues(t, 0, toInt64(records[0]["msg"]))
tableName := "`" + tableMapper.Obj2Table("GetVar5") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
records, err = testEngine.Table("get_var5").Where(builder.Eq{"id": 1}).QueryInterface()
records, err := testEngine.Table(tableName).Limit(1).QueryInterface()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, 1, toInt64(records[0]["id"]))
assert.EqualValues(t, 0, toInt64(records[0]["msg"]))
assert.EqualValues(t, 1, toInt64(records[0][idName]))
assert.EqualValues(t, 0, toInt64(records[0][msgName]))
records, err = testEngine.Table(tableName).Where(builder.Eq{"`" + idName + "`": 1}).QueryInterface()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(records))
assert.EqualValues(t, 1, toInt64(records[0][idName]))
assert.EqualValues(t, 0, toInt64(records[0][msgName]))
}
func TestQueryWithBuilder(t *testing.T) {
@ -314,23 +351,29 @@ func TestQueryWithBuilder(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
ageName := colMapper.Obj2Table("Age")
moneyName := colMapper.Obj2Table("Money")
assertResult := func(t *testing.T, results []map[string][]byte) {
assert.EqualValues(t, 1, len(results))
id, err := strconv.ParseInt(string(results[0]["id"]), 10, 64)
id, err := strconv.ParseInt(string(results[0][idName]), 10, 64)
assert.NoError(t, err)
assert.EqualValues(t, 1, id)
assert.Equal(t, "message", string(results[0]["msg"]))
assert.Equal(t, "message", string(results[0][msgName]))
age, err := strconv.Atoi(string(results[0]["age"]))
age, err := strconv.Atoi(string(results[0][ageName]))
assert.NoError(t, err)
assert.EqualValues(t, 20, age)
money, err := strconv.ParseFloat(string(results[0]["money"]), 32)
money, err := strconv.ParseFloat(string(results[0][moneyName]), 32)
assert.NoError(t, err)
assert.EqualValues(t, 3000, money)
}
results, err := testEngine.Query(builder.Select("*").From(testEngine.TableName("query_with_builder", true)))
tableName := tableMapper.Obj2Table("QueryWithBuilder")
results, err := testEngine.Query(builder.Select("*").From("`" + testEngine.TableName(tableName, true) + "`"))
assert.NoError(t, err)
assertResult(t, results)
}
@ -371,9 +414,15 @@ func TestJoinWithSubQuery(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
tableName := "`" + tableMapper.Obj2Table("JoinWithSubQueryDepart") + "`"
tableName1 := "`" + tableMapper.Obj2Table("JoinWithSubQuery1") + "`"
departID := "`" + colMapper.Obj2Table("DepartId") + "`"
idName := "`" + colMapper.Obj2Table("Id") + "`"
var querys []JoinWithSubQuery1
err = testEngine.Join("INNER", builder.Select("id").From(testEngine.Quote(testEngine.TableName("join_with_sub_query_depart", true))),
"join_with_sub_query_depart.id = join_with_sub_query1.depart_id").Find(&querys)
err = testEngine.Join("INNER", builder.Select(idName).From(testEngine.Quote(testEngine.TableName(tableName, true))),
tableName+"."+idName+" = "+tableName1+"."+departID).Find(&querys)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(querys))
assert.EqualValues(t, q, querys[0])

View File

@ -21,17 +21,21 @@ func TestExecAndQuery(t *testing.T) {
assert.NoError(t, testEngine.Sync2(new(UserinfoQuery)))
res, err := testEngine.Exec("INSERT INTO "+testEngine.TableName("`userinfo_query`", true)+" (uid, name) VALUES (?, ?)", 1, "user")
tableName := tableMapper.Obj2Table("UserinfoQuery")
uidName := colMapper.Obj2Table("Uid")
nameName := colMapper.Obj2Table("Name")
res, err := testEngine.Exec("INSERT INTO `"+testEngine.TableName(tableName, true)+"` (`"+uidName+"`, `"+nameName+"`) VALUES (?, ?)", 1, "user")
assert.NoError(t, err)
cnt, err := res.RowsAffected()
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
results, err := testEngine.Query("select * from " + testEngine.TableName("userinfo_query", true))
results, err := testEngine.Query("select * from `" + testEngine.TableName(tableName, true) + "`")
assert.NoError(t, err)
assert.EqualValues(t, 1, len(results))
id, err := strconv.Atoi(string(results[0]["uid"]))
id, err := strconv.Atoi(string(results[0][uidName]))
assert.NoError(t, err)
assert.EqualValues(t, 1, id)
assert.Equal(t, "user", string(results[0]["name"]))
assert.Equal(t, "user", string(results[0][nameName]))
}

View File

@ -79,7 +79,7 @@ type SyncTable2 struct {
}
func (SyncTable2) TableName() string {
return "sync_table1"
return tableMapper.Obj2Table("SyncTable1")
}
type SyncTable3 struct {
@ -91,7 +91,7 @@ type SyncTable3 struct {
}
func (s *SyncTable3) TableName() string {
return "sync_table1"
return tableMapper.Obj2Table("SyncTable1")
}
func TestSyncTable(t *testing.T) {
@ -99,24 +99,26 @@ func TestSyncTable(t *testing.T) {
assert.NoError(t, testEngine.Sync2(new(SyncTable1)))
tableName := tableMapper.Obj2Table("SyncTable1")
tables, err := testEngine.DBMetas()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(tables))
assert.EqualValues(t, "sync_table1", tables[0].Name)
assert.EqualValues(t, tableName, tables[0].Name)
assert.NoError(t, testEngine.Sync2(new(SyncTable2)))
tables, err = testEngine.DBMetas()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(tables))
assert.EqualValues(t, "sync_table1", tables[0].Name)
assert.EqualValues(t, tableName, tables[0].Name)
assert.NoError(t, testEngine.Sync2(new(SyncTable3)))
tables, err = testEngine.DBMetas()
assert.NoError(t, err)
assert.EqualValues(t, 1, len(tables))
assert.EqualValues(t, "sync_table1", tables[0].Name)
assert.EqualValues(t, tableName, tables[0].Name)
}
func TestSyncTable2(t *testing.T) {
@ -252,8 +254,10 @@ func TestMetaInfo(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 2, len(tables))
tableNames := []string{tables[0].Name, tables[1].Name}
tableName2 := tableMapper.Obj2Table("IndexOrUnique")
assert.Contains(t, tableNames, "customtablename")
assert.Contains(t, tableNames, "index_or_unique")
assert.Contains(t, tableNames, tableName2)
}
func TestCharst(t *testing.T) {
@ -298,10 +302,12 @@ func TestUnique_1(t *testing.T) {
assert.NoError(t, prepareEngine())
assert.NoError(t, testEngine.DropTables("user_unique"))
tableName := tableMapper.Obj2Table("UserUnique")
assert.NoError(t, testEngine.DropTables(tableName))
assert.NoError(t, testEngine.Sync2(new(UserUnique)))
assert.NoError(t, testEngine.DropTables("user_unique"))
assert.NoError(t, testEngine.DropTables(tableName))
assert.NoError(t, testEngine.CreateTables(new(UserUnique)))
assert.NoError(t, testEngine.CreateUniques(new(UserUnique)))
}

View File

@ -9,8 +9,8 @@ import (
"strconv"
"testing"
"xorm.io/builder"
"github.com/stretchr/testify/assert"
"xorm.io/builder"
)
func isFloatEq(i, j float64, precision int) bool {
@ -153,8 +153,9 @@ func TestSumCustomColumn(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 3, cnt)
intName := colMapper.Obj2Table("Int")
sumInt, err := testEngine.Sum(new(SumStruct2),
"CASE WHEN `int` <= 2 THEN `int` ELSE 0 END")
"CASE WHEN `"+intName+"` <= 2 THEN `"+intName+"` ELSE 0 END")
assert.NoError(t, err)
assert.EqualValues(t, 3, int(sumInt))
}
@ -186,11 +187,12 @@ func TestCount(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, total)
total, err = testEngine.Where(cond).Table("userinfo_count").Count()
tableName := tableMapper.Obj2Table("UserinfoCount")
total, err = testEngine.Where(cond).Table(tableName).Count()
assert.NoError(t, err)
assert.EqualValues(t, 1, total)
total, err = testEngine.Table("userinfo_count").Count()
total, err = testEngine.Table(tableName).Count()
assert.NoError(t, err)
assert.EqualValues(t, 1, total)
}
@ -211,8 +213,9 @@ func TestSQLCount(t *testing.T) {
assertSync(t, new(UserinfoCount2), new(UserinfoBooks))
total, err := testEngine.SQL("SELECT count(id) FROM " + testEngine.TableName("userinfo_count2", true)).
Count()
tableName := tableMapper.Obj2Table("UserinfoCount2")
idName := colMapper.Obj2Table("Id")
total, err := testEngine.SQL("SELECT count(`" + idName + "`) FROM `" + testEngine.TableName(tableName, true) + "`").Count()
assert.NoError(t, err)
assert.EqualValues(t, 0, total)
}
@ -237,7 +240,8 @@ func TestCountWithOthers(t *testing.T) {
})
assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Limit(1).Count(new(CountWithOthers))
idName := colMapper.Obj2Table("Id")
total, err := testEngine.OrderBy(idName + " desc").Limit(1).Count(new(CountWithOthers))
assert.NoError(t, err)
assert.EqualValues(t, 2, total)
}
@ -266,11 +270,13 @@ func TestWithTableName(t *testing.T) {
})
assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Count(new(CountWithTableName))
idName := colMapper.Obj2Table("Id")
total, err := testEngine.OrderBy(idName + " desc").Count(new(CountWithTableName))
assert.NoError(t, err)
assert.EqualValues(t, 2, total)
total, err = testEngine.OrderBy("id desc").Count(CountWithTableName{})
total, err = testEngine.OrderBy(idName + " desc").Count(CountWithTableName{})
assert.NoError(t, err)
assert.EqualValues(t, 2, total)
}

View File

@ -9,7 +9,6 @@ import (
"testing"
"time"
"xorm.io/core"
"github.com/stretchr/testify/assert"
)
@ -73,56 +72,14 @@ func TestCombineTransaction(t *testing.T) {
_, err = session.Insert(&user1)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("Userinfo")
userName := colMapper.Obj2Table("Username")
user2 := Userinfo{Username: "zzz"}
_, err = session.Where("id = ?", 0).Update(&user2)
assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName("userinfo", true)+" where username = ?", user2.Username)
assert.NoError(t, err)
err = session.Commit()
assert.NoError(t, err)
}
func TestCombineTransactionSameMapper(t *testing.T) {
assert.NoError(t, prepareEngine())
oldMapper := testEngine.GetColumnMapper()
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.SetMapper(core.SameMapper{})
defer func() {
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.SetMapper(oldMapper)
}()
assertSync(t, new(Userinfo))
counter := func() {
total, err := testEngine.Count(&Userinfo{})
if err != nil {
t.Error(err)
}
fmt.Printf("----now total %v records\n", total)
}
counter()
defer counter()
session := testEngine.NewSession()
defer session.Close()
err := session.Begin()
assert.NoError(t, err)
user1 := Userinfo{Username: "xiaoxiao2", Departname: "dev", Alias: "lunny", Created: time.Now()}
_, err = session.Insert(&user1)
assert.NoError(t, err)
user2 := Userinfo{Username: "zzz"}
_, err = session.Where("(id) = ?", 0).Update(&user2)
assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName("`Userinfo`", true)+" where `Username` = ?", user2.Username)
_, err = session.Exec("delete from `"+testEngine.TableName(tableName, true)+"` where `"+userName+"` = ?", user2.Username)
assert.NoError(t, err)
err = session.Commit()
@ -150,7 +107,8 @@ func TestMultipleTransaction(t *testing.T) {
assert.NoError(t, err)
user2 := MultipleTransaction{Name: "zzz"}
_, err = session.Where("id = ?", 0).Update(&user2)
idName := colMapper.Obj2Table("Id")
_, err = session.Where("`"+idName+"` = ?", 0).Update(&user2)
assert.NoError(t, err)
err = session.Commit()
@ -164,7 +122,7 @@ func TestMultipleTransaction(t *testing.T) {
err = session.Begin()
assert.NoError(t, err)
_, err = session.Where("id=?", m1.Id).Delete(new(MultipleTransaction))
_, err = session.Where("`"+idName+"`=?", m1.Id).Delete(new(MultipleTransaction))
assert.NoError(t, err)
err = session.Commit()

View File

@ -183,6 +183,9 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
if session.statement.ColumnStr == "" {
colNames, args = session.statement.buildUpdates(bean, false, false,
false, false, true)
if session.statement.lastError != nil {
return 0, err
}
} else {
colNames, args, err = session.genUpdateColumns(bean)
if err != nil {

View File

@ -32,9 +32,14 @@ func TestUpdateMap(t *testing.T) {
_, err := testEngine.Insert(&tb)
assert.NoError(t, err)
cnt, err := testEngine.Table("update_table").Where("id = ?", tb.Id).Update(map[string]interface{}{
"name": "test2",
"age": 36,
tableName := tableMapper.Obj2Table("UpdateTable")
nameName := colMapper.Obj2Table("Name")
ageName := colMapper.Obj2Table("age")
idName := colMapper.Obj2Table("Id")
cnt, err := testEngine.Table(tableName).Where("`"+idName+"` = ?", tb.Id).Update(map[string]interface{}{
nameName: "test2",
ageName: 36,
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -64,7 +69,9 @@ func TestUpdateLimit(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
cnt, err = testEngine.OrderBy("name desc").Limit(1).Update(&UpdateTable2{
nameName := "`" + colMapper.Obj2Table("Name") + "`"
cnt, err = testEngine.OrderBy(nameName + " desc").Limit(1).Update(&UpdateTable2{
Age: 30,
})
assert.NoError(t, err)
@ -268,13 +275,11 @@ func TestUpdateMap2(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(UpdateMustCols))
_, err := testEngine.Table("update_must_cols").Where("id =?", 1).Update(map[string]interface{}{
"bool": true,
tableName := tableMapper.Obj2Table("UpdateMustCols")
_, err := testEngine.Table(tableName).Where("`"+colMapper.Obj2Table("Id")+"` =?", 1).Update(map[string]interface{}{
colMapper.Obj2Table("Bool"): true,
})
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
func TestUpdate1(t *testing.T) {
@ -287,14 +292,8 @@ func TestUpdate1(t *testing.T) {
var ori Userinfo
has, err := testEngine.Get(&ori)
if err != nil {
t.Error(err)
panic(err)
}
if !has {
t.Error(errors.New("not exist"))
panic(errors.New("not exist"))
}
assert.NoError(t, err)
assert.True(t, has)
// update by id
user := Userinfo{Username: "xxx", Height: 1.2}
@ -302,7 +301,14 @@ func TestUpdate1(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
condi := Condi{"username": "zzz", "departname": ""}
userName := "`" + colMapper.Obj2Table("Username") + "`"
heightName := "`" + colMapper.Obj2Table("Height") + "`"
departName := "`" + colMapper.Obj2Table("Departname") + "`"
detailIDName := "`detail_id`"
isMan := "`" + colMapper.Obj2Table("IsMan") + "`"
createdName := "`" + colMapper.Obj2Table("Created") + "`"
condi := Condi{userName: "zzz", departName: ""}
cnt, err = testEngine.Table(&user).ID(ori.Uid).Update(&condi)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -318,105 +324,55 @@ func TestUpdate1(t *testing.T) {
{
user := &Userinfo{Username: "not null data", Height: 180.5}
_, err := testEngine.Insert(user)
if err != nil {
t.Error(err)
panic(err)
}
userID := user.Uid
assert.NoError(t, err)
userID := user.Uid
has, err := testEngine.ID(userID).
And("username = ?", user.Username).
And("height = ?", user.Height).
And("departname = ?", "").
And("detail_id = ?", 0).
And("is_man = ?", 0).
And(userName+" = ?", user.Username).
And(heightName+" = ?", user.Height).
And(departName+" = ?", "").
And(detailIDName+" = ?", 0).
And(isMan+" = ?", 0).
Get(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
if !has {
err = errors.New("cannot insert properly")
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.True(t, has)
updatedUser := &Userinfo{Username: "null data"}
cnt, err = testEngine.ID(userID).
Nullable("height", "departname", "is_man", "created").
Nullable(heightName, departName, isMan, createdName).
Update(updatedUser)
if err != nil {
t.Error(err)
panic(err)
}
if cnt != 1 {
err = errors.New("update not returned 1")
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
has, err = testEngine.ID(userID).
And("username = ?", updatedUser.Username).
And("height IS NULL").
And("departname IS NULL").
And("is_man IS NULL").
And("created IS NULL").
And("detail_id = ?", 0).
And(userName+" = ?", updatedUser.Username).
And(heightName+" IS NULL").
And(departName+" IS NULL").
And(isMan+" IS NULL").
And(createdName+" IS NULL").
And(detailIDName+" = ?", 0).
Get(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
if !has {
err = errors.New("cannot update with null properly")
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.True(t, has)
cnt, err = testEngine.ID(userID).Delete(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
if cnt != 1 {
err = errors.New("delete not returned 1")
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
}
err = testEngine.StoreEngine("Innodb").Sync2(&Article{})
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
defer func() {
err = testEngine.DropTables(&Article{})
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}()
a := &Article{0, "1", "2", "3", "4", "5", 2}
cnt, err = testEngine.Insert(a)
if err != nil {
t.Error(err)
panic(err)
}
if cnt != 1 {
err = errors.New(fmt.Sprintf("insert not returned 1 but %d", cnt))
t.Error(err)
panic(err)
}
if a.Id == 0 {
err = errors.New("insert returned id is 0")
t.Error(err)
panic(err)
}
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
assert.True(t, a.Id > 0)
cnt, err = testEngine.ID(a.Id).Update(&Article{Name: "6"})
assert.NoError(t, err)
@ -442,28 +398,18 @@ func TestUpdate1(t *testing.T) {
assert.EqualValues(t, *col2, *col3)
{
col1 := &UpdateMustCols{}
err = testEngine.Sync(col1)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
_, err = testEngine.Insert(col1)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
col2 := &UpdateMustCols{col1.Id, true, ""}
boolStr := testEngine.GetColumnMapper().Obj2Table("Bool")
stringStr := testEngine.GetColumnMapper().Obj2Table("String")
_, err = testEngine.ID(col2.Id).MustCols(boolStr, stringStr).Update(col2)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
col3 := &UpdateMustCols{}
has, err := testEngine.ID(col2.Id).Get(col3)
@ -681,167 +627,6 @@ func TestUpdateUpdated(t *testing.T) {
fmt.Println("ci5:", ci5, "di5:", di5)
}
func TestUpdateSameMapper(t *testing.T) {
assert.NoError(t, prepareEngine())
oldMapper := testEngine.GetTableMapper()
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.UnMapType(rValue(new(Condi)).Type())
testEngine.UnMapType(rValue(new(Article)).Type())
testEngine.UnMapType(rValue(new(UpdateAllCols)).Type())
testEngine.UnMapType(rValue(new(UpdateMustCols)).Type())
testEngine.UnMapType(rValue(new(UpdateIncr)).Type())
testEngine.SetMapper(core.SameMapper{})
defer func() {
testEngine.UnMapType(rValue(new(Userinfo)).Type())
testEngine.UnMapType(rValue(new(Condi)).Type())
testEngine.UnMapType(rValue(new(Article)).Type())
testEngine.UnMapType(rValue(new(UpdateAllCols)).Type())
testEngine.UnMapType(rValue(new(UpdateMustCols)).Type())
testEngine.UnMapType(rValue(new(UpdateIncr)).Type())
testEngine.SetMapper(oldMapper)
}()
assertSync(t, new(Userinfo))
_, err := testEngine.Insert(&Userinfo{
Username: "user1",
})
assert.NoError(t, err)
var ori Userinfo
has, err := testEngine.Get(&ori)
assert.NoError(t, err)
assert.True(t, has)
// update by id
user := Userinfo{Username: "xxx", Height: 1.2}
cnt, err := testEngine.ID(ori.Uid).Update(&user)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
condi := Condi{"Username": "zzz", "Departname": ""}
cnt, err = testEngine.Table(&user).ID(ori.Uid).Update(&condi)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
cnt, err = testEngine.Update(&Userinfo{Username: "yyy"}, &user)
assert.NoError(t, err)
total, err := testEngine.Count(&user)
assert.NoError(t, err)
assert.EqualValues(t, cnt, total)
err = testEngine.Sync(&Article{})
assert.NoError(t, err)
defer func() {
err = testEngine.DropTables(&Article{})
assert.NoError(t, err)
}()
a := &Article{0, "1", "2", "3", "4", "5", 2}
cnt, err = testEngine.Insert(a)
assert.NoError(t, err)
if cnt != 1 {
err = errors.New(fmt.Sprintf("insert not returned 1 but %d", cnt))
t.Error(err)
panic(err)
}
if a.Id == 0 {
err = errors.New("insert returned id is 0")
t.Error(err)
panic(err)
}
cnt, err = testEngine.ID(a.Id).Update(&Article{Name: "6"})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
col1 := &UpdateAllCols{}
err = testEngine.Sync(col1)
assert.NoError(t, err)
_, err = testEngine.Insert(col1)
assert.NoError(t, err)
col2 := &UpdateAllCols{col1.Id, true, "", nil}
_, err = testEngine.ID(col2.Id).AllCols().Update(col2)
assert.NoError(t, err)
col3 := &UpdateAllCols{}
has, err = testEngine.ID(col2.Id).Get(col3)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, *col2, *col3)
{
col1 := &UpdateMustCols{}
err = testEngine.Sync(col1)
assert.NoError(t, err)
_, err = testEngine.Insert(col1)
assert.NoError(t, err)
col2 := &UpdateMustCols{col1.Id, true, ""}
boolStr := testEngine.GetColumnMapper().Obj2Table("Bool")
stringStr := testEngine.GetColumnMapper().Obj2Table("String")
_, err = testEngine.ID(col2.Id).MustCols(boolStr, stringStr).Update(col2)
assert.NoError(t, err)
col3 := &UpdateMustCols{}
has, err := testEngine.ID(col2.Id).Get(col3)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, *col2, *col3)
}
{
col1 := &UpdateIncr{}
err = testEngine.Sync(col1)
if err != nil {
t.Error(err)
panic(err)
}
_, err = testEngine.Insert(col1)
if err != nil {
t.Error(err)
panic(err)
}
cnt, err := testEngine.ID(col1.Id).Incr("`Cnt`").Update(col1)
if err != nil {
t.Error(err)
panic(err)
}
if cnt != 1 {
err = errors.New("update incr failed")
t.Error(err)
panic(err)
}
newCol := new(UpdateIncr)
has, err := testEngine.ID(col1.Id).Get(newCol)
if err != nil {
t.Error(err)
panic(err)
}
if !has {
err = errors.New("has incr failed")
t.Error(err)
panic(err)
}
if 1 != newCol.Cnt {
err = errors.New("incr failed")
t.Error(err)
panic(err)
}
}
}
func TestUseBool(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(Userinfo))
@ -974,7 +759,9 @@ func TestNewUpdate(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 0, af)
af, err = testEngine.Table(new(TbUserInfo)).Where("phone=?", 13126564922).Update(&changeUsr)
phoneName := "`" + colMapper.Obj2Table("Phone") + "`"
af, err = testEngine.Table(new(TbUserInfo)).Where(phoneName+"=?", 13126564922).Update(&changeUsr)
assert.NoError(t, err)
assert.EqualValues(t, 0, af)
}
@ -1062,8 +849,9 @@ func TestDeletedUpdate(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
deletedAtName := colMapper.Obj2Table("DeletedAt")
s.DeletedAt = time.Time{}
cnt, err = testEngine.Unscoped().Nullable("deleted_at").Update(&s)
cnt, err = testEngine.Unscoped().Nullable(deletedAtName).Update(&s)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1075,11 +863,11 @@ func TestDeletedUpdate(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
cnt, err = testEngine.ID(s.Id).Cols("deleted_at").Update(&DeletedUpdatedStruct{})
cnt, err = testEngine.ID(s.Id).Cols(deletedAtName).Update(&DeletedUpdatedStruct{})
assert.EqualValues(t, "No content found to be updated", err.Error())
assert.EqualValues(t, 0, cnt)
cnt, err = testEngine.ID(s.Id).Unscoped().Cols("deleted_at").Update(&DeletedUpdatedStruct{})
cnt, err = testEngine.ID(s.Id).Unscoped().Cols(deletedAtName).Update(&DeletedUpdatedStruct{})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1104,10 +892,12 @@ func TestUpdateMapCondition(t *testing.T) {
_, err := testEngine.Insert(&c)
assert.NoError(t, err)
idName := "`" + colMapper.Obj2Table("Id") + "`"
cnt, err := testEngine.Update(&UpdateMapCondition{
String: "string1",
}, map[string]interface{}{
"id": c.Id,
idName: c.Id,
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1142,7 +932,11 @@ func TestUpdateMapContent(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 18, c.Age)
cnt, err := testEngine.Table(new(UpdateMapContent)).ID(c.Id).Update(map[string]interface{}{"age": 0})
ageName := colMapper.Obj2Table("Age")
isManName := colMapper.Obj2Table("IsMan")
genderName := colMapper.Obj2Table("Gender")
cnt, err := testEngine.Table(new(UpdateMapContent)).ID(c.Id).Update(map[string]interface{}{ageName: 0})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1153,9 +947,9 @@ func TestUpdateMapContent(t *testing.T) {
assert.EqualValues(t, 0, c1.Age)
cnt, err = testEngine.Table(new(UpdateMapContent)).ID(c.Id).Update(map[string]interface{}{
"age": 16,
"is_man": false,
"gender": 2,
ageName: 16,
isManName: false,
genderName: 2,
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1169,9 +963,9 @@ func TestUpdateMapContent(t *testing.T) {
assert.EqualValues(t, 2, c2.Gender)
cnt, err = testEngine.Table(testEngine.TableName(new(UpdateMapContent))).ID(c.Id).Update(map[string]interface{}{
"age": 15,
"is_man": true,
"gender": 1,
ageName: 15,
isManName: true,
genderName: 1,
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -1285,8 +1079,10 @@ func TestUpdateDeleted(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 0, cnt)
nameName := colMapper.Obj2Table("Name")
cnt, err = testEngine.Table(&UpdateDeletedStruct{}).ID(s.Id).Update(map[string]interface{}{
"name": "test1",
nameName: "test1",
})
assert.NoError(t, err)
assert.EqualValues(t, 0, cnt)

View File

@ -6,6 +6,7 @@ package xorm
import (
"database/sql/driver"
"errors"
"fmt"
"reflect"
"strings"
@ -280,8 +281,8 @@ func (statement *Statement) buildUpdates(bean interface{},
fieldValuePtr, err := col.ValueOf(bean)
if err != nil {
engine.logger.Error(err)
continue
statement.lastError = err
return colNames, args
}
fieldValue := *fieldValuePtr
@ -317,10 +318,10 @@ func (statement *Statement) buildUpdates(bean interface{},
if structConvert, ok := fieldValue.Addr().Interface().(core.Conversion); ok {
data, err := structConvert.ToDB()
if err != nil {
engine.logger.Error(err)
} else {
val = data
statement.lastError = err
return colNames, args
}
val = data
goto APPEND
}
}
@ -328,10 +329,10 @@ func (statement *Statement) buildUpdates(bean interface{},
if structConvert, ok := fieldValue.Interface().(core.Conversion); ok {
data, err := structConvert.ToDB()
if err != nil {
engine.logger.Error(err)
} else {
val = data
statement.lastError = err
return colNames, args
}
val = data
goto APPEND
}
@ -409,8 +410,8 @@ func (statement *Statement) buildUpdates(bean interface{},
continue
}
} else {
// TODO: how to handler?
panic("not supported")
statement.lastError = errors.New("Not supported")
return colNames, args
}
} else {
val = fieldValue.Interface()
@ -420,7 +421,8 @@ func (statement *Statement) buildUpdates(bean interface{},
if requiredField || !isStructZero(fieldValue) {
bytes, err := DefaultJSONHandler.Marshal(fieldValue.Interface())
if err != nil {
panic(fmt.Sprintf("mashal %v failed", fieldValue.Interface()))
statement.lastError = err
return colNames, args
}
if col.SQLType.IsText() {
val = string(bytes)
@ -449,8 +451,8 @@ func (statement *Statement) buildUpdates(bean interface{},
if col.SQLType.IsText() {
bytes, err := DefaultJSONHandler.Marshal(fieldValue.Interface())
if err != nil {
engine.logger.Error(err)
continue
statement.lastError = err
return colNames, args
}
val = string(bytes)
} else if col.SQLType.IsBlob() {
@ -469,8 +471,8 @@ func (statement *Statement) buildUpdates(bean interface{},
} else {
bytes, err = DefaultJSONHandler.Marshal(fieldValue.Interface())
if err != nil {
engine.logger.Error(err)
continue
statement.lastError = err
return colNames, args
}
val = bytes
}
@ -483,9 +485,6 @@ func (statement *Statement) buildUpdates(bean interface{},
APPEND:
args = append(args, val)
if col.IsPrimaryKey && engine.dialect.DBType() == "ql" {
continue
}
colNames = append(colNames, fmt.Sprintf("%v = ?", engine.Quote(col.Name)))
}

View File

@ -197,8 +197,11 @@ func TestDistinctAndCols(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
tableName := "`" + tableMapper.Obj2Table("DistinctAndCols") + "`"
nameName := "`" + colMapper.Obj2Table("Name") + "`"
var names []string
err = testEngine.Table("distinct_and_cols").Cols("name").Distinct("name").Find(&names)
err = testEngine.Table(tableName).Cols(nameName).Distinct(nameName).Find(&names)
assert.NoError(t, err)
assert.EqualValues(t, 1, len(names))
assert.EqualValues(t, "test", names[0])
@ -212,9 +215,11 @@ func TestUpdateIgnoreOnlyFromDBFields(t *testing.T) {
IngoreField string `xorm:"-"`
}
idName := colMapper.Obj2Table("Id")
assertGetRecord := func() *TestOnlyFromDBField {
var record TestOnlyFromDBField
has, err := testEngine.Where("id = ?", 1).Get(&record)
has, err := testEngine.Where("`"+idName+"` = ?", 1).Get(&record)
assert.NoError(t, err)
assert.EqualValues(t, true, has)
assert.EqualValues(t, "", record.OnlyFromDBField)

View File

@ -10,8 +10,8 @@ import (
"testing"
"time"
"xorm.io/core"
"github.com/stretchr/testify/assert"
"xorm.io/core"
)
type tempUser struct {
@ -284,11 +284,12 @@ func TestExtends2(t *testing.T) {
assert.NoError(t, err)
}
var mapper = testEngine.GetTableMapper().Obj2Table
var quote = testEngine.Quote
userTableName := quote(testEngine.TableName(mapper("MessageUser"), true))
typeTableName := quote(testEngine.TableName(mapper("MessageType"), true))
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
userTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageUser"), true))
typeTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageType"), true))
msgTableName := quote(testEngine.TableName(tableMapper.Obj2Table("Message"), true))
mapper := colMapper.Obj2Table
list := make([]Message, 0)
err = session.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
@ -353,11 +354,12 @@ func TestExtends3(t *testing.T) {
assert.NoError(t, err)
}
var mapper = testEngine.GetTableMapper().Obj2Table
var quote = testEngine.Quote
userTableName := quote(testEngine.TableName(mapper("MessageUser"), true))
typeTableName := quote(testEngine.TableName(mapper("MessageType"), true))
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
userTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageUser"), true))
typeTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageType"), true))
msgTableName := quote(testEngine.TableName(tableMapper.Obj2Table("Message"), true))
var mapper = colMapper.Obj2Table
list := make([]MessageExtend3, 0)
err = session.Table(msgTableName).Join("LEFT", []string{userTableName, "sender"}, "`sender`.`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
@ -447,11 +449,12 @@ func TestExtends4(t *testing.T) {
assert.NoError(t, err)
}
var mapper = testEngine.GetTableMapper().Obj2Table
var quote = testEngine.Quote
userTableName := quote(testEngine.TableName(mapper("MessageUser"), true))
typeTableName := quote(testEngine.TableName(mapper("MessageType"), true))
msgTableName := quote(testEngine.TableName(mapper("Message"), true))
userTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageUser"), true))
typeTableName := quote(testEngine.TableName(tableMapper.Obj2Table("MessageType"), true))
msgTableName := quote(testEngine.TableName(tableMapper.Obj2Table("Message"), true))
var mapper = colMapper.Obj2Table
list := make([]MessageExtend4, 0)
err = session.Table(msgTableName).Join("LEFT", userTableName, userTableName+".`"+mapper("Id")+"`="+msgTableName+".`"+mapper("Uid")+"`").
@ -547,10 +550,9 @@ func TestExtends5(t *testing.T) {
session := testEngine.NewSession()
defer session.Close()
var mapper = testEngine.GetTableMapper().Obj2Table
var quote = testEngine.Quote
bookTableName := quote(testEngine.TableName(mapper("Book"), true))
sizeTableName := quote(testEngine.TableName(mapper("Size"), true))
bookTableName := quote(testEngine.TableName(tableMapper.Obj2Table("Book"), true))
sizeTableName := quote(testEngine.TableName(tableMapper.Obj2Table("Size"), true))
list := make([]Book, 0)
err = session.

View File

@ -140,7 +140,8 @@ func TestLowerCase(t *testing.T) {
err := testEngine.Sync2(&Lowercase{})
assert.NoError(t, err)
_, err = testEngine.Where("id > 0").Delete(&Lowercase{})
idName := colMapper.Obj2Table("Id")
_, err = testEngine.Where("`" + idName + "` > 0").Delete(&Lowercase{})
assert.NoError(t, err)
_, err = testEngine.Insert(&Lowercase{ended: 1})
@ -159,12 +160,14 @@ func TestAutoIncrTag(t *testing.T) {
Id int64
}
idName := colMapper.Obj2Table("Id")
tb := testEngine.TableInfo(new(TestAutoIncr1))
cols := tb.Columns()
assert.EqualValues(t, 1, len(cols))
assert.True(t, cols[0].IsAutoIncrement)
assert.True(t, cols[0].IsPrimaryKey)
assert.Equal(t, "id", cols[0].Name)
assert.Equal(t, idName, cols[0].Name)
type TestAutoIncr2 struct {
Id int64 `xorm:"id"`
@ -197,7 +200,7 @@ func TestAutoIncrTag(t *testing.T) {
assert.EqualValues(t, 1, len(cols))
assert.False(t, cols[0].IsAutoIncrement)
assert.True(t, cols[0].IsPrimaryKey)
assert.Equal(t, "id", cols[0].Name)
assert.Equal(t, idName, cols[0].Name)
}
func TestTagComment(t *testing.T) {
@ -524,7 +527,8 @@ func TestTagTime(t *testing.T) {
assert.EqualValues(t, s.Created.Format("2006-01-02 15:04:05"), u.Created.Format("2006-01-02 15:04:05"))
var tm string
has, err = testEngine.Table("tag_u_t_c_struct").Cols("created").Get(&tm)
createdName := "`" + colMapper.Obj2Table("Created") + "`"
has, err = testEngine.Table(&s).Cols(createdName).Get(&tm)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, s.Created.UTC().Format("2006-01-02 15:04:05"),

View File

@ -286,8 +286,9 @@ func TestTimeUserDeleted(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
fmt.Println("user2 str", user2.CreatedAtStr, user2.UpdatedAtStr)
idName := "`" + colMapper.Obj2Table("Id") + "`"
var user3 UserDeleted
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
cnt, err = testEngine.Where(idName+" = ?", "lunny").Delete(&user3)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
assert.True(t, !isTimeZero(user3.DeletedAt))
@ -340,7 +341,8 @@ func TestTimeUserDeletedDiffLoc(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted2
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
idName := "`" + colMapper.Obj2Table("Id") + "`"
cnt, err = testEngine.Where(idName+" = ?", "lunny").Delete(&user3)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
assert.True(t, !isTimeZero(user3.DeletedAt))
@ -411,7 +413,8 @@ func TestCustomTimeUserDeleted(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted3
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
idName := "`" + colMapper.Obj2Table("Id") + "`"
cnt, err = testEngine.Where(idName+" = ?", "lunny").Delete(&user3)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
assert.True(t, !isTimeZero(time.Time(user3.DeletedAt)))
@ -464,7 +467,8 @@ func TestCustomTimeUserDeletedDiffLoc(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted4
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3)
idName := "`" + colMapper.Obj2Table("Id") + "`"
cnt, err = testEngine.Where(idName+" = ?", "lunny").Delete(&user3)
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
assert.True(t, !isTimeZero(time.Time(user3.DeletedAt)))

View File

@ -60,20 +60,14 @@ func TestCreateNullStructTable(t *testing.T) {
assert.NoError(t, prepareEngine())
err := testEngine.CreateTables(new(NullType))
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
func TestDropNullStructTable(t *testing.T) {
assert.NoError(t, prepareEngine())
err := testEngine.DropTables(new(NullType))
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
func TestNullStructInsert(t *testing.T) {
@ -83,16 +77,9 @@ func TestNullStructInsert(t *testing.T) {
if true {
item := new(NullType)
_, err := testEngine.Insert(item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
if item.Id != 1 {
err = errors.New("insert error")
t.Error(err)
panic(err)
}
assert.EqualValues(t, 1, item.Id)
}
if true {
@ -103,16 +90,9 @@ func TestNullStructInsert(t *testing.T) {
IsMan: sql.NullBool{Bool: true, Valid: true},
}
_, err := testEngine.Insert(&item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
if item.Id != 2 {
err = errors.New("insert error")
t.Error(err)
panic(err)
}
assert.EqualValues(t, 2, item.Id)
}
if true {
@ -131,10 +111,7 @@ func TestNullStructInsert(t *testing.T) {
}
_, err := testEngine.Insert(&items)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(items)
}
}
@ -171,36 +148,27 @@ func TestNullStructUpdate(t *testing.T) {
})
assert.NoError(t, err)
idName := "`" + colMapper.Obj2Table("Id") + "`"
ageName := "`" + colMapper.Obj2Table("Age") + "`"
heightName := "`" + colMapper.Obj2Table("Height") + "`"
isManName := "`" + colMapper.Obj2Table("IsMan") + "`"
if true { // 测试可插入NULL
item := new(NullType)
item.Age = sql.NullInt64{Int64: 23, Valid: true}
item.Height = sql.NullFloat64{Float64: 0, Valid: false} // update to NULL
affected, err := testEngine.ID(2).Cols("age", "height", "is_man").Update(item)
if err != nil {
t.Error(err)
panic(err)
}
if affected != 1 {
err := errors.New("update failed")
t.Error(err)
panic(err)
}
affected, err := testEngine.ID(2).Cols(ageName, heightName, isManName).Update(item)
assert.NoError(t, err)
assert.EqualValues(t, 1, affected)
}
if true { // 测试In update
item := new(NullType)
item.Age = sql.NullInt64{Int64: 23, Valid: true}
affected, err := testEngine.In("id", 3, 4).Cols("age", "height", "is_man").Update(item)
if err != nil {
t.Error(err)
panic(err)
}
if affected != 2 {
err := errors.New("update failed")
t.Error(err)
panic(err)
}
affected, err := testEngine.In(idName, 3, 4).Cols(ageName, heightName, isManName).Update(item)
assert.NoError(t, err)
assert.EqualValues(t, 2, affected)
}
if true { // 测试where
@ -209,11 +177,8 @@ func TestNullStructUpdate(t *testing.T) {
item.IsMan = sql.NullBool{Bool: true, Valid: true}
item.Age = sql.NullInt64{Int64: 34, Valid: true}
_, err := testEngine.Where("age > ?", 34).Update(item)
if err != nil {
t.Error(err)
panic(err)
}
_, err := testEngine.Where(ageName+" > ?", 34).Update(item)
assert.NoError(t, err)
}
if true { // 修改全部时,插入空值
@ -225,13 +190,9 @@ func TestNullStructUpdate(t *testing.T) {
}
_, err := testEngine.AllCols().ID(6).Update(item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
}
}
func TestNullStructFind(t *testing.T) {
@ -269,14 +230,9 @@ func TestNullStructFind(t *testing.T) {
if true {
item := new(NullType)
has, err := testEngine.ID(1).Get(item)
if err != nil {
t.Error(err)
panic(err)
}
if !has {
t.Error(errors.New("no find id 1"))
panic(err)
}
assert.NoError(t, err)
assert.True(t, has)
fmt.Println(item)
if item.Id != 1 || item.Name.Valid || item.Age.Valid || item.Height.Valid ||
item.IsMan.Valid {
@ -291,14 +247,8 @@ func TestNullStructFind(t *testing.T) {
item.Id = 2
has, err := testEngine.Get(item)
if err != nil {
t.Error(err)
panic(err)
}
if !has {
t.Error(errors.New("no find id 2"))
panic(err)
}
assert.NoError(t, err)
assert.True(t, has)
fmt.Println(item)
}
@ -306,23 +256,16 @@ func TestNullStructFind(t *testing.T) {
item := make([]NullType, 0)
err := testEngine.ID(2).Find(&item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
}
if true {
item := make([]NullType, 0)
err := testEngine.Asc("age").Find(&item)
if err != nil {
t.Error(err)
panic(err)
}
ageName := "`" + colMapper.Obj2Table("Age") + "`"
err := testEngine.Asc(ageName).Find(&item)
assert.NoError(t, err)
for k, v := range item {
fmt.Println(k, v)
}
@ -334,16 +277,14 @@ func TestNullStructIterate(t *testing.T) {
assertSync(t, new(NullType))
if true {
err := testEngine.Where("age IS NOT NULL").OrderBy("age").Iterate(new(NullType),
ageName := "`" + colMapper.Obj2Table("Age") + "`"
err := testEngine.Where(ageName+" IS NOT NULL").OrderBy(ageName).Iterate(new(NullType),
func(i int, bean interface{}) error {
nultype := bean.(*NullType)
fmt.Println(i, nultype)
return nil
})
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
}
@ -353,11 +294,9 @@ func TestNullStructCount(t *testing.T) {
if true {
item := new(NullType)
total, err := testEngine.Where("age IS NOT NULL").Count(item)
if err != nil {
t.Error(err)
panic(err)
}
ageName := "`" + colMapper.Obj2Table("Age") + "`"
total, err := testEngine.Where(ageName + " IS NOT NULL").Count(item)
assert.NoError(t, err)
fmt.Println(total)
}
}
@ -367,19 +306,14 @@ func TestNullStructRows(t *testing.T) {
assertSync(t, new(NullType))
item := new(NullType)
rows, err := testEngine.Where("id > ?", 1).Rows(item)
if err != nil {
t.Error(err)
panic(err)
}
idName := "`" + colMapper.Obj2Table("Id") + "`"
rows, err := testEngine.Where(idName+" > ?", 1).Rows(item)
assert.NoError(t, err)
defer rows.Close()
for rows.Next() {
err = rows.Scan(item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
}
}
@ -391,14 +325,9 @@ func TestNullStructDelete(t *testing.T) {
item := new(NullType)
_, err := testEngine.ID(1).Delete(item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
_, err = testEngine.Where("id > ?", 1).Delete(item)
if err != nil {
t.Error(err)
panic(err)
}
idName := "`" + colMapper.Obj2Table("Id") + "`"
_, err = testEngine.Where(idName+" > ?", 1).Delete(item)
assert.NoError(t, err)
}

View File

@ -116,12 +116,16 @@ func createEngine(dbType, connStr string) error {
if len(*mapType) > 0 {
switch *mapType {
case "snake":
testEngine.SetMapper(core.SnakeMapper{})
tableMapper = core.SnakeMapper{}
case "same":
testEngine.SetMapper(core.SameMapper{})
tableMapper = core.SameMapper{}
case "gonic":
testEngine.SetMapper(core.LintGonicMapper)
tableMapper = core.LintGonicMapper
}
colMapper = tableMapper
testEngine.SetTableMapper(tableMapper)
testEngine.SetColumnMapper(colMapper)
}
}