Fix tests

This commit is contained in:
Lunny Xiao 2021-07-24 00:32:23 +08:00
parent 20eb15c4c1
commit b5893755cb
26 changed files with 251 additions and 178 deletions

View File

@ -551,6 +551,12 @@ func (db *dameng) Version(ctx context.Context, queryer core.Queryer) (*schemas.V
}, nil }, nil
} }
func (db *dameng) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: SequenceAutoincrMode,
}
}
func (db *dameng) SQLType(c *schemas.Column) string { func (db *dameng) SQLType(c *schemas.Column) string {
var res string var res string
switch t := c.SQLType.Name; t { switch t := c.SQLType.Name; t {
@ -561,7 +567,7 @@ func (db *dameng) SQLType(c *schemas.Column) string {
case schemas.BigInt, case schemas.BigInt,
schemas.UnsignedBigInt, schemas.UnsignedBit, schemas.UnsignedInt, schemas.UnsignedBigInt, schemas.UnsignedBit, schemas.UnsignedInt,
schemas.Serial, schemas.BigSerial: schemas.Serial, schemas.BigSerial:
res = "BIGINT" return "BIGINT"
case schemas.Bit, schemas.Bool: case schemas.Bit, schemas.Bool:
return schemas.Bit return schemas.Bit
case schemas.Binary, schemas.VarBinary, schemas.Blob, schemas.TinyBlob, schemas.MediumBlob, schemas.LongBlob, schemas.Bytea: case schemas.Binary, schemas.VarBinary, schemas.Blob, schemas.TinyBlob, schemas.MediumBlob, schemas.LongBlob, schemas.Bytea:

View File

@ -38,11 +38,21 @@ func (uri *URI) SetSchema(schema string) {
} }
} }
const (
IncrAutoincrMode = iota
SequenceAutoincrMode
)
type DialectFeatures struct {
AutoincrMode int // 0 autoincrement column, 1 sequence
}
// Dialect represents a kind of database // Dialect represents a kind of database
type Dialect interface { type Dialect interface {
Init(*URI) error Init(*URI) error
URI() *URI URI() *URI
Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error)
Features() *DialectFeatures
SQLType(*schemas.Column) string SQLType(*schemas.Column) string
Alias(string) string // return what a sql type's alias of Alias(string) string // return what a sql type's alias of

View File

@ -282,6 +282,12 @@ func (db *mssql) Version(ctx context.Context, queryer core.Queryer) (*schemas.Ve
}, nil }, nil
} }
func (db *mssql) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: IncrAutoincrMode,
}
}
func (db *mssql) SQLType(c *schemas.Column) string { func (db *mssql) SQLType(c *schemas.Column) string {
var res string var res string
switch t := c.SQLType.Name; t { switch t := c.SQLType.Name; t {

View File

@ -244,6 +244,12 @@ func (db *mysql) Version(ctx context.Context, queryer core.Queryer) (*schemas.Ve
}, nil }, nil
} }
func (db *mysql) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: IncrAutoincrMode,
}
}
func (db *mysql) SetParams(params map[string]string) { func (db *mysql) SetParams(params map[string]string) {
rowFormat, ok := params["rowFormat"] rowFormat, ok := params["rowFormat"]
if ok { if ok {

View File

@ -539,6 +539,12 @@ func (db *oracle) Version(ctx context.Context, queryer core.Queryer) (*schemas.V
}, nil }, nil
} }
func (db *oracle) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: SequenceAutoincrMode,
}
}
func (db *oracle) SQLType(c *schemas.Column) string { func (db *oracle) SQLType(c *schemas.Column) string {
var res string var res string
switch t := c.SQLType.Name; t { switch t := c.SQLType.Name; t {

View File

@ -941,6 +941,12 @@ func (db *postgres) SQLType(c *schemas.Column) string {
return res return res
} }
func (db *postgres) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: IncrAutoincrMode,
}
}
func (db *postgres) ColumnTypeKind(t string) int { func (db *postgres) ColumnTypeKind(t string) int {
switch strings.ToUpper(t) { switch strings.ToUpper(t) {
case "DATETIME", "TIMESTAMP": case "DATETIME", "TIMESTAMP":

View File

@ -184,6 +184,12 @@ func (db *sqlite3) Version(ctx context.Context, queryer core.Queryer) (*schemas.
}, nil }, nil
} }
func (db *sqlite3) Features() *DialectFeatures {
return &DialectFeatures{
AutoincrMode: IncrAutoincrMode,
}
}
func (db *sqlite3) SetQuotePolicy(quotePolicy QuotePolicy) { func (db *sqlite3) SetQuotePolicy(quotePolicy QuotePolicy) {
switch quotePolicy { switch quotePolicy {
case QuotePolicyNone: case QuotePolicyNone:

View File

@ -62,8 +62,8 @@ func TestCacheFind(t *testing.T) {
} }
boxes = make([]MailBox, 0, 2) boxes = make([]MailBox, 0, 2)
assert.NoError(t, testEngine.Alias("a").Where(testEngine.Quote("a.id")+" > -1"). assert.NoError(t, testEngine.Alias("a").Where("`a`.`id`> -1").
Asc(testEngine.Quote("a.id")).Find(&boxes)) Asc("`a`.`id`").Find(&boxes))
assert.EqualValues(t, 2, len(boxes)) assert.EqualValues(t, 2, len(boxes))
for i, box := range boxes { for i, box := range boxes {
assert.Equal(t, inserts[i].Id, box.Id) assert.Equal(t, inserts[i].Id, box.Id)
@ -78,8 +78,8 @@ func TestCacheFind(t *testing.T) {
} }
boxes2 := make([]MailBox4, 0, 2) boxes2 := make([]MailBox4, 0, 2)
assert.NoError(t, testEngine.Table("mail_box").Where(testEngine.Quote("mail_box.id")+" > -1"). assert.NoError(t, testEngine.Table("mail_box").Where("`mail_box`.`id` > -1").
Asc(testEngine.Quote("mail_box.id")).Find(&boxes2)) Asc("mail_box.id").Find(&boxes2))
assert.EqualValues(t, 2, len(boxes2)) assert.EqualValues(t, 2, len(boxes2))
for i, box := range boxes2 { for i, box := range boxes2 {
assert.Equal(t, inserts[i].Id, box.Id) assert.Equal(t, inserts[i].Id, box.Id)
@ -166,14 +166,14 @@ func TestCacheGet(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var box1 MailBox3 var box1 MailBox3
has, err := testEngine.Where(testEngine.Quote("id")+" = ?", inserts[0].Id).Get(&box1) has, err := testEngine.Where("`id` = ?", inserts[0].Id).Get(&box1)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, "user1", box1.Username) assert.EqualValues(t, "user1", box1.Username)
assert.EqualValues(t, "pass1", box1.Password) assert.EqualValues(t, "pass1", box1.Password)
var box2 MailBox3 var box2 MailBox3
has, err = testEngine.Where(testEngine.Quote("id")+" = ?", inserts[0].Id).Get(&box2) has, err = testEngine.Where("`id` = ?", inserts[0].Id).Get(&box2)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, "user1", box2.Username) assert.EqualValues(t, "user1", box2.Username)

View File

@ -32,7 +32,7 @@ func BenchmarkGetVars(b *testing.B) {
b.StartTimer() b.StartTimer()
var myname string var myname string
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
has, err := testEngine.Cols("name").Table("benchmark_get_vars").Where("id=?", v.Id).Get(&myname) has, err := testEngine.Cols("name").Table("benchmark_get_vars").Where("`id`=?", v.Id).Get(&myname)
b.StopTimer() b.StopTimer()
myname = "" myname = ""
assert.True(b, has) assert.True(b, has)

View File

@ -54,9 +54,9 @@ func TestSetExpr(t *testing.T) {
tableName := testEngine.TableName(new(UserExprIssue), true) tableName := testEngine.TableName(new(UserExprIssue), true)
cnt, err = testEngine.SetExpr("issue_id", cnt, err = testEngine.SetExpr("issue_id",
builder.Select(testEngine.Quote("id")). builder.Select("`id`").
From(testEngine.Quote(tableName)). From(testEngine.Quote(tableName)).
Where(builder.Eq{testEngine.Quote("id"): issue.Id})). Where(builder.Eq{"`id`": issue.Id})).
ID(1). ID(1).
Update(new(UserExpr)) Update(new(UserExpr))
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -216,7 +216,7 @@ func TestFindAndCount(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var results []FindAndCount var results []FindAndCount
sess := testEngine.Where(testEngine.Quote("name")+" = ?", "test1") sess := testEngine.Where("`name` = ?", "test1")
conds := sess.Conds() conds := sess.Conds()
err = sess.Find(&results) err = sess.Find(&results)
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -63,7 +63,7 @@ func TestSQLCount(t *testing.T) {
assertSync(t, new(UserinfoCount2), new(UserinfoBooks)) assertSync(t, new(UserinfoCount2), new(UserinfoBooks))
total, err := testEngine.SQL("SELECT count(" + testEngine.Quote("id") + ") FROM " + testEngine.TableName("userinfo_count2", true)). total, err := testEngine.SQL("SELECT count(`id`) FROM `" + testEngine.TableName("userinfo_count2", true) + "`").
Count() Count()
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 0, total) assert.EqualValues(t, 0, total)
@ -89,7 +89,7 @@ func TestCountWithOthers(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Limit(1).Count(new(CountWithOthers)) total, err := testEngine.OrderBy("`id` desc").Limit(1).Count(new(CountWithOthers))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -118,11 +118,11 @@ func TestWithTableName(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Count(new(CountWithTableName)) total, err := testEngine.OrderBy("`id` desc").Count(new(CountWithTableName))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
total, err = testEngine.OrderBy("id desc").Count(CountWithTableName{}) total, err = testEngine.OrderBy("`id` desc").Count(CountWithTableName{})
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -146,7 +146,7 @@ func TestCountWithSelectCols(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
total, err = testEngine.Select("count(id)").Count(CountWithTableName{}) total, err = testEngine.Select("count(`id`)").Count(CountWithTableName{})
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -166,7 +166,7 @@ func TestCountWithGroupBy(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
cnt, err := testEngine.GroupBy(testEngine.Quote("name")).Count(new(CountWithTableName)) cnt, err := testEngine.GroupBy("`name`").Count(new(CountWithTableName))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, cnt) assert.EqualValues(t, 2, cnt)
} }

View File

@ -48,19 +48,19 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
has, err = testEngine.Where(testEngine.Quote("name")+" = ?", "test1").Exist(&RecordExist{}) has, err = testEngine.Where("`name` = ?", "test1").Exist(&RecordExist{})
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Where(testEngine.Quote("name")+" = ?", "test2").Exist(&RecordExist{}) has, err = testEngine.Where("`name` = ?", "test2").Exist(&RecordExist{})
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where "+testEngine.Quote("name")+" = ?", "test1").Exist() has, err = testEngine.SQL("select * from `"+testEngine.TableName("record_exist", true)+"` where `name` = ?", "test1").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where "+testEngine.Quote("name")+" = ?", "test2").Exist() has, err = testEngine.SQL("select * from `"+testEngine.TableName("record_exist", true)+"` where `name` = ?", "test2").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
@ -68,11 +68,11 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Table("record_exist").Where(testEngine.Quote("name")+" = ?", "test1").Exist() has, err = testEngine.Table("record_exist").Where("`name` = ?", "test1").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Table("record_exist").Where(testEngine.Quote("name")+" = ?", "test2").Exist() has, err = testEngine.Table("record_exist").Where("`name` = ?", "test2").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
@ -123,46 +123,44 @@ func TestExistStructForJoin(t *testing.T) {
session := testEngine.NewSession() session := testEngine.NewSession()
defer session.Close() defer session.Close()
var q = testEngine.Quote
session.Table("number"). session.Table("number").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where(q("number.lid")+" = ?", 1) Where("`number`.`lid` = ?", 1)
has, err := session.Exist() has, err := session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
session.Table("number"). session.Table("number").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("number.lid = ?", 2) Where("`number`.`lid` = ?", 2)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("order_list.id"). Select("`order_list`.`id`").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("order_list.id = ?", 1) Where("`order_list`.`id` = ?", 1)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("player.id = ?", 2) Where("`player`.`id` = ?", 2)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")) Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`")
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
@ -176,15 +174,15 @@ func TestExistStructForJoin(t *testing.T) {
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", q("order_list.id")+" = "+q("number.lid")). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", q("player.id")+" = "+q("order_list.eid")) Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`")
has, err = session.Exist() has, err = session.Exist()
assert.Error(t, err) assert.Error(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("LEFT", "player", q("player.id")+" = "+q("number.lid")) Join("LEFT", "player", "`player`.`id` = `number`.`lid`")
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)

View File

@ -56,8 +56,8 @@ func TestJoinLimit(t *testing.T) {
var salaries []Salary var salaries []Salary
err = testEngine.Table("salary"). err = testEngine.Table("salary").
Join("INNER", "check_list", "check_list.id = salary.lid"). Join("INNER", "check_list", "`check_list`.`id` = `salary`.`lid`").
Join("LEFT", "empsetting", "empsetting.id = check_list.eid"). Join("LEFT", "empsetting", "`empsetting`.`id` = `check_list`.`eid`").
Limit(10, 0). Limit(10, 0).
Find(&salaries) Find(&salaries)
assert.NoError(t, err) assert.NoError(t, err)
@ -69,10 +69,10 @@ func TestWhere(t *testing.T) {
assertSync(t, new(Userinfo)) assertSync(t, new(Userinfo))
users := make([]Userinfo, 0) users := make([]Userinfo, 0)
err := testEngine.Where("id > ?", 2).Find(&users) err := testEngine.Where("`id` > ?", 2).Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
err = testEngine.Where("id > ?", 2).And("id < ?", 10).Find(&users) err = testEngine.Where("`id` > ?", 2).And("`id` < ?", 10).Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -125,50 +125,50 @@ func TestFind3(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var teams []Team var teams []Team
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.`id`").
Where("`team_user`.org_id=?", 1). Where("`team_user`.`org_id`=?", 1).
And("`team_user`.uid=?", 2). And("`team_user`.`uid`=?", 2).
Join("INNER", "`team_user`", "`team_user`.team_id=`team`.id"). Join("INNER", "`team_user`", "`team_user`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
teams = make([]Team, 0) teams = make([]Team, 0)
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.id").
Where("`team_user`.org_id=?", 1). Where("`team_user`.`org_id`=?", 1).
And("`team_user`.uid=?", 2). And("`team_user`.`uid`=?", 2).
Join("INNER", teamUser, "`team_user`.team_id=`team`.id"). Join("INNER", teamUser, "`team_user`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
teams = make([]Team, 0) teams = make([]Team, 0)
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.`id`").
Where("`team_user`.org_id=?", 1). Where("`team_user`.`org_id`=?", 1).
And("`team_user`.uid=?", 2). And("`team_user`.`uid`=?", 2).
Join("INNER", []interface{}{teamUser}, "`team_user`.team_id=`team`.id"). Join("INNER", []interface{}{teamUser}, "`team_user`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
teams = make([]Team, 0) teams = make([]Team, 0)
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.`id`").
Where("`tu`.org_id=?", 1). Where("`tu`.`org_id`=?", 1).
And("`tu`.uid=?", 2). And("`tu`.`uid`=?", 2).
Join("INNER", []string{"team_user", "tu"}, "`tu`.team_id=`team`.id"). Join("INNER", []string{"team_user", "tu"}, "`tu`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
teams = make([]Team, 0) teams = make([]Team, 0)
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.`id`").
Where("`tu`.org_id=?", 1). Where("`tu`.`org_id`=?", 1).
And("`tu`.uid=?", 2). And("`tu`.`uid`=?", 2).
Join("INNER", []interface{}{"team_user", "tu"}, "`tu`.team_id=`team`.id"). Join("INNER", []interface{}{"team_user", "tu"}, "`tu`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
teams = make([]Team, 0) teams = make([]Team, 0)
err = testEngine.Cols("`team`.id"). err = testEngine.Cols("`team`.`id`").
Where("`tu`.org_id=?", 1). Where("`tu`.`org_id`=?", 1).
And("`tu`.uid=?", 2). And("`tu`.`uid`=?", 2).
Join("INNER", []interface{}{teamUser, "tu"}, "`tu`.team_id=`team`.id"). Join("INNER", []interface{}{teamUser, "tu"}, "`tu`.`team_id`=`team`.`id`").
Find(&teams) Find(&teams)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -241,7 +241,7 @@ func TestOrder(t *testing.T) {
assertSync(t, new(Userinfo)) assertSync(t, new(Userinfo))
users := make([]Userinfo, 0) users := make([]Userinfo, 0)
err := testEngine.OrderBy("id desc").Find(&users) err := testEngine.OrderBy("`id` desc").Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
users2 := make([]Userinfo, 0) users2 := make([]Userinfo, 0)
@ -254,7 +254,7 @@ func TestGroupBy(t *testing.T) {
assertSync(t, new(Userinfo)) assertSync(t, new(Userinfo))
users := make([]Userinfo, 0) users := make([]Userinfo, 0)
err := testEngine.GroupBy("id, username").Find(&users) err := testEngine.GroupBy("`id`, `username`").Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -263,7 +263,7 @@ func TestHaving(t *testing.T) {
assertSync(t, new(Userinfo)) assertSync(t, new(Userinfo))
users := make([]Userinfo, 0) 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) assert.NoError(t, err)
} }
@ -499,7 +499,7 @@ func TestFindAndCountOneFunc(t *testing.T) {
assert.EqualValues(t, 2, cnt) assert.EqualValues(t, 2, cnt)
results = make([]FindAndCountStruct, 0, 1) results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).FindAndCount(&results) cnt, err = testEngine.Where("`msg` = ?", true).FindAndCount(&results)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, len(results)) assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
@ -549,21 +549,21 @@ func TestFindAndCountOneFunc(t *testing.T) {
}, results[0]) }, results[0])
results = make([]FindAndCountStruct, 0, 1) results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Select("id, content, msg"). cnt, err = testEngine.Where("`msg` = ?", true).Select("`id`, `content`, `msg`").
Limit(1).FindAndCount(&results) Limit(1).FindAndCount(&results)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, len(results)) assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
results = make([]FindAndCountStruct, 0, 1) results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Cols("id", "content", "msg"). cnt, err = testEngine.Where("`msg` = ?", true).Cols("id", "content", "msg").
Limit(1).FindAndCount(&results) Limit(1).FindAndCount(&results)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, len(results)) assert.EqualValues(t, 1, len(results))
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
results = make([]FindAndCountStruct, 0, 1) results = make([]FindAndCountStruct, 0, 1)
cnt, err = testEngine.Where("msg = ?", true).Desc("id"). cnt, err = testEngine.Where("`msg` = ?", true).Desc("id").
Limit(1).Cols("content").FindAndCount(&results) Limit(1).Cols("content").FindAndCount(&results)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, len(results)) assert.EqualValues(t, 1, len(results))
@ -649,7 +649,7 @@ func TestFindAndCount2(t *testing.T) {
cnt, err = testEngine. cnt, err = testEngine.
Table(new(TestFindAndCountHotel)). Table(new(TestFindAndCountHotel)).
Alias("t"). Alias("t").
Where("t.region like '6501%'"). Where("`t`.`region` like '6501%'").
Limit(10, 0). Limit(10, 0).
FindAndCount(&hotels) FindAndCount(&hotels)
assert.NoError(t, err) assert.NoError(t, err)
@ -705,7 +705,7 @@ func TestFindAndCountWithGroupBy(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var results []FindAndCountWithGroupBy var results []FindAndCountWithGroupBy
cnt, err := testEngine.GroupBy("age").FindAndCount(&results) cnt, err := testEngine.GroupBy("`age`").FindAndCount(&results)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, cnt) assert.EqualValues(t, 2, cnt)
assert.EqualValues(t, 2, len(results)) assert.EqualValues(t, 2, len(results))
@ -735,14 +735,14 @@ func TestFindMapStringId(t *testing.T) {
deviceMaps := make(map[string]*FindMapDevice, len(deviceIDs)) deviceMaps := make(map[string]*FindMapDevice, len(deviceIDs))
err = testEngine. err = testEngine.
Where("status = ?", 1). Where("`status` = ?", 1).
In("deviceid", deviceIDs). In("deviceid", deviceIDs).
Find(&deviceMaps) Find(&deviceMaps)
assert.NoError(t, err) assert.NoError(t, err)
deviceMaps2 := make(map[string]FindMapDevice, len(deviceIDs)) deviceMaps2 := make(map[string]FindMapDevice, len(deviceIDs))
err = testEngine. err = testEngine.
Where("status = ?", 1). Where("`status` = ?", 1).
In("deviceid", deviceIDs). In("deviceid", deviceIDs).
Find(&deviceMaps2) Find(&deviceMaps2)
assert.NoError(t, err) assert.NoError(t, err)
@ -919,17 +919,17 @@ func TestFindJoin(t *testing.T) {
assertSync(t, new(SceneItem), new(DeviceUserPrivrels), new(Order)) assertSync(t, new(SceneItem), new(DeviceUserPrivrels), new(Order))
var scenes []SceneItem var scenes []SceneItem
err := testEngine.Join("LEFT OUTER", "device_user_privrels", "device_user_privrels.device_id=scene_item.device_id"). 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) Where("`scene_item`.`type`=?", 3).Or("`device_user_privrels`.`user_id`=?", 339).Find(&scenes)
assert.NoError(t, err) assert.NoError(t, err)
scenes = make([]SceneItem, 0) scenes = make([]SceneItem, 0)
err = testEngine.Join("LEFT OUTER", new(DeviceUserPrivrels), "device_user_privrels.device_id=scene_item.device_id"). 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) Where("`scene_item`.`type`=?", 3).Or("`device_user_privrels`.`user_id`=?", 339).Find(&scenes)
assert.NoError(t, err) assert.NoError(t, err)
scenes = make([]SceneItem, 0) scenes = make([]SceneItem, 0)
err = testEngine.Join("INNER", "order", "`scene_item`.device_id=`order`.id").Find(&scenes) err = testEngine.Join("INNER", "order", "`scene_item`.`device_id`=`order`.`id`").Find(&scenes)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -949,7 +949,7 @@ func TestJoinFindLimit(t *testing.T) {
assertSync(t, new(JoinFindLimit1), new(JoinFindLimit2)) assertSync(t, new(JoinFindLimit1), new(JoinFindLimit2))
var finds []JoinFindLimit1 var finds []JoinFindLimit1
err := testEngine.Join("INNER", new(JoinFindLimit2), "join_find_limit2.eid=join_find_limit1.id"). err := testEngine.Join("INNER", new(JoinFindLimit2), "`join_find_limit2`.`eid`=`join_find_limit1`.`id`").
Limit(10, 10).Find(&finds) Limit(10, 10).Find(&finds)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -981,9 +981,9 @@ func TestMoreExtends(t *testing.T) {
assertSync(t, new(MoreExtendsUsers), new(MoreExtendsBooks)) assertSync(t, new(MoreExtendsUsers), new(MoreExtendsBooks))
var books []MoreExtendsBooksExtend var books []MoreExtendsBooksExtend
err := testEngine.Table("more_extends_books").Select("more_extends_books.*, more_extends_users.*"). err := testEngine.Table("more_extends_books").Select("`more_extends_books`.*, `more_extends_users`.*").
Join("INNER", "more_extends_users", "more_extends_books.user_id = more_extends_users.id"). Join("INNER", "more_extends_users", "`more_extends_books`.`user_id` = `more_extends_users`.`id`").
Where("more_extends_books.name LIKE ?", "abc"). Where("`more_extends_books`.`name` LIKE ?", "abc").
Limit(10, 10). Limit(10, 10).
Find(&books) Find(&books)
assert.NoError(t, err) assert.NoError(t, err)
@ -991,9 +991,9 @@ func TestMoreExtends(t *testing.T) {
books = make([]MoreExtendsBooksExtend, 0, len(books)) books = make([]MoreExtendsBooksExtend, 0, len(books))
err = testEngine.Table("more_extends_books"). err = testEngine.Table("more_extends_books").
Alias("m"). Alias("m").
Select("m.*, more_extends_users.*"). Select("m.*, `more_extends_users`.*").
Join("INNER", "more_extends_users", "m.user_id = more_extends_users.id"). Join("INNER", "more_extends_users", "`m`.`user_id` = `more_extends_users`.`id`").
Where("m.name LIKE ?", "abc"). Where("`m`.`name` LIKE ?", "abc").
Limit(10, 10). Limit(10, 10).
Find(&books) Find(&books)
assert.NoError(t, err) assert.NoError(t, err)
@ -1038,11 +1038,11 @@ func TestUpdateFind(t *testing.T) {
} }
_, err := session.Insert(&tuf) _, err := session.Insert(&tuf)
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Where("id = ?", tuf.Id).Update(&TestUpdateFind{}) _, err = session.Where("`id` = ?", tuf.Id).Update(&TestUpdateFind{})
assert.EqualError(t, xorm.ErrNoColumnsTobeUpdated, err.Error()) assert.EqualError(t, xorm.ErrNoColumnsTobeUpdated, err.Error())
var tufs []TestUpdateFind var tufs []TestUpdateFind
err = session.Where("id = ?", tuf.Id).Find(&tufs) err = session.Where("`id` = ?", tuf.Id).Find(&tufs)
assert.NoError(t, err) assert.NoError(t, err)
} }

View File

@ -55,15 +55,15 @@ func TestGetVar(t *testing.T) {
assert.Equal(t, 28, age) assert.Equal(t, 28, age)
var ageMax int var ageMax int
has, err = testEngine.SQL("SELECT max(age) FROM "+testEngine.TableName("get_var", true)+" WHERE `id` = ?", data.Id).Get(&ageMax) has, err = testEngine.SQL("SELECT max(`age`) FROM `"+testEngine.TableName("get_var", true)+"` WHERE `id` = ?", data.Id).Get(&ageMax)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
assert.Equal(t, 28, ageMax) assert.Equal(t, 28, ageMax)
var age2 int64 var age2 int64
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age2) Get(&age2)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -77,8 +77,8 @@ func TestGetVar(t *testing.T) {
var age4 int16 var age4 int16
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age4) Get(&age4)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -86,8 +86,8 @@ func TestGetVar(t *testing.T) {
var age5 int32 var age5 int32
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age5) Get(&age5)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -101,8 +101,8 @@ func TestGetVar(t *testing.T) {
var age7 int64 var age7 int64
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age7) Get(&age7)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -116,8 +116,8 @@ func TestGetVar(t *testing.T) {
var age9 int16 var age9 int16
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age9) Get(&age9)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -125,8 +125,8 @@ func TestGetVar(t *testing.T) {
var age10 int32 var age10 int32
has, err = testEngine.Table("get_var").Cols("age"). has, err = testEngine.Table("get_var").Cols("age").
Where("age > ?", 20). Where("`age` > ?", 20).
And("age < ?", 30). And("`age` < ?", 30).
Get(&age10) Get(&age10)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
@ -161,16 +161,16 @@ func TestGetVar(t *testing.T) {
var money2 float64 var money2 float64
if testEngine.Dialect().URI().DBType == schemas.MSSQL { if testEngine.Dialect().URI().DBType == schemas.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.Quote(testEngine.TableName("get_var", true))).Get(&money2)
} else { } 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("get_var", true) + "` LIMIT 1").Get(&money2)
} }
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money2)) assert.Equal(t, "1.5", fmt.Sprintf("%.1f", money2))
var money3 float64 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("get_var", true) + "` WHERE `money` > 20").Get(&money3)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, false, has) assert.Equal(t, false, has)
@ -187,7 +187,7 @@ func TestGetVar(t *testing.T) {
// for mymysql driver, interface{} will be []byte, so ignore it currently // for mymysql driver, interface{} will be []byte, so ignore it currently
if testEngine.DriverName() != "mymysql" { if testEngine.DriverName() != "mymysql" {
var valuesInter = make(map[string]interface{}) var valuesInter = make(map[string]interface{})
has, err = testEngine.Table("get_var").Where("id = ?", 1).Select("*").Get(&valuesInter) has, err = testEngine.Table("get_var").Where("`id` = ?", 1).Select("*").Get(&valuesInter)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, true, has) assert.Equal(t, true, has)
assert.Equal(t, 5, len(valuesInter)) assert.Equal(t, 5, len(valuesInter))
@ -243,7 +243,7 @@ func TestGetStruct(t *testing.T) {
if testEngine.Dialect().URI().DBType == schemas.MSSQL { if testEngine.Dialect().URI().DBType == schemas.MSSQL {
err = session.Begin() err = session.Begin()
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Exec("SET IDENTITY_INSERT userinfo_get ON") _, err = session.Exec("SET IDENTITY_INSERT `userinfo_get` ON")
assert.NoError(t, err) assert.NoError(t, err)
} }
cnt, err := session.Insert(&UserinfoGet{Uid: 2}) cnt, err := session.Insert(&UserinfoGet{Uid: 2})
@ -300,6 +300,11 @@ func TestGetSlice(t *testing.T) {
func TestGetMap(t *testing.T) { func TestGetMap(t *testing.T) {
assert.NoError(t, PrepareEngine()) assert.NoError(t, PrepareEngine())
if testEngine.Dialect().Features().AutoincrMode == dialects.SequenceAutoincrMode {
t.SkipNow()
return
}
type UserinfoMap struct { type UserinfoMap struct {
Uid int `xorm:"pk autoincr"` Uid int `xorm:"pk autoincr"`
IsMan bool IsMan bool
@ -308,7 +313,7 @@ func TestGetMap(t *testing.T) {
assertSync(t, new(UserinfoMap)) assertSync(t, new(UserinfoMap))
tableName := testEngine.Quote(testEngine.TableName("userinfo_map", true)) tableName := testEngine.Quote(testEngine.TableName("userinfo_map", true))
_, err := testEngine.Exec(fmt.Sprintf("INSERT INTO %s (is_man) VALUES (NULL)", tableName)) _, err := testEngine.Exec(fmt.Sprintf("INSERT INTO %s (`is_man`) VALUES (NULL)", tableName))
assert.NoError(t, err) assert.NoError(t, err)
var valuesString = make(map[string]string) var valuesString = make(map[string]string)
@ -479,7 +484,7 @@ func TestGetStructId(t *testing.T) {
//var id int64 //var id int64
var maxid maxidst var maxid maxidst
sql := "select max(id) as id from " + testEngine.TableName(&TestGetStruct{}, true) sql := "select max(`id`) as id from `" + testEngine.TableName(&TestGetStruct{}, true) + "`"
has, err := testEngine.SQL(sql).Get(&maxid) has, err := testEngine.SQL(sql).Get(&maxid)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
@ -597,73 +602,78 @@ func TestGetNullVar(t *testing.T) {
assert.NoError(t, PrepareEngine()) assert.NoError(t, PrepareEngine())
assertSync(t, new(TestGetNullVarStruct)) assertSync(t, new(TestGetNullVarStruct))
affected, err := testEngine.Exec("insert into " + testEngine.TableName(new(TestGetNullVarStruct), true) + " (name,age) values (null,null)") if testEngine.Dialect().Features().AutoincrMode == dialects.SequenceAutoincrMode {
t.SkipNow()
return
}
affected, err := testEngine.Exec("insert into `" + testEngine.TableName(new(TestGetNullVarStruct), true) + "` (`name`,`age`) values (null,null)")
assert.NoError(t, err) assert.NoError(t, err)
a, _ := affected.RowsAffected() a, _ := affected.RowsAffected()
assert.EqualValues(t, 1, a) assert.EqualValues(t, 1, a)
var name string var name string
has, err := testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("name").Get(&name) has, err := testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("name").Get(&name)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, "", name) assert.EqualValues(t, "", name)
var age int var age int
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age) assert.EqualValues(t, 0, age)
var age2 int8 var age2 int8
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age2) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age2)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age2) assert.EqualValues(t, 0, age2)
var age3 int16 var age3 int16
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age3) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age3)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age3) assert.EqualValues(t, 0, age3)
var age4 int32 var age4 int32
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age4) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age4)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age4) assert.EqualValues(t, 0, age4)
var age5 int64 var age5 int64
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age5) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age5)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age5) assert.EqualValues(t, 0, age5)
var age6 uint var age6 uint
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age6) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age6)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age6) assert.EqualValues(t, 0, age6)
var age7 uint8 var age7 uint8
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age7) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age7)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age7) assert.EqualValues(t, 0, age7)
var age8 int16 var age8 int16
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age8) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age8)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age8) assert.EqualValues(t, 0, age8)
var age9 int32 var age9 int32
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age9) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age9)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age9) assert.EqualValues(t, 0, age9)
var age10 int64 var age10 int64
has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("id = ?", 1).Cols("age").Get(&age10) has, err = testEngine.Table(new(TestGetNullVarStruct)).Where("`id` = ?", 1).Cols("age").Get(&age10)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 0, age10) assert.EqualValues(t, 0, age10)
@ -697,7 +707,7 @@ func TestCustomTypes(t *testing.T) {
assert.EqualValues(t, "test", name) assert.EqualValues(t, "test", name)
var age MyInt var age MyInt
has, err = testEngine.Table(new(TestCustomizeStruct)).ID(s.Id).Select("age").Get(&age) has, err = testEngine.Table(new(TestCustomizeStruct)).ID(s.Id).Select("`age`").Get(&age)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, 32, age) assert.EqualValues(t, 32, age)
@ -759,7 +769,7 @@ func TestGetBigFloat(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var m big.Float var m big.Float
has, err := testEngine.Table("get_big_float").Cols("money").Where("id=?", gf.Id).Get(&m) has, err := testEngine.Table("get_big_float").Cols("money").Where("`id`=?", gf.Id).Get(&m)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String()) assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String())
@ -785,7 +795,7 @@ func TestGetBigFloat(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var m2 big.Float var m2 big.Float
has, err := testEngine.Table("get_big_float2").Cols("money").Where("id=?", gf2.Id).Get(&m2) has, err := testEngine.Table("get_big_float2").Cols("money").Where("`id`=?", gf2.Id).Get(&m2)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.True(t, m2.String() == gf2.Money.String(), "%v != %v", m2.String(), gf2.Money.String()) assert.True(t, m2.String() == gf2.Money.String(), "%v != %v", m2.String(), gf2.Money.String())
@ -825,7 +835,7 @@ func TestGetDecimal(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var m decimal.Decimal var m decimal.Decimal
has, err := testEngine.Table("get_decimal").Cols("money").Where("id=?", gf.Id).Get(&m) has, err := testEngine.Table("get_decimal").Cols("money").Where("`id`=?", gf.Id).Get(&m)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String()) assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String())
@ -850,7 +860,7 @@ func TestGetDecimal(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var m decimal.Decimal var m decimal.Decimal
has, err := testEngine.Table("get_decimal2").Cols("money").Where("id=?", gf.Id).Get(&m) has, err := testEngine.Table("get_decimal2").Cols("money").Where("`id`=?", gf.Id).Get(&m)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String()) assert.True(t, m.String() == gf.Money.String(), "%v != %v", m.String(), gf.Money.String())

