diff --git a/base_test.go b/base_test.go index ff5e96f1..3436a584 100644 --- a/base_test.go +++ b/base_test.go @@ -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{} diff --git a/session.go b/session.go index f5d3d2b2..63350459 100644 --- a/session.go +++ b/session.go @@ -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: