- IsDuplicateError
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/globals"
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -121,10 +120,10 @@ func UpdateEntity(db *DaoDB, item interface{}, cols ...string) (num int64, err e
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
err = utils.CallFuncLogError(func() error {
|
||||
num, err = db.db.Update(item, cols...)
|
||||
return err
|
||||
}, reflect.TypeOf(item).Name())
|
||||
num, err = db.db.Update(item, cols...)
|
||||
if err != nil && !IsDuplicateError(err) {
|
||||
globals.SugarLogger.Errorf("UpdateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err)
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
@@ -132,13 +131,8 @@ func CreateEntity(db *DaoDB, item interface{}) (err error) {
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
if _, err = db.db.Insert(item); err != nil {
|
||||
if mysqlErr, ok := err.(*mysql.MySQLError); ok {
|
||||
if mysqlErr.Number == 1062 {
|
||||
return err
|
||||
}
|
||||
}
|
||||
globals.SugarLogger.Warnf("CreateEntity failed with error:%v", err)
|
||||
if _, err = db.db.Insert(item); err != nil && !IsDuplicateError(err) {
|
||||
globals.SugarLogger.Errorf("CreateEntity %s failed with error:%v", reflect.TypeOf(item).Name(), err)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -42,20 +42,18 @@ func UpdateEntityByKV(db *DaoDB, item interface{}, kvs map[string]interface{}, c
|
||||
if db == nil {
|
||||
db = GetDB()
|
||||
}
|
||||
err = utils.CallFuncLogError(func() error {
|
||||
qs := db.db.QueryTable(item)
|
||||
if conditions == nil {
|
||||
qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID))
|
||||
} else {
|
||||
for k, v := range conditions {
|
||||
qs = qs.Filter(k, v)
|
||||
}
|
||||
qs := db.db.QueryTable(item)
|
||||
if conditions == nil {
|
||||
qs = qs.Filter(model.FieldID, jxutils.GetObjFieldByName(item, model.FieldID))
|
||||
} else {
|
||||
for k, v := range conditions {
|
||||
qs = qs.Filter(k, v)
|
||||
}
|
||||
// globals.SugarLogger.Debugf("UpdateEntityByKV befor item:%s, kvs:%s, conditions:%s", utils.Format4Output(item, false), utils.Format4Output(kvs, false), utils.Format4Output(conditions, false))
|
||||
num, err = qs.Update(kvs)
|
||||
// globals.SugarLogger.Debugf("UpdateEntityByKV after update, num:%d", num)
|
||||
return err
|
||||
}, reflect.TypeOf(item).Name())
|
||||
}
|
||||
num, err = qs.Update(kvs)
|
||||
if err != nil && !IsDuplicateError(err) {
|
||||
globals.SugarLogger.Errorf("UpdateEntityByKV %s failed with error:%v", reflect.TypeOf(item).Name(), err)
|
||||
}
|
||||
return num, err
|
||||
}
|
||||
|
||||
|
||||
19
business/model/dao/dao_err.go
Normal file
19
business/model/dao/dao_err.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package dao
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego/orm"
|
||||
"github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
func IsDuplicateError(err error) bool {
|
||||
if mysqlErr, ok := err.(*mysql.MySQLError); ok {
|
||||
if mysqlErr.Number == 1062 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func IsNoRowsError(err error) bool {
|
||||
return err == orm.ErrNoRows
|
||||
}
|
||||
Reference in New Issue
Block a user