mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 04:10:54 +00:00
Merge pull request #4158 from jianzhiyao/frt/fix_spk_upsert
fix:return error when calling ``InsertOrUpdate`` is successful with string primary key
This commit is contained in:
commit
94f476fa39
@ -488,10 +488,12 @@ func (d *dbBase) InsertValue(q dbQuerier, mi *modelInfo, isMulti bool, names []s
|
|||||||
|
|
||||||
lastInsertId, err := res.LastInsertId()
|
lastInsertId, err := res.LastInsertId()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
DebugLog.Println("[WARN] return LastInsertId error:", err)
|
DebugLog.Println(ErrLastInsertIdUnavailable, ':', err)
|
||||||
}
|
return lastInsertId, ErrLastInsertIdUnavailable
|
||||||
|
}else{
|
||||||
return lastInsertId, nil
|
return lastInsertId, nil
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
row := q.QueryRow(query, values...)
|
row := q.QueryRow(query, values...)
|
||||||
@ -591,7 +593,14 @@ func (d *dbBase) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Value, a
|
|||||||
if isMulti {
|
if isMulti {
|
||||||
return res.RowsAffected()
|
return res.RowsAffected()
|
||||||
}
|
}
|
||||||
return res.LastInsertId()
|
|
||||||
|
lastInsertId, err := res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
DebugLog.Println(ErrLastInsertIdUnavailable, ':', err)
|
||||||
|
return lastInsertId, ErrLastInsertIdUnavailable
|
||||||
|
}else{
|
||||||
|
return lastInsertId, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,14 @@ func (d *dbBaseMysql) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Val
|
|||||||
if isMulti {
|
if isMulti {
|
||||||
return res.RowsAffected()
|
return res.RowsAffected()
|
||||||
}
|
}
|
||||||
return res.LastInsertId()
|
|
||||||
|
lastInsertId, err := res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
DebugLog.Println(ErrLastInsertIdUnavailable, ':', err)
|
||||||
|
return lastInsertId, ErrLastInsertIdUnavailable
|
||||||
|
}else{
|
||||||
|
return lastInsertId, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
@ -153,10 +153,12 @@ func (d *dbBaseOracle) InsertValue(q dbQuerier, mi *modelInfo, isMulti bool, nam
|
|||||||
|
|
||||||
lastInsertId, err := res.LastInsertId()
|
lastInsertId, err := res.LastInsertId()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
DebugLog.Println("[WARN] return LastInsertId error:", err)
|
DebugLog.Println(ErrLastInsertIdUnavailable, ':', err)
|
||||||
}
|
return lastInsertId, ErrLastInsertIdUnavailable
|
||||||
|
}else{
|
||||||
return lastInsertId, nil
|
return lastInsertId, nil
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
row := q.QueryRow(query, values...)
|
row := q.QueryRow(query, values...)
|
||||||
|
@ -85,6 +85,8 @@ var (
|
|||||||
ErrStmtClosed = errors.New("<QuerySeter> stmt already closed")
|
ErrStmtClosed = errors.New("<QuerySeter> stmt already closed")
|
||||||
ErrArgs = errors.New("<Ormer> args error may be empty")
|
ErrArgs = errors.New("<Ormer> args error may be empty")
|
||||||
ErrNotImplement = errors.New("have not implement")
|
ErrNotImplement = errors.New("have not implement")
|
||||||
|
|
||||||
|
ErrLastInsertIdUnavailable = errors.New("<Ormer> last insert id is unavailable")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Params stores the Params
|
// Params stores the Params
|
||||||
|
@ -2542,18 +2542,42 @@ func TestInsertOrUpdate(t *testing.T) {
|
|||||||
|
|
||||||
func TestStrPkInsert(t *testing.T) {
|
func TestStrPkInsert(t *testing.T) {
|
||||||
RegisterModel(new(StrPk))
|
RegisterModel(new(StrPk))
|
||||||
|
pk := `1`
|
||||||
value := `StrPkValues(*56`
|
value := `StrPkValues(*56`
|
||||||
strPk := &StrPk{
|
strPk := &StrPk{
|
||||||
Id: "1",
|
Id: pk,
|
||||||
Value: value,
|
Value: value,
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
_, err = dORM.Insert(strPk)
|
_, err = dORM.Insert(strPk)
|
||||||
|
if err != ErrLastInsertIdUnavailable {
|
||||||
throwFailNow(t, AssertIs(err, nil))
|
throwFailNow(t, AssertIs(err, nil))
|
||||||
|
}
|
||||||
|
|
||||||
var vForTesting StrPk
|
var vForTesting StrPk
|
||||||
err = dORM.QueryTable(new(StrPk)).Filter(`id`, `1`).One(&vForTesting)
|
err = dORM.QueryTable(new(StrPk)).Filter(`id`, pk).One(&vForTesting)
|
||||||
throwFailNow(t, AssertIs(err, nil))
|
throwFailNow(t, AssertIs(err, nil))
|
||||||
throwFailNow(t, AssertIs(vForTesting.Value, value))
|
throwFailNow(t, AssertIs(vForTesting.Value, value))
|
||||||
|
|
||||||
|
value2 := `s8s5da7as`
|
||||||
|
strPkForUpsert := &StrPk{
|
||||||
|
Id: pk,
|
||||||
|
Value: value2,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = dORM.InsertOrUpdate(strPkForUpsert, `id`)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
if err.Error() == "postgres version must 9.5 or higher" || err.Error() == "`sqlite3` nonsupport InsertOrUpdate in beego" {
|
||||||
|
} else if err == ErrLastInsertIdUnavailable {
|
||||||
|
} else {
|
||||||
|
throwFailNow(t, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var vForTesting2 StrPk
|
||||||
|
err = dORM.QueryTable(new(StrPk)).Filter(`id`, pk).One(&vForTesting2)
|
||||||
|
throwFailNow(t, AssertIs(err, nil))
|
||||||
|
throwFailNow(t, AssertIs(vForTesting2.Value, value2))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user