From e0e888ab8f2050cbe4aedbdd91b391e644ce3d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cfudali113=E2=80=9D?= <“fudali113@gmail.com”> Date: Fri, 22 Jul 2016 12:10:37 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E2=80=9Cmodification=20hardcode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orm/db.go | 16 ++++++++-------- orm/orm.go | 2 +- orm/types.go | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/orm/db.go b/orm/db.go index 40e71d12..29c1c825 100644 --- a/orm/db.go +++ b/orm/db.go @@ -491,23 +491,23 @@ func (d *dbBase) InsertValue(q dbQuerier, mi *modelInfo, isMulti bool, names []s // InsertOrUpdate a row // If your primary key or unique column conflict will update // If no will insert -func (d *dbBase) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location, dn string, args ...string) (int64, error) { +func (d *dbBase) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Value, tz *time.Location, driver DriverType, args ...string) (int64, error) { iouStr := "" - mysql := "mysql" - postgres := "postgres" + mysql := DRMySQL + postgres := DRPostgres argsMap := map[string]string{} args0 := "" - if dn == mysql { + if driver == mysql { iouStr = "ON DUPLICATE KEY UPDATE" - } else if dn == postgres { + } else if driver == postgres { if len(args) == 0 || (len(strings.Split(args0, "=")) != 1) { - return 0, fmt.Errorf("`%s` use insert or update must have a conflict column arg in first", dn) + return 0, fmt.Errorf("`%s` use insert or update must have a conflict column arg in first", driver) } else { args0 = strings.ToLower(args[0]) iouStr = fmt.Sprintf("ON CONFLICT (%s) DO UPDATE SET", args0) } } else { - return 0, fmt.Errorf("`%s` nonsupport insert or update in beego", dn) + return 0, fmt.Errorf("`%s` nonsupport insert or update in beego", driver) } //Get on the key-value pairs for _, v := range args { @@ -539,7 +539,7 @@ func (d *dbBase) InsertOrUpdate(q dbQuerier, mi *modelInfo, ind reflect.Value, t conflitValue = values[i] } if valueStr != "" { - switch dn { + switch driver { case mysql: updates[i] = v + "=" + valueStr break diff --git a/orm/orm.go b/orm/orm.go index c84dddea..d7ebb371 100644 --- a/orm/orm.go +++ b/orm/orm.go @@ -212,7 +212,7 @@ func (o *orm) InsertMulti(bulk int, mds interface{}) (int64, error) { // InsertOrUpdate data to database func (o *orm) InsertOrUpdate(md interface{}, colConflitAndArgs ...string) (int64, error) { mi, ind := o.getMiInd(md, true) - id, err := o.alias.DbBaser.InsertOrUpdate(o.db, mi, ind, o.alias.TZ, o.alias.DriverName, colConflitAndArgs...) + id, err := o.alias.DbBaser.InsertOrUpdate(o.db, mi, ind, o.alias.TZ, o.alias.Driver, colConflitAndArgs...) if err != nil { return id, err } diff --git a/orm/types.go b/orm/types.go index b375fd65..32d8c233 100644 --- a/orm/types.go +++ b/orm/types.go @@ -396,7 +396,7 @@ type txEnder interface { type dbBaser interface { Read(dbQuerier, *modelInfo, reflect.Value, *time.Location, []string) error Insert(dbQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error) - InsertOrUpdate(dbQuerier, *modelInfo, reflect.Value, *time.Location, string, ...string) (int64, error) + InsertOrUpdate(dbQuerier, *modelInfo, reflect.Value, *time.Location, DriverType, ...string) (int64, error) InsertMulti(dbQuerier, *modelInfo, reflect.Value, int, *time.Location) (int64, error) InsertValue(dbQuerier, *modelInfo, bool, []string, []interface{}) (int64, error) InsertStmt(stmtQuerier, *modelInfo, reflect.Value, *time.Location) (int64, error)