diff --git a/engine.go b/engine.go index 34f232c..1cbba2b 100644 --- a/engine.go +++ b/engine.go @@ -17,6 +17,7 @@ import ( "strings" "time" + "github.com/fairyhunter13/decimal" "github.com/fairyhunter13/xorm/caches" "github.com/fairyhunter13/xorm/contexts" "github.com/fairyhunter13/xorm/core" @@ -1212,6 +1213,13 @@ func (engine *Engine) SumInt(bean interface{}, colName string) (int64, error) { return session.SumInt(bean, colName) } +// SumDecimal sums the records by some column. bean's non-empty fields are conditions. +func (engine *Engine) SumDecimal(bean interface{}, colName string) (decimal.Decimal, error) { + session := engine.NewSession() + defer session.Close() + return session.SumDecimal(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() @@ -1226,6 +1234,13 @@ func (engine *Engine) SumsInt(bean interface{}, colNames ...string) ([]int64, er return session.SumsInt(bean, colNames...) } +// SumsDecimal sums the records by some columns. bean's non-empty fields are conditions. +func (engine *Engine) SumsDecimal(bean interface{}, colNames ...string) ([]decimal.Decimal, error) { + session := engine.NewSession() + defer session.Close() + return session.SumsDecimal(bean, colNames...) +} + // ImportFile SQL DDL file func (engine *Engine) ImportFile(ddlPath string) ([]sql.Result, error) { session := engine.NewSession() diff --git a/go.mod b/go.mod index a75d03f..148a991 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,9 @@ require ( github.com/cespare/xxhash v1.1.0 github.com/davecgh/go-spew v1.1.1 // indirect github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec - github.com/fairyhunter13/decimal v1.2.0-imp-5 + github.com/fairyhunter13/decimal v1.2.0-imp-6 github.com/fairyhunter13/newtype v1.0.10 - github.com/fairyhunter13/reflecthelper/v3 v3.5.0 + github.com/fairyhunter13/reflecthelper/v3 v3.5.1 github.com/go-sql-driver/mysql v1.5.0 github.com/lib/pq v1.7.0 github.com/mattn/go-sqlite3 v1.14.0 diff --git a/go.sum b/go.sum index 831bbc0..3a48fe3 100644 --- a/go.sum +++ b/go.sum @@ -15,12 +15,13 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec h1:NfhRXXFDPxcF5Cwo06DzeIaE7uuJtAUhsDwH3LNsjos= github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/fairyhunter13/decimal v1.2.0-imp-5 h1:/dyrhMIGUp6qjb2vKjlD0vQGnMHVd2EsOdpTVmAZhOg= github.com/fairyhunter13/decimal v1.2.0-imp-5/go.mod h1:pqb4RNxJI5R5ilHfmg9FTkpRMxi95Sa1K6tACdWfv9M= +github.com/fairyhunter13/decimal v1.2.0-imp-6 h1:6W9X0bC3A9Z8iaW8Wqew18dySWnQ6xbHni62bR/7CV0= +github.com/fairyhunter13/decimal v1.2.0-imp-6/go.mod h1:pqb4RNxJI5R5ilHfmg9FTkpRMxi95Sa1K6tACdWfv9M= github.com/fairyhunter13/newtype v1.0.10 h1:Rq965Tg0UZwHbmbRnP81LMvwasOc1EKp7lHIyjrUoBs= github.com/fairyhunter13/newtype v1.0.10/go.mod h1:ta3gbBY75TORM7VVmLaI6nb5i73SDMgAps7QDw9JKFM= -github.com/fairyhunter13/reflecthelper/v3 v3.5.0 h1:PM28lsmI70qoc2qlo8YpwBwU4i2DU3GxlS5hcvdBFX0= -github.com/fairyhunter13/reflecthelper/v3 v3.5.0/go.mod h1:lbcpGAaw2Qrb1uYLlR5L5hFHH9wUoyF2LUIASJCaEcw= +github.com/fairyhunter13/reflecthelper/v3 v3.5.1 h1:M5hyHHguUyTdQkyPcT7C1vYgdNKQHvwSnoZpdL2J0Ro= +github.com/fairyhunter13/reflecthelper/v3 v3.5.1/go.mod h1:lbcpGAaw2Qrb1uYLlR5L5hFHH9wUoyF2LUIASJCaEcw= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= diff --git a/session_stats.go b/session_stats.go index 17d0a67..97591d4 100644 --- a/session_stats.go +++ b/session_stats.go @@ -8,6 +8,8 @@ import ( "database/sql" "errors" "reflect" + + "github.com/fairyhunter13/decimal" ) // Count counts the records. bean's non-empty fields @@ -68,6 +70,11 @@ func (session *Session) SumInt(bean interface{}, columnName string) (res int64, return res, session.sum(&res, bean, columnName) } +// SumDecimal call sum some column. bean's non-empty fields are conditions. +func (session *Session) SumDecimal(bean interface{}, columnName string) (res decimal.Decimal, err error) { + return res, session.sum(&res, bean, columnName) +} + // Sums call sum some columns. bean's non-empty fields are conditions. func (session *Session) Sums(bean interface{}, columnNames ...string) ([]float64, error) { var res = make([]float64, len(columnNames), len(columnNames)) @@ -79,3 +86,9 @@ func (session *Session) SumsInt(bean interface{}, columnNames ...string) ([]int6 var res = make([]int64, len(columnNames), len(columnNames)) return res, session.sum(&res, bean, columnNames...) } + +// SumsDecimal call sum some columns. bean's non-empty fields are conditions. +func (session *Session) SumsDecimal(bean interface{}, columnNames ...string) ([]decimal.Decimal, error) { + var res = make([]decimal.Decimal, len(columnNames), len(columnNames)) + return res, session.sum(&res, bean, columnNames...) +}