diff --git a/internal/sqladapter/database.go b/internal/sqladapter/database.go index e04b585063af1b469d1491ec180f0bae05f17067..ae3c1b3efe00a591a1bf6d4fd1253bfa111b333a 100644 --- a/internal/sqladapter/database.go +++ b/internal/sqladapter/database.go @@ -125,6 +125,10 @@ func (d *BaseDatabase) Ping() error { // Close terminates the current database session. func (d *BaseDatabase) Close() error { + defer func() { + d.sess = nil + d.tx = nil + }() if d.sess != nil { if d.tx != nil && !d.tx.Done() { d.tx.Rollback() diff --git a/internal/sqlutil/result/result.go b/internal/sqlutil/result/result.go index a508ac5bdec21651bd705fc39f4b81c8642ce26b..61df81fab75d888b3f6d3a2c8e900ff583735d13 100644 --- a/internal/sqlutil/result/result.go +++ b/internal/sqlutil/result/result.go @@ -147,9 +147,12 @@ func (r *Result) Count() (uint64, error) { }{} q := r.buildSelect() - q.Columns(db.Raw{"count(1) AS _t"}).Limit(1) + q.Columns(db.Raw{"count(1) AS _t"}).Limit(1).OrderBy(nil) if err := q.Iterator().One(&counter); err != nil { + if err == db.ErrNoMoreRows { + return 0, nil + } return 0, err } diff --git a/sqlite/database.go b/sqlite/database.go index 345d3e5b4aaf0d72202590992a16de861c219881..c2de9e588add707e43f5b754529d8774776ec02f 100644 --- a/sqlite/database.go +++ b/sqlite/database.go @@ -123,7 +123,7 @@ func (d *database) Use(name string) (err error) { } func (d *database) Close() error { - if d.BaseDatabase != nil { + if d.Session() != nil { if atomic.AddInt32(&fileOpenCount, -1) < 0 { return errors.New(`Close() without Open()?`) }