diff --git a/.circleci/config.yml b/.circleci/config.yml index 7f681029..c7a8d6a9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -49,8 +49,8 @@ jobs: - 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-1.txt -covermode=atomic - - run: go test -v -race -db="mysql" -conn_str="root:@/xorm_test" -map_type=same -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 @@ -62,6 +62,6 @@ jobs: - 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="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: 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 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: bash <(curl -s https://codecov.io/bash) \ No newline at end of file diff --git a/cache_test.go b/cache_test.go index 26d7ac68..3d848039 100644 --- a/cache_test.go +++ b/cache_test.go @@ -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) diff --git a/interface.go b/interface.go index 81a4b68a..f86108f0 100644 --- a/interface.go +++ b/interface.go @@ -91,12 +91,14 @@ type EngineInterface interface { NoAutoTime() *Session Quote(string) string SetCacher(string, core.Cacher) + SetColumnMapper(core.IMapper) SetConnMaxLifetime(time.Duration) SetColumnMapper(core.IMapper) SetDefaultCacher(core.Cacher) SetLogger(logger core.ILogger) SetLogLevel(core.LogLevel) SetMapper(core.IMapper) + SetTableMapper(core.IMapper) SetMaxOpenConns(int) SetMaxIdleConns(int) SetSchema(string) diff --git a/session_cond_test.go b/session_cond_test.go index 10650484..0bc14171 100644 --- a/session_cond_test.go +++ b/session_cond_test.go @@ -9,8 +9,8 @@ import ( "fmt" "testing" - "xorm.io/builder" "github.com/stretchr/testify/assert" + "xorm.io/builder" ) func TestBuilder(t *testing.T) { @@ -36,25 +36,27 @@ 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") + 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"}. + has, err = testEngine.Where(builder.Eq{colNameName: "col1"}. And(builder.Eq{"op": 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", "op": OpEqual, "value": "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"}. + has, err = testEngine.Where(builder.Eq{colNameName: "col1"}. And(builder.Neq{"op": OpEqual})). NoAutoCondition(). Get(&cond) @@ -62,37 +64,37 @@ func TestBuilder(t *testing.T) { assert.Equal(t, false, has, "records should not exist") var conds []Condition - err = testEngine.Where(builder.Eq{"col_name": "col1"}. + err = testEngine.Where(builder.Eq{colNameName: "col1"}. And(builder.Eq{"op": 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) diff --git a/session_exist_test.go b/session_exist_test.go index 2792654f..16019780 100644 --- a/session_exist_test.go +++ b/session_exist_test.go @@ -54,23 +54,25 @@ func TestExistStruct(t *testing.T) { 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 name = ?", "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 name = ?", "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("name = ?", "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("name = ?", "test2").Exist() assert.NoError(t, err) assert.False(t, has) } diff --git a/session_find_test.go b/session_find_test.go index f805f06e..28eda173 100644 --- a/session_find_test.go +++ b/session_find_test.go @@ -10,7 +10,6 @@ import ( "testing" "time" - "xorm.io/core" "github.com/stretchr/testify/assert" ) @@ -53,10 +52,12 @@ func TestJoinLimit(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 1, cnt) + tableName := tableMapper.Obj2Table("CheckList") + var salaries []Salary err = testEngine.Table("salary"). - Join("INNER", "check_list", "check_list.id = salary.lid"). - Join("LEFT", "empsetting", "empsetting.id = check_list.eid"). + Join("INNER", tableName, tableName+".id = salary.lid"). + Join("LEFT", "empsetting", "empsetting.id = "+tableName+".eid"). Limit(10, 0). Find(&salaries) assert.NoError(t, err) @@ -133,7 +134,7 @@ type TeamUser struct { } func (TeamUser) TableName() string { - return "team_user" + return tableMapper.Obj2Table("TeamUser") } func TestFind3(t *testing.T) { @@ -142,51 +143,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+"`.id"). + 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 +205,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 +218,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) } @@ -286,57 +290,12 @@ func TestHaving(t *testing.T) { 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) } @@ -791,13 +750,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) } diff --git a/session_get_test.go b/session_get_test.go index 54ba8916..585f5327 100644 --- a/session_get_test.go +++ b/session_get_test.go @@ -35,14 +35,16 @@ func TestGetVar(t *testing.T) { _, err := testEngine.InsertOne(&data) assert.NoError(t, err) + tableName := tableMapper.Obj2Table("GetVar") + var msg string - has, err := testEngine.Table("get_var").Cols("msg").Get(&msg) + has, err := testEngine.Table(tableName).Cols("msg").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("age").Get(&age) assert.NoError(t, err) assert.Equal(t, true, has) assert.Equal(t, 28, age) @@ -54,7 +56,7 @@ func TestGetVar(t *testing.T) { assert.Equal(t, 28, ageMax) var age2 int64 - has, err = testEngine.Table("get_var").Cols("age"). + has, err = testEngine.Table(tableName).Cols("age"). Where("age > ?", 20). And("age < ?", 30). Get(&age2) @@ -126,72 +128,77 @@ 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("id").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("msg").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("money").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("money").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 money 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 money 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 money FROM " + testEngine.TableName(tableName, true) + " WHERE money > 20").Get(&money3) assert.NoError(t, err) assert.Equal(t, false, has) + idName := colMapper.Obj2Table("Id") + ageName := colMapper.Obj2Table("Age") + msgName := colMapper.Obj2Table("Msg") + moneyName := colMapper.Obj2Table("Money") + 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 +207,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 +336,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 +375,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 +405,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.TableName(&TestGetStruct{}, true) has, err := testEngine.SQL(sql).Get(&maxid) assert.NoError(t, err) assert.True(t, has) diff --git a/session_insert_test.go b/session_insert_test.go index 9cd5b86a..0b3236cc 100644 --- a/session_insert_test.go +++ b/session_insert_test.go @@ -768,7 +768,9 @@ 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{}{ + tableName := tableMapper.Obj2Table("InsertMap") + + cnt, err = testEngine.Table(tableName).Insert(map[string]interface{}{ "width": 30, "height": 10, "name": "lunny", @@ -787,7 +789,7 @@ 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, diff --git a/session_query_test.go b/session_query_test.go index 772206a8..d3e5fc16 100644 --- a/session_query_test.go +++ b/session_query_test.go @@ -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]) diff --git a/session_raw_test.go b/session_raw_test.go index 766206a4..10d8ec07 100644 --- a/session_raw_test.go +++ b/session_raw_test.go @@ -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])) } diff --git a/session_schema_test.go b/session_schema_test.go index f24d1405..3a84ca33 100644 --- a/session_schema_test.go +++ b/session_schema_test.go @@ -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))) } diff --git a/session_stats_test.go b/session_stats_test.go index 01c76ba5..35a9e408 100644 --- a/session_stats_test.go +++ b/session_stats_test.go @@ -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 { @@ -186,11 +186,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,7 +212,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)). + 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) } diff --git a/session_update_test.go b/session_update_test.go index 64d133c4..1ffa0ef6 100644 --- a/session_update_test.go +++ b/session_update_test.go @@ -32,9 +32,13 @@ 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") + + cnt, err := testEngine.Table(tableName).Where("id = ?", tb.Id).Update(map[string]interface{}{ + nameName: "test2", + ageName: 36, }) assert.NoError(t, err) assert.EqualValues(t, 1, cnt) @@ -64,7 +68,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,7 +274,8 @@ 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{}{ + tableName := tableMapper.Obj2Table("UpdateMustCols") + _, err := testEngine.Table(tableName).Where("id =?", 1).Update(map[string]interface{}{ "bool": true, }) assert.NoError(t, err) @@ -305,6 +312,13 @@ func TestUpdate1(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, cnt, total) + userName := colMapper.Obj2Table("Username") + heightName := colMapper.Obj2Table("Height") + departName := colMapper.Obj2Table("Departname") + detailIDName := "detail_id" + isMan := colMapper.Obj2Table("IsMan") + createdName := colMapper.Obj2Table("Created") + // nullable update { user := &Userinfo{Username: "not null data", Height: 180.5} @@ -313,29 +327,29 @@ func TestUpdate1(t *testing.T) { 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{}) 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) 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{}) assert.NoError(t, err) assert.True(t, has) @@ -994,8 +1008,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) @@ -1007,11 +1022,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) @@ -1036,10 +1051,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) @@ -1074,7 +1091,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) @@ -1085,9 +1106,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) @@ -1101,9 +1122,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) diff --git a/statement_test.go b/statement_test.go index acc542ab..cbe590d5 100644 --- a/statement_test.go +++ b/statement_test.go @@ -197,8 +197,10 @@ func TestDistinctAndCols(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, 1, cnt) + tableName := tableMapper.Obj2Table("DistinctAndCols") + var names []string - err = testEngine.Table("distinct_and_cols").Cols("name").Distinct("name").Find(&names) + err = testEngine.Table(tableName).Cols("name").Distinct("name").Find(&names) assert.NoError(t, err) assert.EqualValues(t, 1, len(names)) assert.EqualValues(t, "test", names[0]) diff --git a/tag_extends_test.go b/tag_extends_test.go index 5a8031f0..3bbb0856 100644 --- a/tag_extends_test.go +++ b/tag_extends_test.go @@ -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. diff --git a/tag_test.go b/tag_test.go index 979ba929..056f5c66 100644 --- a/tag_test.go +++ b/tag_test.go @@ -159,12 +159,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 +199,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 +526,7 @@ 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) + has, err = testEngine.Table(&s).Cols("created").Get(&tm) assert.NoError(t, err) assert.True(t, has) assert.EqualValues(t, s.Created.UTC().Format("2006-01-02 15:04:05"), diff --git a/xorm_test.go b/xorm_test.go index 21715256..267f24bf 100644 --- a/xorm_test.go +++ b/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) } }