1.修复Oracle使用Replace出错的BUG

2.降低框架在原版Oracle操作中可能出现删数据的风险
3.降低原版Execute执行器可能出现误删数据的风险
This commit is contained in:
tuuz
2023-10-30 11:38:36 +08:00
parent 12a0053f99
commit 365701c933
3 changed files with 16 additions and 2 deletions

View File

@@ -130,8 +130,10 @@ func (b *BuilderDefault) BuildExecute(operType string) (sqlStr string, args []in
switch operType { switch operType {
case "insert": case "insert":
sqlStr = fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval) sqlStr = fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval)
break
case "replace": case "replace":
sqlStr = fmt.Sprintf("REPLACE INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval) sqlStr = fmt.Sprintf("REPLACE INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval)
break
case "update": case "update":
where, err = b.BuildWhere() where, err = b.BuildWhere()
if err != nil { if err != nil {
@@ -144,8 +146,8 @@ func (b *BuilderDefault) BuildExecute(operType string) (sqlStr string, args []in
return return
} }
sqlStr = fmt.Sprintf("UPDATE %s SET %s%s", b.BuildTable(), update, where) sqlStr = fmt.Sprintf("UPDATE %s SET %s%s", b.BuildTable(), update, where)
break
case "delete": case "delete":
where, err = b.BuildWhere() where, err = b.BuildWhere()
if err != nil { if err != nil {
b.IOrm.GetISession().GetIEngin().GetLogger().Error(err.Error()) b.IOrm.GetISession().GetIEngin().GetLogger().Error(err.Error())
@@ -157,6 +159,7 @@ func (b *BuilderDefault) BuildExecute(operType string) (sqlStr string, args []in
return return
} }
sqlStr = fmt.Sprintf("DELETE FROM %s%s", b.BuildTable(), where) sqlStr = fmt.Sprintf("DELETE FROM %s%s", b.BuildTable(), where)
break
} }
args = b.GetBindValues() args = b.GetBindValues()

View File

@@ -156,6 +156,7 @@ func (b *BuilderOracle) BuildExecuteOra(operType string) (sqlStr string, args []
switch operType { switch operType {
case "insert": case "insert":
sqlStr = fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval) sqlStr = fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval)
break
case "update": case "update":
if where == "" && b.IOrm.GetForce() == false { if where == "" && b.IOrm.GetForce() == false {
err = errors.New("出于安全考虑, update时where条件不能为空, 如果真的不需要where条件, 请使用Force()(如: db.xxx.Force().Update())") err = errors.New("出于安全考虑, update时where条件不能为空, 如果真的不需要where条件, 请使用Force()(如: db.xxx.Force().Update())")
@@ -163,6 +164,7 @@ func (b *BuilderOracle) BuildExecuteOra(operType string) (sqlStr string, args []
return return
} }
sqlStr = fmt.Sprintf("UPDATE %s SET %s%s", b.BuildTable(), update, where) sqlStr = fmt.Sprintf("UPDATE %s SET %s%s", b.BuildTable(), update, where)
break
case "delete": case "delete":
if where == "" && b.IOrm.GetForce() == false { if where == "" && b.IOrm.GetForce() == false {
err = errors.New("出于安全考虑, delete时where条件不能为空, 如果真的不需要where条件, 请使用Force()(如: db.xxx.Force().Delete())") err = errors.New("出于安全考虑, delete时where条件不能为空, 如果真的不需要where条件, 请使用Force()(如: db.xxx.Force().Delete())")
@@ -170,6 +172,15 @@ func (b *BuilderOracle) BuildExecuteOra(operType string) (sqlStr string, args []
return return
} }
sqlStr = fmt.Sprintf("DELETE FROM %s%s", b.BuildTable(), where) sqlStr = fmt.Sprintf("DELETE FROM %s%s", b.BuildTable(), where)
break
case "replace":
if where == "" && b.IOrm.GetForce() == false {
err = errors.New("出于安全考虑, update时where条件不能为空, 如果真的不需要where条件, 请使用Force()(如: db.xxx.Force().Update())")
b.IOrm.GetISession().GetIEngin().GetLogger().Error(err.Error())
return
}
sqlStr = fmt.Sprintf("REPLACE INTO %s (%s) VALUES %s", b.BuildTable(), insertkey, insertval)
break
} }
args = b.IOrm.GetBindValues() args = b.IOrm.GetBindValues()

View File

@@ -41,7 +41,7 @@ func (dba *Orm) Delete() (int64, error) {
return dba.exec("delete") return dba.exec("delete")
} }
// Delete : delete data // exec : Execute a sql
func (dba *Orm) exec(operType string, data ...interface{}) (int64, error) { func (dba *Orm) exec(operType string, data ...interface{}) (int64, error) {
if operType == "insert" || operType == "update" { if operType == "insert" || operType == "update" {
if dba.GetData() == nil { if dba.GetData() == nil {