4 Commits
v2.0.0 ... show

Author SHA1 Message Date
98801edbc0 db.Session() 2022-02-09 18:55:58 +01:00
7dd238342c encapsulate ErrNotFound 2022-02-09 15:53:37 +01:00
115c288a0b encapsulate ErrNotFound 2022-02-09 15:49:15 +01:00
702a05f405 session copy 2022-02-09 15:24:44 +01:00

View File

@@ -6,6 +6,10 @@ import (
mgo "gopkg.in/mgo.v2"
)
var (
ErrNotFound = errors.New("not found")
)
type Session struct {
session *mgo.Session
}
@@ -14,6 +18,10 @@ func (s *Session) Close() {
s.session.Close()
}
func (s *Session) Copy() *Session {
return &Session{session: s.session.Copy()}
}
func NewSession(dial string) (*Session, error) {
session, err := mgo.Dial(dial)
if err != nil {
@@ -25,16 +33,21 @@ func NewSession(dial string) (*Session, error) {
type Database struct {
database *mgo.Database
session *Session
}
func (s *Session) DB(name string) *Database {
return &Database{database: s.session.DB(name)}
return &Database{database: s.session.DB(name), session: s}
}
type Collection struct {
collection *mgo.Collection
}
func (db *Database) Session() *Session {
return db.session
}
func (db *Database) C(name string) *Collection {
return &Collection{collection: db.database.C(name)}
}
@@ -105,7 +118,11 @@ func (q *Query) Select(selector interface{}) *Query {
}
func (q *Query) One(result interface{}) error {
return q.query.One(result)
err := q.query.One(result)
if err == mgo.ErrNotFound {
err = ErrNotFound
}
return err
}
func (q *Query) Sort(fields ...string) *Query {
@@ -124,11 +141,19 @@ func (q *Query) Limit(n int) *Query {
}
func (q *Query) All(result interface{}) error {
return q.query.All(result)
err := q.query.All(result)
if err == mgo.ErrNotFound {
err = ErrNotFound
}
return err
}
func (q *Query) Count() (int, error) {
return q.query.Count()
c, err := q.query.Count()
if err == mgo.ErrNotFound {
err = ErrNotFound
}
return c, err
}
type Index struct {
@@ -151,7 +176,11 @@ type Pipe struct {
}
func (p *Pipe) All(result interface{}) error {
return p.pipe.All(result)
err := p.pipe.All(result)
if err == mgo.ErrNotFound {
err = ErrNotFound
}
return err
}
func (c *Collection) Pipe(pipeline interface{}) *Pipe {