From 97f4b0e45c60a37336fcb19ee54cb7ca882e0014 Mon Sep 17 00:00:00 2001 From: unphp Date: Tue, 15 Apr 2014 09:54:49 +0800 Subject: [PATCH 1/4] Method In provides a update string --- engine.go | 5 +++++ session.go | 12 ++++++++++++ statement.go | 12 ++++++++++++ 3 files changed, 29 insertions(+) diff --git a/engine.go b/engine.go index 33595aa9..e0a10ed1 100644 --- a/engine.go +++ b/engine.go @@ -342,6 +342,11 @@ func (engine *Engine) In(column string, args ...interface{}) *Session { session := engine.NewSession() session.IsAutoClose = true return session.In(column, args...) +// Method In provides a update string like "column = column + ?" +func (engine *Engine) Inc(column string, arg interface{}) *Session { + session := engine.NewSession() + session.IsAutoClose = true + return session.Inc(column, arg) } // Temporarily change the Get, Find, Update's table diff --git a/session.go b/session.go index c94e89aa..741f9342 100644 --- a/session.go +++ b/session.go @@ -128,6 +128,12 @@ func (session *Session) In(column string, args ...interface{}) *Session { return session } +// Method In provides a query string like "count = count + 1" +func (session *Session) Inc(column string, arg interface{}) *Session { + session.Statement.Inc(column, arg) + return session +} + // Method Cols provides some columns to special func (session *Session) Cols(columns ...string) *Session { session.Statement.Cols(columns...) @@ -2952,6 +2958,12 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 args = append(args, time.Now()) } + //for update action to like "column = column + ?" + incColumns := session.Statement.getInc() + for k, v := range incColumns { + colNames = append(colNames, k+" = "+k+" + ?") + args = append(args, v) + } var condiColNames []string var condiArgs []interface{} diff --git a/statement.go b/statement.go index fa82ff83..0b0c2f83 100644 --- a/statement.go +++ b/statement.go @@ -48,6 +48,7 @@ type Statement struct { checkVersion bool mustColumnMap map[string]bool inColumns map[string]*inParam + incColumns map[string]interface{} } // init @@ -470,6 +471,17 @@ func (statement *Statement) Id(id interface{}) *Statement { return statement } +// Generate "Update ... Set column = column + arg" statment +func (statement *Statement) Inc(column string, arg interface{}) *Statement { + k := strings.ToLower(column) + statement.incColumns[k] = arg + return statement +} + +// Generate "Update ... Set column = column + arg" statment +func (statement *Statement) getInc() map[string]interface{} { + return statement.incColumns +} // Generate "Where column IN (?) " statment func (statement *Statement) In(column string, args ...interface{}) *Statement { k := strings.ToLower(column) From decbeefc27810dcf4d9d771ad88d20ceb37c65ac Mon Sep 17 00:00:00 2001 From: unphp Date: Tue, 15 Apr 2014 09:58:31 +0800 Subject: [PATCH 2/4] Method In provides a update string --- engine.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engine.go b/engine.go index e0a10ed1..7e562eb5 100644 --- a/engine.go +++ b/engine.go @@ -342,6 +342,8 @@ func (engine *Engine) In(column string, args ...interface{}) *Session { session := engine.NewSession() session.IsAutoClose = true return session.In(column, args...) +} + // Method In provides a update string like "column = column + ?" func (engine *Engine) Inc(column string, arg interface{}) *Session { session := engine.NewSession() From 64e5181112d4d583be92d7ebd327884c82d35d7e Mon Sep 17 00:00:00 2001 From: unphp Date: Tue, 15 Apr 2014 10:24:59 +0800 Subject: [PATCH 3/4] Method In provides a update string --- statement.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/statement.go b/statement.go index 0b0c2f83..5b45d1d6 100644 --- a/statement.go +++ b/statement.go @@ -79,6 +79,7 @@ func (statement *Statement) Init() { statement.mustColumnMap = make(map[string]bool) statement.checkVersion = true statement.inColumns = make(map[string]*inParam) + statement.incColumns = make(map[string]interface{}, 0) } // add the raw sql statement @@ -482,6 +483,7 @@ func (statement *Statement) Inc(column string, arg interface{}) *Statement { func (statement *Statement) getInc() map[string]interface{} { return statement.incColumns } + // Generate "Where column IN (?) " statment func (statement *Statement) In(column string, args ...interface{}) *Statement { k := strings.ToLower(column) From e2aa0ef2c2ecd90e43f46812dbf18e38587a85fb Mon Sep 17 00:00:00 2001 From: unphp Date: Tue, 15 Apr 2014 10:28:58 +0800 Subject: [PATCH 4/4] Method In provides a update string --- engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine.go b/engine.go index 7e562eb5..63a353c5 100644 --- a/engine.go +++ b/engine.go @@ -344,7 +344,7 @@ func (engine *Engine) In(column string, args ...interface{}) *Session { return session.In(column, args...) } -// Method In provides a update string like "column = column + ?" +// Method Inc provides a update string like "column = column + ?" func (engine *Engine) Inc(column string, arg interface{}) *Session { session := engine.NewSession() session.IsAutoClose = true