Browse Source

add SumInt method

xormplus 8 years ago
parent
commit
465b4eff46
2 changed files with 42 additions and 0 deletions
  1. 7 0
      engine.go
  2. 35 0
      session_sum.go

+ 7 - 0
engine.go

@@ -1469,6 +1469,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()

+ 35 - 0
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()