github.com/aacfactory/fns-contrib/databases/sql@v1.2.84/dac/count.go (about) 1 package dac 2 3 import ( 4 "github.com/aacfactory/errors" 5 "github.com/aacfactory/fns-contrib/databases/sql" 6 "github.com/aacfactory/fns-contrib/databases/sql/dac/conditions" 7 "github.com/aacfactory/fns-contrib/databases/sql/dac/specifications" 8 "github.com/aacfactory/fns/context" 9 ) 10 11 func Count[T Table](ctx context.Context, cond conditions.Condition) (count int64, err error) { 12 _, query, arguments, buildErr := specifications.BuildCount[T](ctx, specifications.Condition{Condition: cond}) 13 if buildErr != nil { 14 err = errors.Warning("sql: count failed").WithCause(buildErr) 15 return 16 } 17 18 rows, queryErr := sql.Query(ctx, query, arguments...) 19 if queryErr != nil { 20 err = errors.Warning("sql: count failed").WithCause(queryErr) 21 return 22 } 23 24 if rows.Next() { 25 scanErr := rows.Scan(&count) 26 if scanErr != nil { 27 _ = rows.Close() 28 err = errors.Warning("sql: count failed").WithCause(queryErr) 29 return 30 } 31 } 32 _ = rows.Close() 33 return 34 }