View File

@ -740,7 +740,7 @@ func TestInsertWhere(t *testing.T) {
i.Index = 1 i.Index = 1
assert.EqualValues(t, i, j) assert.EqualValues(t, i, j)
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1). inserted, err = testEngine.Table(new(InsertWhere)).Where("`repo_id`=?", 1).
SetExpr("`index`", "coalesce(MAX(`index`),0)+1"). SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
Insert(map[string]interface{}{ Insert(map[string]interface{}{
"repo_id": 1, "repo_id": 1,
@ -761,7 +761,7 @@ func TestInsertWhere(t *testing.T) {
assert.EqualValues(t, "trest2", j2.Name) assert.EqualValues(t, "trest2", j2.Name)
assert.EqualValues(t, 2, j2.Index) assert.EqualValues(t, 2, j2.Index)
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1). inserted, err = testEngine.Table(new(InsertWhere)).Where("`repo_id`=?", 1).
SetExpr("`index`", "coalesce(MAX(`index`),0)+1"). SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
SetExpr("repo_id", "1"). SetExpr("repo_id", "1").
Insert(map[string]string{ Insert(map[string]string{
@ -777,7 +777,7 @@ func TestInsertWhere(t *testing.T) {
assert.EqualValues(t, "trest3", j3.Name) assert.EqualValues(t, "trest3", j3.Name)
assert.EqualValues(t, 3, j3.Index) assert.EqualValues(t, 3, j3.Index)
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1). inserted, err = testEngine.Table(new(InsertWhere)).Where("`repo_id`=?", 1).
SetExpr("`index`", "coalesce(MAX(`index`),0)+1"). SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
Insert(map[string]interface{}{ Insert(map[string]interface{}{
"repo_id": 1, "repo_id": 1,
@ -793,7 +793,7 @@ func TestInsertWhere(t *testing.T) {
assert.EqualValues(t, "10';delete * from insert_where; --", j4.Name) assert.EqualValues(t, "10';delete * from insert_where; --", j4.Name)
assert.EqualValues(t, 4, j4.Index) assert.EqualValues(t, 4, j4.Index)
inserted, err = testEngine.Table(new(InsertWhere)).Where("repo_id=?", 1). inserted, err = testEngine.Table(new(InsertWhere)).Where("`repo_id`=?", 1).
SetExpr("`index`", "coalesce(MAX(`index`),0)+1"). SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
Insert(map[string]interface{}{ Insert(map[string]interface{}{
"repo_id": 1, "repo_id": 1,

View File

@ -91,7 +91,7 @@ func TestBufferIterate(t *testing.T) {
assert.EqualValues(t, 7, cnt) assert.EqualValues(t, 7, cnt)
cnt = 0 cnt = 0
err = testEngine.Where("id <= 10").BufferSize(2).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error { err = testEngine.Where("`id` <= 10").BufferSize(2).Iterate(new(UserBufferIterate), func(i int, bean interface{}) error {
user := bean.(*UserBufferIterate) user := bean.(*UserBufferIterate)
assert.EqualValues(t, cnt+1, user.Id) assert.EqualValues(t, cnt+1, user.Id)
assert.EqualValues(t, true, user.IsMan) assert.EqualValues(t, true, user.IsMan)

View File

@ -60,7 +60,7 @@ func TestExecTime(t *testing.T) {
assert.EqualValues(t, now.In(testEngine.GetTZLocation()).Format("2006-01-02 15:04:05"), results[0]["created"]) assert.EqualValues(t, now.In(testEngine.GetTZLocation()).Format("2006-01-02 15:04:05"), results[0]["created"])
var uet UserinfoExecTime var uet UserinfoExecTime
has, err := testEngine.Where("uid=?", 1).Get(&uet) has, err := testEngine.Where("`uid`=?", 1).Get(&uet)
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
assert.EqualValues(t, now.In(testEngine.GetTZLocation()).Format("2006-01-02 15:04:05"), uet.Created.Format("2006-01-02 15:04:05")) assert.EqualValues(t, now.In(testEngine.GetTZLocation()).Format("2006-01-02 15:04:05"), uet.Created.Format("2006-01-02 15:04:05"))

View File

@ -18,7 +18,7 @@ func TestClose(t *testing.T) {
sess1.Close() sess1.Close()
assert.True(t, sess1.IsClosed()) assert.True(t, sess1.IsClosed())
sess2 := testEngine.Where("a = ?", 1) sess2 := testEngine.Where("`a` = ?", 1)
sess2.Close() sess2.Close()
assert.True(t, sess2.IsClosed()) assert.True(t, sess2.IsClosed())
} }

View File

@ -37,7 +37,7 @@ func TestTransaction(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
user2 := Userinfo{Username: "yyy"} user2 := Userinfo{Username: "yyy"}
_, err = session.Where("id = ?", 0).Update(&user2) _, err = session.Where("`id` = ?", 0).Update(&user2)
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Delete(&user2) _, err = session.Delete(&user2)
@ -70,10 +70,10 @@ func TestCombineTransaction(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
user2 := Userinfo{Username: "zzz"} user2 := Userinfo{Username: "zzz"}
_, err = session.Where("id = ?", 0).Update(&user2) _, err = session.Where("`id` = ?", 0).Update(&user2)
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName("userinfo", true)+" where username = ?", user2.Username) _, err = session.Exec("delete from "+testEngine.TableName("userinfo", true)+" where `username` = ?", user2.Username)
assert.NoError(t, err) assert.NoError(t, err)
err = session.Commit() err = session.Commit()
@ -113,7 +113,7 @@ func TestCombineTransactionSameMapper(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
user2 := Userinfo{Username: "zzz"} user2 := Userinfo{Username: "zzz"}
_, err = session.Where("id = ?", 0).Update(&user2) _, err = session.Where("`id` = ?", 0).Update(&user2)
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName("`Userinfo`", true)+" where `Username` = ?", user2.Username) _, err = session.Exec("delete from "+testEngine.TableName("`Userinfo`", true)+" where `Username` = ?", user2.Username)
@ -144,7 +144,7 @@ func TestMultipleTransaction(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
user2 := MultipleTransaction{Name: "zzz"} user2 := MultipleTransaction{Name: "zzz"}
_, err = session.Where("id = ?", 0).Update(&user2) _, err = session.Where("`id` = ?", 0).Update(&user2)
assert.NoError(t, err) assert.NoError(t, err)
err = session.Commit() err = session.Commit()
@ -158,7 +158,7 @@ func TestMultipleTransaction(t *testing.T) {
err = session.Begin() err = session.Begin()
assert.NoError(t, err) assert.NoError(t, err)
_, err = session.Where("id=?", m1.Id).Delete(new(MultipleTransaction)) _, err = session.Where("`id`=?", m1.Id).Delete(new(MultipleTransaction))
assert.NoError(t, err) assert.NoError(t, err)
err = session.Commit() err = session.Commit()

View File

@ -35,7 +35,7 @@ func TestUpdateMap(t *testing.T) {
_, err := testEngine.Insert(&tb) _, err := testEngine.Insert(&tb)
assert.NoError(t, err) assert.NoError(t, err)
cnt, err := testEngine.Table("update_table").Where("id = ?", tb.Id).Update(map[string]interface{}{ cnt, err := testEngine.Table("update_table").Where("`id` = ?", tb.Id).Update(map[string]interface{}{
"name": "test2", "name": "test2",
"age": 36, "age": 36,
}) })
@ -166,7 +166,7 @@ func TestForUpdate(t *testing.T) {
// use lock // use lock
fList := make([]ForUpdate, 0) fList := make([]ForUpdate, 0)
session1.ForUpdate() session1.ForUpdate()
session1.Where("id = ?", 1) session1.Where("`id` = ?", 1)
err = session1.Find(&fList) err = session1.Find(&fList)
switch { switch {
case err != nil: case err != nil:
@ -187,7 +187,7 @@ func TestForUpdate(t *testing.T) {
wg.Add(1) wg.Add(1)
go func() { go func() {
f2 := new(ForUpdate) f2 := new(ForUpdate)
session2.Where("id = ?", 1).ForUpdate() session2.Where("`id` = ?", 1).ForUpdate()
has, err := session2.Get(f2) // wait release lock has, err := session2.Get(f2) // wait release lock
switch { switch {
case err != nil: case err != nil:
@ -207,7 +207,7 @@ func TestForUpdate(t *testing.T) {
wg2.Add(1) wg2.Add(1)
go func() { go func() {
f3 := new(ForUpdate) f3 := new(ForUpdate)
session3.Where("id = ?", 1) session3.Where("`id` = ?", 1)
has, err := session3.Get(f3) // wait release lock has, err := session3.Get(f3) // wait release lock
switch { switch {
case err != nil: case err != nil:
@ -225,7 +225,7 @@ func TestForUpdate(t *testing.T) {
f := new(ForUpdate) f := new(ForUpdate)
f.Name = "updated by session1" f.Name = "updated by session1"
session1.Where("id = ?", 1) session1.Where("`id` = ?", 1)
session1.Update(f) session1.Update(f)
// release lock // release lock
@ -300,7 +300,7 @@ func TestUpdateMap2(t *testing.T) {
assert.NoError(t, PrepareEngine()) assert.NoError(t, PrepareEngine())
assertSync(t, new(UpdateMustCols)) assertSync(t, new(UpdateMustCols))
_, err := testEngine.Table("update_must_cols").Where("id =?", 1).Update(map[string]interface{}{ _, err := testEngine.Table("update_must_cols").Where("`id` =?", 1).Update(map[string]interface{}{
"bool": true, "bool": true,
}) })
assert.NoError(t, err) assert.NoError(t, err)
@ -825,7 +825,7 @@ func TestNewUpdate(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 0, af) assert.EqualValues(t, 0, af)
af, err = testEngine.Table(new(TbUserInfo)).Where("phone=?", "13126564922").Update(&changeUsr) af, err = testEngine.Table(new(TbUserInfo)).Where("`phone`=?", "13126564922").Update(&changeUsr)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 0, af) assert.EqualValues(t, 0, af)
} }
@ -1197,7 +1197,7 @@ func TestUpdateAlias(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
_, err = testEngine.Alias("ua").Where("ua.id = ?", 1).Update(&UpdateAlias{ _, err = testEngine.Alias("ua").Where("`ua`.`id` = ?", 1).Update(&UpdateAlias{
NumIssues: 2, NumIssues: 2,
Name: "lunny xiao", Name: "lunny xiao",
}) })
@ -1237,7 +1237,7 @@ func TestUpdateExprs2(t *testing.T) {
assert.EqualValues(t, 1, inserted) assert.EqualValues(t, 1, inserted)
updated, err := testEngine. updated, err := testEngine.
Where("repo_id = ? AND is_tag = ?", 1, false). Where("`repo_id` = ? AND `is_tag` = ?", 1, false).
SetExpr("is_draft", true). SetExpr("is_draft", true).
SetExpr("num_commits", 0). SetExpr("num_commits", 0).
SetExpr("sha1", ""). SetExpr("sha1", "").
@ -1308,7 +1308,7 @@ func TestUpdateIgnoreOnlyFromDBFields(t *testing.T) {
assertGetRecord := func() *TestOnlyFromDBField { assertGetRecord := func() *TestOnlyFromDBField {
var record TestOnlyFromDBField var record TestOnlyFromDBField
has, err := testEngine.Where("id = ?", 1).Get(&record) has, err := testEngine.Where("`id` = ?", 1).Get(&record)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, true, has) assert.EqualValues(t, true, has)
assert.EqualValues(t, "", record.OnlyFromDBField) assert.EqualValues(t, "", record.OnlyFromDBField)

View File

@ -730,7 +730,7 @@ func TestLowerCase(t *testing.T) {
err := testEngine.Sync2(&Lowercase{}) err := testEngine.Sync2(&Lowercase{})
assert.NoError(t, err) assert.NoError(t, err)
_, err = testEngine.Where("id > 0").Delete(&Lowercase{}) _, err = testEngine.Where("`id` > 0").Delete(&Lowercase{})
assert.NoError(t, err) assert.NoError(t, err)
_, err = testEngine.Insert(&Lowercase{ended: 1}) _, err = testEngine.Insert(&Lowercase{ended: 1})

View File

@ -324,7 +324,7 @@ func TestTimeUserDeleted(t *testing.T) {
fmt.Println("user2 str", user2.CreatedAtStr, user2.UpdatedAtStr) fmt.Println("user2 str", user2.CreatedAtStr, user2.UpdatedAtStr)
var user3 UserDeleted var user3 UserDeleted
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3) cnt, err = testEngine.Where("`id` = ?", "lunny").Delete(&user3)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
assert.True(t, !utils.IsTimeZero(user3.DeletedAt)) assert.True(t, !utils.IsTimeZero(user3.DeletedAt))
@ -386,7 +386,7 @@ func TestTimeUserDeletedDiffLoc(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt) fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted2 var user3 UserDeleted2
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3) cnt, err = testEngine.Where("`id` = ?", "lunny").Delete(&user3)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
assert.True(t, !utils.IsTimeZero(user3.DeletedAt)) assert.True(t, !utils.IsTimeZero(user3.DeletedAt))
@ -457,7 +457,7 @@ func TestCustomTimeUserDeleted(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt) fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted3 var user3 UserDeleted3
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3) cnt, err = testEngine.Where("`id` = ?", "lunny").Delete(&user3)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt))) assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt)))
@ -519,7 +519,7 @@ func TestCustomTimeUserDeletedDiffLoc(t *testing.T) {
fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt) fmt.Println("user2", user2.CreatedAt, user2.UpdatedAt, user2.DeletedAt)
var user3 UserDeleted4 var user3 UserDeleted4
cnt, err = testEngine.Where("id = ?", "lunny").Delete(&user3) cnt, err = testEngine.Where("`id` = ?", "lunny").Delete(&user3)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 1, cnt) assert.EqualValues(t, 1, cnt)
assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt))) assert.True(t, !utils.IsTimeZero(time.Time(user3.DeletedAt)))

View File

@ -173,7 +173,7 @@ func TestNullStructUpdate(t *testing.T) {
item.IsMan = sql.NullBool{Bool: true, Valid: true} item.IsMan = sql.NullBool{Bool: true, Valid: true}
item.Age = sql.NullInt64{Int64: 34, Valid: true} item.Age = sql.NullInt64{Int64: 34, Valid: true}
_, err := testEngine.Where("age > ?", 34).Update(item) _, err := testEngine.Where("`age` > ?", 34).Update(item)
assert.NoError(t, err) assert.NoError(t, err)
} }
@ -260,7 +260,7 @@ func TestNullStructIterate(t *testing.T) {
assertSync(t, new(NullType)) assertSync(t, new(NullType))
if true { if true {
err := testEngine.Where("age IS NOT NULL").OrderBy("age").Iterate(new(NullType), err := testEngine.Where("`age` IS NOT NULL").OrderBy("age").Iterate(new(NullType),
func(i int, bean interface{}) error { func(i int, bean interface{}) error {
nultype := bean.(*NullType) nultype := bean.(*NullType)
fmt.Println(i, nultype) fmt.Println(i, nultype)
@ -276,7 +276,7 @@ func TestNullStructCount(t *testing.T) {
if true { if true {
item := new(NullType) item := new(NullType)
_, err := testEngine.Where("age IS NOT NULL").Count(item) _, err := testEngine.Where("`age` IS NOT NULL").Count(item)
assert.NoError(t, err) assert.NoError(t, err)
} }
} }
@ -286,7 +286,7 @@ func TestNullStructRows(t *testing.T) {
assertSync(t, new(NullType)) assertSync(t, new(NullType))
item := new(NullType) item := new(NullType)
rows, err := testEngine.Where("id > ?", 1).Rows(item) rows, err := testEngine.Where("`id` > ?", 1).Rows(item)
assert.NoError(t, err) assert.NoError(t, err)
defer rows.Close() defer rows.Close()
@ -305,6 +305,6 @@ func TestNullStructDelete(t *testing.T) {
_, err := testEngine.ID(1).Delete(item) _, err := testEngine.ID(1).Delete(item)
assert.NoError(t, err) assert.NoError(t, err)
_, err = testEngine.Where("id > ?", 1).Delete(item) _, err = testEngine.Where("`id` > ?", 1).Delete(item)
assert.NoError(t, err) assert.NoError(t, err)
} }

View File

@ -11,8 +11,8 @@ func SliceEq(left, right []string) bool {
if len(left) != len(right) { if len(left) != len(right) {
return false return false
} }
sort.Sort(sort.StringSlice(left)) sort.Strings(left)
sort.Sort(sort.StringSlice(right)) sort.Strings(right)
for i := 0; i < len(left); i++ { for i := 0; i < len(left); i++ {
if left[i] != right[i] { if left[i] != right[i] {
return false return false
@ -20,3 +20,12 @@ func SliceEq(left, right []string) bool {
} }
return true return true
} }
func IndexSlice(s []string, c string) int {
for i, ss := range s {
if c == ss {
return i
}
}
return -1
}

View File

@ -316,6 +316,7 @@ func (session *Session) insertStruct(bean interface{}) (int64, error) {
var sql string var sql string
var newArgs []interface{} var newArgs []interface{}
var needCommit bool var needCommit bool
var id int64
if session.engine.dialect.URI().DBType == schemas.ORACLE || session.engine.dialect.URI().DBType == schemas.DAMENG { if session.engine.dialect.URI().DBType == schemas.ORACLE || session.engine.dialect.URI().DBType == schemas.DAMENG {
if session.isAutoCommit { // if it's not in transaction if session.isAutoCommit { // if it's not in transaction
if err := session.Begin(); err != nil { if err := session.Begin(); err != nil {
@ -327,24 +328,33 @@ func (session *Session) insertStruct(bean interface{}) (int64, error) {
if err != nil { if err != nil {
return 0, err return 0, err
} }
sql = fmt.Sprintf("select %s.currval from dual", utils.SeqName(tableName)) i := utils.IndexSlice(colNames, table.AutoIncrement)
if i > -1 {
id, err = convert.AsInt64(args[i])
if err != nil {
return 0, err
}
} else {
sql = fmt.Sprintf("select %s.currval from dual", utils.SeqName(tableName))
}
} else { } else {
sql = sqlStr sql = sqlStr
newArgs = args newArgs = args
} }
var id int64 if id == 0 {
err := session.queryRow(sql, newArgs...).Scan(&id) err := session.queryRow(sql, newArgs...).Scan(&id)
if err != nil { if err != nil {
return 0, err
}
if needCommit {
if err := session.Commit(); err != nil {
return 0, err return 0, err
} }
} if needCommit {
if id == 0 { if err := session.Commit(); err != nil {
return 0, errors.New("insert successfully but not returned id") return 0, err
}
}
if id == 0 {
return 0, errors.New("insert successfully but not returned id")
}
} }
defer handleAfterInsertProcessorFunc(bean) defer handleAfterInsertProcessorFunc(bean)