From 233706969ad9040ff7c773d740dc33c6d60b6967 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 12 Jun 2017 16:33:11 +0800 Subject: [PATCH] add SumInt method --- engine.go | 7 +++++++ session_sum.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/engine.go b/engine.go index b2b2f97b..26d84d25 100644 --- a/engine.go +++ b/engine.go @@ -1443,6 +1443,13 @@ func (engine *Engine) Sum(bean interface{}, colName string) (float64, error) { return session.Sum(bean, colName) } +// SumInt sum the records by some column. bean's non-empty fields are conditions. +func (engine *Engine) SumInt(bean interface{}, colName string) (int64, error) { + session := engine.NewSession() + defer session.Close() + return session.SumInt(bean, colName) +} + // Sums sum the records by some columns. bean's non-empty fields are conditions. func (engine *Engine) Sums(bean interface{}, colNames ...string) ([]float64, error) { session := engine.NewSession() diff --git a/session_sum.go b/session_sum.go index b0663708..2d5ba6bd 100644 --- a/session_sum.go +++ b/session_sum.go @@ -81,6 +81,41 @@ func (session *Session) Sum(bean interface{}, columnName string) (float64, error return 0, err } +// SumInt call sum some column. bean's non-empty fields are conditions. +func (session *Session) SumInt(bean interface{}, columnName string) (int64, error) { + defer session.resetStatement() + if session.IsAutoClose { + defer session.Close() + } + + var sqlStr string + var args []interface{} + var err error + if len(session.Statement.RawSQL) == 0 { + sqlStr, args, err = session.Statement.genSumSQL(bean, columnName) + if err != nil { + return 0, err + } + } else { + sqlStr = session.Statement.RawSQL + args = session.Statement.RawParams + } + + session.queryPreprocess(&sqlStr, args...) + + var res int64 + if session.IsAutoCommit { + err = session.DB().QueryRow(sqlStr, args...).Scan(&res) + } else { + err = session.Tx.QueryRow(sqlStr, args...).Scan(&res) + } + + if err == sql.ErrNoRows || err == nil { + return res, nil + } + return 0, err +} + // Sums call sum some columns. bean's non-empty fields are conditions. func (session *Session) Sums(bean interface{}, columnNames ...string) ([]float64, error) { defer session.resetStatement()