improve tests #1250
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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]))
|
||||
}
|
||||
|
|
|
@ -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)))
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
35
statement.go
35
statement.go
|
@ -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)))
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
12
tag_test.go
12
tag_test.go
|
@ -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"),
|
||||
|
|
12
time_test.go
12
time_test.go
|
@ -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)))
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
10
xorm_test.go
10
xorm_test.go
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user