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  }