insert return bug fixed

This commit is contained in:
Lunny Xiao 2013-11-07 13:22:34 +08:00
parent be50e0c659
commit a1062be8d0
2 changed files with 97 additions and 16 deletions

View File

@ -43,7 +43,13 @@ type Userdetail struct {
}
func directCreateTable(engine *Engine, t *testing.T) {
err := engine.Sync(&Userinfo{})
err := engine.DropTables(&Userinfo{}, &Userdetail{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.Sync(&Userinfo{}, &Userdetail{})
if err != nil {
t.Error(err)
panic(err)
@ -55,7 +61,31 @@ func directCreateTable(engine *Engine, t *testing.T) {
panic(err)
}
err = engine.CreateTables(&Userinfo{})
err = engine.CreateTables(&Userinfo{}, &Userdetail{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateIndexes(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateIndexes(&Userdetail{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateUniques(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateUniques(&Userdetail{})
if err != nil {
t.Error(err)
panic(err)
@ -86,6 +116,30 @@ func mapper(engine *Engine, t *testing.T) {
t.Error(err)
panic(err)
}
err = engine.CreateIndexes(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateIndexes(&Userdetail{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateUniques(&Userinfo{})
if err != nil {
t.Error(err)
panic(err)
}
err = engine.CreateUniques(&Userdetail{})
if err != nil {
t.Error(err)
panic(err)
}
}
func insert(engine *Engine, t *testing.T) {
@ -98,7 +152,17 @@ func insert(engine *Engine, t *testing.T) {
panic(err)
}
if user.Uid <= 0 {
t.Error(errors.New("not return id error"))
err = errors.New("not return id error")
t.Error(err)
panic(err)
}
user.Uid = 0
_, err = engine.Insert(&user)
if err == nil {
err = errors.New("insert failed but no return error")
t.Error(err)
panic(err)
}
}
@ -171,7 +235,9 @@ func insertMulti(engine *Engine, t *testing.T) {
panic(err)
}
if id <= 0 {
t.Error(errors.New("not return id error"))
err = errors.New("not return id error")
t.Error(err)
panic(err)
}
users2 := []*Userinfo{
@ -188,7 +254,9 @@ func insertMulti(engine *Engine, t *testing.T) {
}
if id <= 0 {
t.Error(errors.New("not return id error"))
err = errors.New("not return id error")
t.Error(err)
panic(err)
}
}
@ -201,6 +269,18 @@ func insertTwoTable(engine *Engine, t *testing.T) {
t.Error(err)
panic(err)
}
if userinfo.Uid <= 0 {
err = errors.New("not return id error")
t.Error(err)
panic(err)
}
if userdetail.Id <= 0 {
err = errors.New("not return id error")
t.Error(err)
panic(err)
}
}
type Condi map[string]interface{}

View File

@ -1627,16 +1627,17 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
}
var id int64 = 0
pkValue := table.PKColumn().ValueOf(bean)
if !pkValue.IsValid() || pkValue.Int() != 0 || !pkValue.CanSet() {
return 0, nil
}
id, err = res.LastInsertId()
if err != nil || id <= 0 {
return 0, err
}
pkValue := table.PKColumn().ValueOf(bean)
if !pkValue.IsValid() || pkValue.Int() != 0 || !pkValue.CanSet() {
return id, nil
}
var v interface{} = id
switch pkValue.Type().Kind() {
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int:
@ -1654,17 +1655,12 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
return 0, err
}
if len(res) < 1 {
return 0, err
}
if table.Cacher != nil && session.Statement.UseCache {
session.cacheInsert(session.Statement.TableName())
}
pkValue := table.PKColumn().ValueOf(bean)
if !pkValue.IsValid() || pkValue.Int() != 0 || !pkValue.CanSet() {
return 0, nil
if len(res) < 1 {
return 0, errors.New("insert no error but not returned id")
}
idByte := res[0][table.PrimaryKey]
@ -1673,6 +1669,11 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
return 0, err
}
pkValue := table.PKColumn().ValueOf(bean)
if !pkValue.IsValid() || pkValue.Int() != 0 || !pkValue.CanSet() {
return id, nil
}
var v interface{} = id
switch pkValue.Type().Kind() {
case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int: