fix tests

This commit is contained in:
Lunny Xiao 2019-03-14 22:33:48 +08:00
parent 15dc1a437a
commit b03c5d5372
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
15 changed files with 186 additions and 234 deletions

View File

@ -56,7 +56,7 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err)
assert.False(t, has)
tableName := tableMapper.Obj2Table("RecordExist")
tableName := "`" + tableMapper.Obj2Table("RecordExist") + "`"
has, err = testEngine.SQL("select * from "+testEngine.TableName(tableName, true)+" where "+nameName+" = ?", "test1").Exist()
assert.NoError(t, err)

View File

@ -52,13 +52,13 @@ 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")
tableName := "`" + tableMapper.Obj2Table("CheckList") + "`"
tableName2 := "`" + tableMapper.Obj2Table("Salary") + "`"
tableName3 := "`" + tableMapper.Obj2Table("Empsetting") + "`"
idName := colMapper.Obj2Table("Id")
lIDName := colMapper.Obj2Table("Lid")
eIDName := colMapper.Obj2Table("Eid")
idName := "`" + colMapper.Obj2Table("Id") + "`"
lIDName := "`" + colMapper.Obj2Table("Lid") + "`"
eIDName := "`" + colMapper.Obj2Table("Eid") + "`"
var salaries []Salary
err = testEngine.Table(tableName2).
@ -286,11 +286,11 @@ func TestGroupBy(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(Userinfo))
idName := "id"
idName := "`id`"
userName := colMapper.Obj2Table("Username")
users := make([]Userinfo, 0)
err := testEngine.GroupBy(idName + ", " + userName).Find(&users)
err := testEngine.GroupBy(idName + ", `" + userName + "`").Find(&users)
assert.NoError(t, err)
}
@ -609,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)
@ -650,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)
@ -783,12 +786,12 @@ func TestFindJoin(t *testing.T) {
assert.NoError(t, prepareEngine())
assertSync(t, new(SceneItem), new(DeviceUserPrivrels))
tableName1 := tableMapper.Obj2Table("SceneItem")
tableName2 := tableMapper.Obj2Table("DeviceUserPrivrels")
tableName1 := "`" + tableMapper.Obj2Table("SceneItem") + "`"
tableName2 := "`" + tableMapper.Obj2Table("DeviceUserPrivrels") + "`"
deviceIDName := colMapper.Obj2Table("DeviceId")
userIDName := colMapper.Obj2Table("UserId")
typeName := colMapper.Obj2Table("Type")
deviceIDName := "`" + colMapper.Obj2Table("DeviceId") + "`"
userIDName := "`" + colMapper.Obj2Table("UserId") + "`"
typeName := "`" + colMapper.Obj2Table("Type") + "`"
var scenes []SceneItem
err := testEngine.Join("LEFT OUTER", tableName2, tableName1+"."+deviceIDName+"="+tableName2+"."+deviceIDName).

View File

@ -35,16 +35,20 @@ func TestGetVar(t *testing.T) {
_, err := testEngine.InsertOne(&data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVar")
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(tableName).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(tableName).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)
@ -56,9 +60,9 @@ func TestGetVar(t *testing.T) {
assert.Equal(t, 28, ageMax)
var age2 int64
has, err = testEngine.Table(tableName).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)
@ -128,52 +132,47 @@ func TestGetVar(t *testing.T) {
assert.EqualValues(t, 28, age10)
var id sql.NullInt64
has, err = testEngine.Table(tableName).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(tableName).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(tableName).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(tableName).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(tableName, 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(tableName, 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(tableName, 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)
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(tableName).Get(&valuesString)
assert.NoError(t, err)
@ -187,7 +186,7 @@ func TestGetVar(t *testing.T) {
// 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(tableName).Where(idName+" = ?", 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))
@ -405,10 +404,10 @@ func TestGetStructId(t *testing.T) {
Id int64
}
idName := colMapper.Obj2Table("Id")
idName := "`" + colMapper.Obj2Table("Id") + "`"
//var id int64
var maxid maxidst
sql := "select max(" + idName + ") as id from " + testEngine.TableName(&TestGetStruct{}, true)
sql := "select max(" + idName + ") as id from " + testEngine.Quote(testEngine.TableName(&TestGetStruct{}, true))
has, err := testEngine.SQL(sql).Get(&maxid)
assert.NoError(t, err)
assert.True(t, has)

View File

@ -753,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)
@ -772,9 +776,9 @@ func TestInsertMap(t *testing.T) {
tableName := tableMapper.Obj2Table("InsertMap")
cnt, err = testEngine.Table(tableName).Insert(map[string]interface{}{
"width": 30,
"height": 10,
"name": "lunny",
widthName: 30,
heightName: 10,
nameName: "lunny",
})
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
@ -792,14 +796,14 @@ func TestInsertMap(t *testing.T) {
cnt, err = testEngine.Table(tableName).Insert([]map[string]interface{}{
{
"width": 40,
"height": 10,
"name": "lunny",
widthName: 40,
heightName: 10,
nameName: "lunny",
},
{
"width": 50,
"height": 10,
"name": "lunny",
widthName: 50,
heightName: 10,
nameName: "lunny",
},
})
assert.NoError(t, err)

View File

@ -39,7 +39,7 @@ func TestQueryString(t *testing.T) {
tableName := tableMapper.Obj2Table("GetVar2")
records, err := testEngine.QueryString("select * from " + testEngine.TableName(tableName, true))
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]))
@ -71,7 +71,7 @@ func TestQueryString2(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVar3")
tableName := "`" + tableMapper.Obj2Table("GetVar3") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
@ -141,7 +141,7 @@ func TestQueryInterface(t *testing.T) {
_, err := testEngine.InsertOne(data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVarInterface")
tableName := "`" + tableMapper.Obj2Table("GetVarInterface") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
ageName := colMapper.Obj2Table("Age")
@ -202,7 +202,7 @@ func TestQueryNoParams(t *testing.T) {
assert.EqualValues(t, 3000, money)
}
tableName := tableMapper.Obj2Table("QueryNoParams")
tableName := "`" + tableMapper.Obj2Table("QueryNoParams") + "`"
results, err := testEngine.Table(tableName).Limit(10).Query()
assert.NoError(t, err)
assertResult(t, results)
@ -228,7 +228,7 @@ func TestQueryStringNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVar4")
tableName := "`" + tableMapper.Obj2Table("GetVar4") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
@ -243,7 +243,7 @@ func TestQueryStringNoParam(t *testing.T) {
assert.EqualValues(t, "0", records[0][msgName])
}
records, err = testEngine.Table(tableName).Where(builder.Eq{idName: 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][idName])
@ -270,7 +270,7 @@ func TestQuerySliceStringNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVar6")
tableName := "`" + tableMapper.Obj2Table("GetVar6") + "`"
records, err := testEngine.Table(tableName).Limit(1).QuerySliceString()
assert.NoError(t, err)
@ -283,7 +283,7 @@ func TestQuerySliceStringNoParam(t *testing.T) {
}
idName := colMapper.Obj2Table("Id")
records, err = testEngine.Table(tableName).Where(builder.Eq{idName: 1}).QuerySliceString()
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])
@ -310,7 +310,7 @@ func TestQueryInterfaceNoParam(t *testing.T) {
_, err := testEngine.Insert(data)
assert.NoError(t, err)
tableName := tableMapper.Obj2Table("GetVar5")
tableName := "`" + tableMapper.Obj2Table("GetVar5") + "`"
idName := colMapper.Obj2Table("Id")
msgName := colMapper.Obj2Table("Msg")
@ -320,7 +320,7 @@ func TestQueryInterfaceNoParam(t *testing.T) {
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()
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]))
@ -373,7 +373,7 @@ func TestQueryWithBuilder(t *testing.T) {
}
tableName := tableMapper.Obj2Table("QueryWithBuilder")
results, err := testEngine.Query(builder.Select("*").From(testEngine.TableName(tableName, true)))
results, err := testEngine.Query(builder.Select("*").From("`" + testEngine.TableName(tableName, true) + "`"))
assert.NoError(t, err)
assertResult(t, results)
}
@ -414,11 +414,11 @@ func TestJoinWithSubQuery(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
tableName := tableMapper.Obj2Table("JoinWithSubQueryDepart")
tableName1 := tableMapper.Obj2Table("JoinWithSubQuery1")
tableName := "`" + tableMapper.Obj2Table("JoinWithSubQueryDepart") + "`"
tableName1 := "`" + tableMapper.Obj2Table("JoinWithSubQuery1") + "`"
departID := colMapper.Obj2Table("DepartId")
idName := colMapper.Obj2Table("Id")
departID := "`" + colMapper.Obj2Table("DepartId") + "`"
idName := "`" + colMapper.Obj2Table("Id") + "`"
var querys []JoinWithSubQuery1
err = testEngine.Join("INNER", builder.Select(idName).From(testEngine.Quote(testEngine.TableName(tableName, true))),

View File

@ -25,13 +25,13 @@ func TestExecAndQuery(t *testing.T) {
uidName := colMapper.Obj2Table("Uid")
nameName := colMapper.Obj2Table("Name")
res, err := testEngine.Exec("INSERT INTO "+testEngine.TableName(tableName, true)+" ("+uidName+", "+nameName+") VALUES (?, ?)", 1, "user")
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(tableName, 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][uidName]))

View File

@ -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))
}
@ -214,8 +215,7 @@ func TestSQLCount(t *testing.T) {
tableName := tableMapper.Obj2Table("UserinfoCount2")
idName := colMapper.Obj2Table("Id")
total, err := testEngine.SQL("SELECT count(" + idName + ") FROM " + testEngine.TableName(tableName, true)).
Count()
total, err := testEngine.SQL("SELECT count(`" + idName + "`) FROM `" + testEngine.TableName(tableName, true) + "`").Count()
assert.NoError(t, err)
assert.EqualValues(t, 0, total)
}

View File

@ -79,7 +79,7 @@ func TestCombineTransaction(t *testing.T) {
_, err = session.Where("id = ?", 0).Update(&user2)
assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName(tableName, 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()
@ -107,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()
@ -121,7 +122,7 @@ func TestMultipleTransaction(t *testing.T) {
err = session.Begin()
assert.NoError(t, err)
_, err = session.Where("id=?", m1.Id).Delete(new(MultipleTransaction))
_, err = session.Where("`"+idName+"`=?", m1.Id).Delete(new(MultipleTransaction))
assert.NoError(t, err)
err = session.Commit()

View File

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

View File

@ -34,8 +34,9 @@ func TestUpdateMap(t *testing.T) {
tableName := tableMapper.Obj2Table("UpdateTable")
nameName := colMapper.Obj2Table("Name")
ageName := colMapper.Obj2Table("age")
idName := colMapper.Obj2Table("Id")
cnt, err := testEngine.Table(tableName).Where("id = ?", tb.Id).Update(map[string]interface{}{
cnt, err := testEngine.Table(tableName).Where("`"+idName+"` = ?", tb.Id).Update(map[string]interface{}{
nameName: "test2",
ageName: 36,
})
@ -67,7 +68,7 @@ func TestUpdateLimit(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
nameName := colMapper.Obj2Table("Name")
nameName := "`" + colMapper.Obj2Table("Name") + "`"
cnt, err = testEngine.OrderBy(nameName + " desc").Limit(1).Update(&UpdateTable2{
Age: 30,
@ -274,8 +275,8 @@ func TestUpdateMap2(t *testing.T) {
assertSync(t, new(UpdateMustCols))
tableName := tableMapper.Obj2Table("UpdateMustCols")
_, err := testEngine.Table(tableName).Where("id =?", 1).Update(map[string]interface{}{
"bool": true,
_, err := testEngine.Table(tableName).Where("`"+colMapper.Obj2Table("Id")+"` =?", 1).Update(map[string]interface{}{
colMapper.Obj2Table("Bool"): true,
})
assert.NoError(t, err)
}
@ -299,7 +300,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)
@ -311,13 +319,6 @@ 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}
@ -757,7 +758,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)
}
@ -888,7 +891,7 @@ func TestUpdateMapCondition(t *testing.T) {
_, err := testEngine.Insert(&c)
assert.NoError(t, err)
idName := colMapper.Obj2Table("Id")
idName := "`" + colMapper.Obj2Table("Id") + "`"
cnt, err := testEngine.Update(&UpdateMapCondition{
String: "string1",
@ -1075,8 +1078,10 @@ func TestUpdateDeleted(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 0, cnt)
nameName := colMapper.Obj2Table("Name")
cnt, err = testEngine.Table(&UpdateDeletedStruct{}).ID(s.Id).Update(map[string]interface{}{
"name": "test1",
nameName: "test1",
})
assert.NoError(t, err)
assert.EqualValues(t, 0, cnt)

View File

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

View File

@ -197,10 +197,11 @@ func TestDistinctAndCols(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
tableName := tableMapper.Obj2Table("DistinctAndCols")
tableName := "`" + tableMapper.Obj2Table("DistinctAndCols") + "`"
nameName := "`" + colMapper.Obj2Table("Name") + "`"
var names []string
err = testEngine.Table(tableName).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])
@ -214,9 +215,11 @@ func TestUpdateIgnoreOnlyFromDBFields(t *testing.T) {
IngoreField string `xorm:"-"`
}
idName := colMapper.Obj2Table("Id")
assertGetRecord := func() *TestOnlyFromDBField {
var record TestOnlyFromDBField
has, err := testEngine.Where("id = ?", 1).Get(&record)
has, err := testEngine.Where("`"+idName+"` = ?", 1).Get(&record)
assert.NoError(t, err)
assert.EqualValues(t, true, has)
assert.EqualValues(t, "", record.OnlyFromDBField)

View File

@ -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})
@ -526,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(&s).Cols("created").Get(&tm)
createdName := "`" + colMapper.Obj2Table("Created") + "`"
has, err = testEngine.Table(&s).Cols(createdName).Get(&tm)
assert.NoError(t, err)
assert.True(t, has)
assert.EqualValues(t, s.Created.UTC().Format("2006-01-02 15:04:05"),

View File

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

View File

@ -60,20 +60,14 @@ func TestCreateNullStructTable(t *testing.T) {
assert.NoError(t, prepareEngine())
err := testEngine.CreateTables(new(NullType))
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
func TestDropNullStructTable(t *testing.T) {
assert.NoError(t, prepareEngine())
err := testEngine.DropTables(new(NullType))
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
}
func TestNullStructInsert(t *testing.T) {
@ -83,16 +77,9 @@ func TestNullStructInsert(t *testing.T) {
if true {
item := new(NullType)
_, err := testEngine.Insert(item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
if item.Id != 1 {
err = errors.New("insert error")
t.Error(err)
panic(err)
}
assert.EqualValues(t, 1, item.Id)
}
if true {
@ -103,16 +90,9 @@ func TestNullStructInsert(t *testing.T) {
IsMan: sql.NullBool{Bool: true, Valid: true},
}
_, err := testEngine.Insert(&item)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(item)
if item.Id != 2 {
err = errors.New("insert error")
t.Error(err)
panic(err)
}
assert.EqualValues(t, 2, item.Id)
}
if true {
@ -131,10 +111,7 @@ func TestNullStructInsert(t *testing.T) {
}
_, err := testEngine.Insert(&items)
if err != nil {
t.Error(err)
panic(err)
}
assert.NoError(t, err)
fmt.Println(items)
}
}
@ -171,36 +148,27 @@ func TestNullStructUpdate(t *testing.T) {
})
assert.NoError(t, err)
idName := "`" + colMapper.Obj2Table("Id") + "`"
ageName := "`" + colMapper.Obj2Table("Age") + "`"
heightName := "`" + colMapper.Obj2Table("Height") + "`"
isManName := "`" + colMapper.Obj2Table("IsMan") + "`"
if true { // 测试可插入NULL
item := new(NullType)
item.Age = sql.NullInt64{Int64: 23, Valid: true}
item.Height = sql.NullFloat64{Float64: 0, Valid: false} // update to NULL
affected, err := testEngine.ID(2).Cols("age", "height", "is_man").Update(item)
if err != nil {
t.Error(err)
panic(err)
}
if affected != 1 {
err := errors.New("update failed")
t.Error(err)
panic(err)
}
affected, err := testEngine.ID(2).Cols(ageName, heightName, isManName).Update(item)
assert.NoError(t, err)
assert.EqualValues(t, 1, affected)
}
if true { // 测试In update
item := new(NullType)
item.Age = sql.NullInt64{Int64: 23, Valid: true}
affected, err := testEngine.In("id", 3, 4).Cols("age", "height", "is_man").Update(item)
if err != nil {
t.Error(err)
panic(err)
}
if affected != 2 {
err := errors.New("update failed")
t.Error(err)
panic(err)
}
item.Age = sql.NullInt64{23, true}
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)
}