diff --git a/pkg/orm/db.go b/pkg/orm/db.go index dc4b5a3f..dea8845f 100644 --- a/pkg/orm/db.go +++ b/pkg/orm/db.go @@ -486,7 +486,7 @@ func (d *dbBase) InsertValue(q dbQuerier, mi *modelInfo, isMulti bool, names []s return res.RowsAffected() } - lastInsertId, err:=res.LastInsertId() + lastInsertId, err := res.LastInsertId() if err != nil { DebugLog.Println("[WARN] return LastInsertId error:", err) } @@ -591,7 +591,12 @@ func (d *dbBase) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Value, a if isMulti { return res.RowsAffected() } - return res.LastInsertId() + + lastInsertId, err := res.LastInsertId() + if err != nil { + DebugLog.Println("[WARN] return LastInsertId error:", err) + } + return lastInsertId, nil } return 0, err } diff --git a/pkg/orm/db_mysql.go b/pkg/orm/db_mysql.go index 6e99058e..0db26e5b 100644 --- a/pkg/orm/db_mysql.go +++ b/pkg/orm/db_mysql.go @@ -164,7 +164,12 @@ func (d *dbBaseMysql) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Val if isMulti { return res.RowsAffected() } - return res.LastInsertId() + + lastInsertId, err := res.LastInsertId() + if err != nil { + DebugLog.Println("[WARN] return LastInsertId error:", err) + } + return lastInsertId, nil } return 0, err } diff --git a/pkg/orm/orm_test.go b/pkg/orm/orm_test.go index fd752a94..d4a47686 100644 --- a/pkg/orm/orm_test.go +++ b/pkg/orm/orm_test.go @@ -2528,19 +2528,33 @@ func TestInsertOrUpdate(t *testing.T) { func TestStrPkInsert(t *testing.T) { RegisterModel(new(StrPk)) + pk := `1` value := `StrPkValues(*56` strPk := &StrPk{ - Id: "1", + Id: pk, Value: value, } var err error _, err = dORM.Insert(strPk) throwFailNow(t, AssertIs(err, nil)) - + 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(vForTesting.Value, value)) + + value2 := `s8s5da7as` + strPkForUpsert := &StrPk{ + Id: pk, + Value: value2, + } + _, err = dORM.InsertOrUpdate(strPkForUpsert, `id`) + throwFailNow(t, AssertIs(err, nil)) + + var vForTesting2 StrPk + err = dORM.QueryTable(new(StrPk)).Filter(`id`, pk).One(&vForTesting2) + throwFailNow(t, AssertIs(err, nil)) + throwFailNow(t, AssertIs(vForTesting2.Value, value2)) }