coal

package
v0.28.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2020 License: MIT Imports: 22 Imported by: 2

Documentation

Overview

Package coal provides a mini ORM for mongoDB.

Index

Constants

This section is empty.

Variables

View Source
var ErrInvalidated = errors.New("invalidated")

ErrInvalidated may be returned to the receiver if the underlying collection or database has been invalidated due to a drop or rename.

View Source
var ErrStop = errors.New("stop")

ErrStop may be returned by a receiver to stop the stream.

View Source
var ErrTransactionRequired = errors.New("operation requires a transaction")

ErrTransactionRequired is returned if an operation would be unsafe to perform without a transaction.

Functions

func A

func A(m Model, field string) string

A is a short-hand function to extract the JSON key of a model field.

Note: A will panic if no field has been found.

func C

func C(m Model) string

C is a short-hand function to extract the collection of a model.

func Contains added in v0.15.0

func Contains(list []ID, id ID) bool

Contains returns true if a list of object ids contains the specified id.

func F

func F(m Model, field string) string

F is a short-hand function to extract the BSON key of a model field. Additionally, it supports the "-" prefix for retrieving sort keys.

Note: F will panic if no field has been found.

func Includes added in v0.15.1

func Includes(all, subset []ID) bool

Includes returns true if a list of object ids includes another list of object ids.

func IsDuplicate added in v0.27.0

func IsDuplicate(err error) bool

IsDuplicate returns whether the provided error describes a duplicate document.

func IsHex added in v0.20.0

func IsHex(str string) bool

IsHex will assess whether the provided string is a valid hex encoded object id.

func IsMissing added in v0.27.0

func IsMissing(err error) bool

IsMissing returns whether the provided error describes a missing document.

func L added in v0.19.0

func L(m Model, flag string, force bool) string

L is a short-hand function to lookup a flagged field of a model.

Note: L will panic if multiple flagged fields have been found or force is requested and no flagged field has been found.

func R added in v0.11.2

func R(m Model, field string) string

R is a short-hand function to extract the relationship name of a model field.

Note: R will panic if no field has been found.

func Require added in v0.19.0

func Require(m Model, flags ...string)

Require will check if the specified flags are set on the specified model and panic if one is missing.

func Sort added in v0.20.0

func Sort(fields ...string) bson.D

Sort is a helper function to compute a sort object based on a list of fields with dash prefixes for descending sorting.

func T added in v0.17.0

func T(t time.Time) *time.Time

T is a short-hand function to get a pointer of a timestamp.

func ToD added in v0.22.4

func ToD(model Model) bson.D

ToD converts a model to a bson.D including all database fields.

func ToM added in v0.22.4

func ToM(model Model) bson.M

ToM converts a model to a bson.M including all database fields.

Types

type Base

type Base struct {
	DocID ID    `json:"-" bson:"_id,omitempty"`
	Lock  int64 `json:"-" bson:"_lk,omitempty"`
	Token ID    `json:"-" bson:"_tk,omitempty"`
}

Base is the base for every coal model.

func B added in v0.26.1

func B(id ...ID) Base

B is a short-hand to construct a base with the provided id or a generated id if none specified.

func (*Base) GetAccessor added in v0.28.0

func (b *Base) GetAccessor(v interface{}) *stick.Accessor

GetAccessor implements the Model interface.

func (*Base) GetBase added in v0.26.1

func (b *Base) GetBase() *Base

GetBase implements the Model interface.

func (*Base) ID

func (b *Base) ID() ID

ID implements the Model interface.

type Catalog added in v0.8.8

type Catalog struct {
	// contains filtered or unexported fields
}

A Catalog provides a central mechanism for registering models and indexes.

func NewCatalog added in v0.8.8

func NewCatalog(models ...Model) *Catalog

NewCatalog will create a new catalog.

func (*Catalog) Add added in v0.8.8

func (c *Catalog) Add(models ...Model)

Add will add the specified models to the catalog.

func (*Catalog) AddIndex added in v0.25.4

func (c *Catalog) AddIndex(model Model, unique bool, expiry time.Duration, fields ...string)

AddIndex will add an index to the internal index list. Fields that are prefixed with a dash will result in an descending index. See the MongoDB documentation for more details.

func (*Catalog) AddPartialIndex added in v0.25.4

func (c *Catalog) AddPartialIndex(model Model, unique bool, expiry time.Duration, fields []string, filter bson.D)

AddPartialIndex is similar to Add except that it adds a partial index. The filter must be an ordered document to ensure equality.

func (*Catalog) All added in v0.17.0

func (c *Catalog) All() map[Model][]Index

All returns a list of all registered models.

func (*Catalog) EnsureIndexes added in v0.25.4

func (c *Catalog) EnsureIndexes(store *Store) error

EnsureIndexes will ensure that the added indexes exist. It may fail early if some of the indexes are already existing and do not match the supplied index.

func (*Catalog) Find added in v0.8.8

func (c *Catalog) Find(pluralName string) Model

Find will return a model with the specified plural name.

func (*Catalog) FindIndexes added in v0.25.4

func (c *Catalog) FindIndexes(pluralName string) []Index

FindIndexes will return the indexes for the specified plural name.

func (*Catalog) VisualizeDOT added in v0.25.4

func (c *Catalog) VisualizeDOT(title string) string

VisualizeDOT emits a string in DOT format which when rendered with graphviz visualizes the models and their relationships.

fdp -Tpdf models.dot > models.pdf

func (*Catalog) VisualizePDF added in v0.25.4

func (c *Catalog) VisualizePDF(title string) ([]byte, error)

VisualizePDF returns a PDF document that visualizes the models and their relationships. The method expects the graphviz toolkit to be installed and accessible by the calling program.

type Collection added in v0.26.0

type Collection struct {
	// contains filtered or unexported fields
}

Collection mimics a collection and adds tracing.

func (*Collection) Aggregate added in v0.27.0

func (c *Collection) Aggregate(ctx context.Context, pipeline interface{}, opts ...*options.AggregateOptions) (*Iterator, error)

Aggregate wraps the native Aggregate collection method and yields the returned cursor.

func (*Collection) AggregateAll added in v0.26.0

func (c *Collection) AggregateAll(ctx context.Context, list interface{}, pipeline interface{}, opts ...*options.AggregateOptions) error

AggregateAll wraps the native Aggregate collection method and decodes all documents to the provided slice.

func (*Collection) BulkWrite added in v0.26.0

func (c *Collection) BulkWrite(ctx context.Context, models []mongo.WriteModel, opts ...*options.BulkWriteOptions) (*mongo.BulkWriteResult, error)

BulkWrite wraps the native BulkWrite collection method.

func (*Collection) CountDocuments added in v0.26.0

func (c *Collection) CountDocuments(ctx context.Context, filter interface{}, opts ...*options.CountOptions) (int64, error)

CountDocuments wraps the native CountDocuments collection method.

func (*Collection) DeleteMany added in v0.26.0

func (c *Collection) DeleteMany(ctx context.Context, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)

DeleteMany wraps the native DeleteMany collection method.

func (*Collection) DeleteOne added in v0.26.0

func (c *Collection) DeleteOne(ctx context.Context, filter interface{}, opts ...*options.DeleteOptions) (*mongo.DeleteResult, error)

DeleteOne wraps the native DeleteOne collection method.

func (*Collection) Distinct added in v0.26.0

func (c *Collection) Distinct(ctx context.Context, field string, filter interface{}, opts ...*options.DistinctOptions) ([]interface{}, error)

Distinct wraps the native Distinct collection method.

func (*Collection) EstimatedDocumentCount added in v0.26.0

func (c *Collection) EstimatedDocumentCount(ctx context.Context, opts ...*options.EstimatedDocumentCountOptions) (int64, error)

EstimatedDocumentCount wraps the native EstimatedDocumentCount collection method.

func (*Collection) Find added in v0.27.0

func (c *Collection) Find(ctx context.Context, filter interface{}, opts ...*options.FindOptions) (*Iterator, error)

Find wraps the native Find collection method and yields the returned cursor.

func (*Collection) FindAll added in v0.26.0

func (c *Collection) FindAll(ctx context.Context, list interface{}, filter interface{}, opts ...*options.FindOptions) error

FindAll wraps the native Find collection method and decodes all documents to the provided slice.

func (*Collection) FindOne added in v0.26.0

func (c *Collection) FindOne(ctx context.Context, filter interface{}, opts ...*options.FindOneOptions) lungo.ISingleResult

FindOne wraps the native FindOne collection method.

func (*Collection) FindOneAndDelete added in v0.26.0

func (c *Collection) FindOneAndDelete(ctx context.Context, filter interface{}, opts ...*options.FindOneAndDeleteOptions) lungo.ISingleResult

FindOneAndDelete wraps the native FindOneAndDelete collection method.

func (*Collection) FindOneAndReplace added in v0.26.0

func (c *Collection) FindOneAndReplace(ctx context.Context, filter interface{}, replacement interface{}, opts ...*options.FindOneAndReplaceOptions) lungo.ISingleResult

FindOneAndReplace wraps the native FindOneAndReplace collection method.

func (*Collection) FindOneAndUpdate added in v0.26.0

func (c *Collection) FindOneAndUpdate(ctx context.Context, filter interface{}, update interface{}, opts ...*options.FindOneAndUpdateOptions) lungo.ISingleResult

FindOneAndUpdate wraps the native FindOneAndUpdate collection method.

func (*Collection) InsertMany added in v0.26.0

func (c *Collection) InsertMany(ctx context.Context, documents []interface{}, opts ...*options.InsertManyOptions) (*mongo.InsertManyResult, error)

InsertMany wraps the native InsertMany collection method.

func (*Collection) InsertOne added in v0.26.0

func (c *Collection) InsertOne(ctx context.Context, document interface{}, opts ...*options.InsertOneOptions) (*mongo.InsertOneResult, error)

InsertOne wraps the native InsertOne collection method.

func (*Collection) Native added in v0.27.0

func (c *Collection) Native() lungo.ICollection

Native will return the underlying native collection.

func (*Collection) ReplaceOne added in v0.26.0

func (c *Collection) ReplaceOne(ctx context.Context, filter interface{}, replacement interface{}, opts ...*options.ReplaceOptions) (*mongo.UpdateResult, error)

ReplaceOne wraps the native ReplaceOne collection method.

func (*Collection) UpdateMany added in v0.26.0

func (c *Collection) UpdateMany(ctx context.Context, filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)

UpdateMany wraps the native UpdateMany collection method.

func (*Collection) UpdateOne added in v0.26.0

func (c *Collection) UpdateOne(ctx context.Context, filter interface{}, update interface{}, opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)

UpdateOne wraps the native UpdateOne collection method.

type Event added in v0.17.1

type Event string

Event defines the event type.

const (
	// Opened is emitted when the stream has been opened the first time. If the
	// receiver returns without and error it will not be emitted again in favor
	// of the resumed event.
	Opened Event = "opened"

	// Resumed is emitted after the stream has been resumed.
	Resumed Event = "resumed"

	// Created is emitted when a document has been created.
	Created Event = "created"

	// Updated is emitted when a document has been updated.
	Updated Event = "updated"

	// Deleted is emitted when a document has been deleted.
	Deleted Event = "deleted"

	// Errored is emitted when the underlying stream or the receiver returned an
	// error.
	Errored Event = "errored"

	// Stopped is emitted when the stream has been stopped
	Stopped Event = "stopped"
)

type Field

type Field struct {
	// The index of the field in the struct.
	Index int

	// The struct field name e.g. "TireSize".
	Name string

	// The struct field type and kind.
	Type reflect.Type
	Kind reflect.Kind

	// The JSON object key name e.g. "tire-size".
	JSONKey string

	// The BSON document key name e.g. "tire_size".
	BSONKey string

	// The custom flags.
	Flags []string

	// Whether the field is a pointer and thus optional.
	Optional bool

	// The relationship status.
	ToOne   bool
	ToMany  bool
	HasOne  bool
	HasMany bool

	// The relationship information.
	RelName    string
	RelType    string
	RelInverse string
}

A Field contains the meta information about a single field of a model.

type HasMany

type HasMany struct{}

The HasMany type denotes a has-many relationship in a model declaration.

type HasOne added in v0.8.3

type HasOne struct{}

The HasOne type denotes a has-one relationship in a model declaration.

Has-one relationships requires that the referencing side is ensuring that the reference is unique. In fire this should be done using a uniqueness validator and a unique index on the collection.

type ID added in v0.20.0

type ID = primitive.ObjectID

ID is short-hand type for the object id.

func FromHex added in v0.20.0

func FromHex(str string) (ID, error)

FromHex will convert the provided string to a object id.

func MustFromHex added in v0.20.0

func MustFromHex(str string) ID

MustFromHex will convert the provided string to a object id and panic if the string is not a valid object id.

func N added in v0.14.0

func N() *ID

N is a short-hand function to get a typed nil object id pointer.

func New added in v0.20.0

func New(timestamp ...time.Time) ID

New will return a new object id, optionally using a custom timestamp.

func P added in v0.8.4

func P(id ID) *ID

P is a short-hand function to get a pointer of the specified object id.

func Unique added in v0.10.2

func Unique(ids []ID) []ID

Unique is a helper to get a unique list of object ids.

func Z added in v0.20.0

func Z() ID

Z is a short-hand to get a zero object id.

type Index added in v0.25.4

type Index struct {
	Model  Model
	Fields []string
	Unique bool
	Expiry time.Duration
	Filter bson.D
}

Index is an index registered with a catalog.

func (*Index) Compile added in v0.25.4

func (i *Index) Compile() mongo.IndexModel

Compile will compile the index to a mongo.IndexModel.

type Iterator added in v0.27.0

type Iterator struct {
	// contains filtered or unexported fields
}

Iterator manages the iteration over a cursor.

func (*Iterator) Close added in v0.27.0

func (i *Iterator) Close()

Close will close the underlying cursor. A call to it should be deferred right after obtaining an iterator. Close should be called also if the iterator is still valid but no longer used by the application.

func (*Iterator) Decode added in v0.27.0

func (i *Iterator) Decode(v interface{}) error

Decode will decode the loaded document to the specified value.

func (*Iterator) Error added in v0.27.0

func (i *Iterator) Error() error

Error return the first error encountered during iteration. It should always be checked after an iteration has finished to ensure there where no errors.

func (*Iterator) Next added in v0.27.0

func (i *Iterator) Next() bool

Next will load the next document from the cursor and if available return true. If it returns false the iteration must be stopped due to the cursor being exhausted or an error.

type Level added in v0.27.0

type Level int

Level describes the safety level under which an operation should be executed.

const (
	// Unsafe will allow running operations without a transaction that by
	// default require a transaction.
	Unsafe Level = -1

	// Default is the default level.
	Default Level = 0
)

type Manager added in v0.27.0

type Manager struct {
	// contains filtered or unexported fields
}

Manager manages operations on collection of documents. It will validate operations and ensure that they are safe under the MongoDB guarantees.

func (*Manager) C added in v0.27.0

func (m *Manager) C() *Collection

C is a short-hand to access the mangers collection.

func (*Manager) Count added in v0.27.0

func (m *Manager) Count(ctx context.Context, filter bson.M, skip, limit int64, lock bool, level ...Level) (int64, error)

Count will count the documents that match the specified filter. Lock can be set to true to force a write lock on the documents and prevent a stale read during a transaction.

A transaction is always required to ensure isolation.

Unsafe: The count may miss documents or include them multiple times if interleaving operations move the documents in the used index.

func (*Manager) Delete added in v0.27.0

func (m *Manager) Delete(ctx context.Context, model Model, id ID) (bool, error)

Delete will remove the document with the specified id. It will return whether a document has been found and deleted.

func (*Manager) DeleteAll added in v0.27.0

func (m *Manager) DeleteAll(ctx context.Context, filter bson.M) (int64, error)

DeleteAll will delete the documents that match the specified filter. It will return the number of deleted documents.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run as part of a transaction.

func (*Manager) DeleteFirst added in v0.27.0

func (m *Manager) DeleteFirst(ctx context.Context, model Model, filter bson.M, sort []string) (bool, error)

DeleteFirst will delete the first document that matches the specified filter. It will return whether a document has been found and deleted.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run as part of a transaction.

func (*Manager) Distinct added in v0.27.1

func (m *Manager) Distinct(ctx context.Context, field string, filter bson.M, lock bool, level ...Level) ([]interface{}, error)

Distinct will find all documents that match the specified filter and collect the specified field. Lock can be set to true to force a write lock on the documents and prevent a stale read during a transaction.

A transaction is required to ensure isolation.

Unsafe: The result may miss documents or include them multiple times if interleaving operations move the documents in the used index.

func (*Manager) Find added in v0.27.0

func (m *Manager) Find(ctx context.Context, model Model, id ID, lock bool) (bool, error)

Find will find the document with the specified id. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction.

A transaction is required for locking.

func (*Manager) FindAll added in v0.27.0

func (m *Manager) FindAll(ctx context.Context, list interface{}, filter bson.M, sort []string, skip, limit int64, lock bool, level ...Level) error

FindAll will find all documents that match the specified filter. Lock can be set to true to force a write lock on the documents and prevent a stale read during a transaction.

A transaction is required to ensure isolation.

Unsafe: The result may miss documents or include them multiple times if interleaving operations move the documents in the used index.

func (*Manager) FindEach added in v0.27.0

func (m *Manager) FindEach(ctx context.Context, filter bson.M, sort []string, skip, limit int64, lock bool, level ...Level) (*Iterator, error)

FindEach will find all documents that match the specified filter. Lock can be set to true to force a write lock on the documents and prevent a stale read during a transaction.

A transaction is always required to ensure isolation.

Unsafe: The result may miss documents or include them multiple times if interleaving operations move the documents in the used index.

func (*Manager) FindFirst added in v0.27.0

func (m *Manager) FindFirst(ctx context.Context, model Model, filter bson.M, sort []string, skip int64, lock bool) (bool, error)

FindFirst will find the first document that matches the specified filter. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction.

A transaction is required for locking.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run during a transaction.

func (*Manager) Insert added in v0.27.0

func (m *Manager) Insert(ctx context.Context, models ...Model) error

Insert will insert the provided documents. If a document has a zero id a new id will be generated and assigned. The documents are inserted in order until an error is encountered.

func (*Manager) InsertIfMissing added in v0.27.0

func (m *Manager) InsertIfMissing(ctx context.Context, filter bson.M, model Model, lock bool) (bool, error)

InsertIfMissing will insert the provided document if no document matched the provided filter. If the document has a zero id a new id will be generated and assigned. It will return whether a document has been inserted. The underlying upsert operation will merge the filter with the model fields. Lock can be set to true to force a write lock on the existing document and prevent a stale read during a transaction.

A transaction is required for locking.

Warning: Even with transactions there is a risk for duplicate inserts when the filter is not covered by a unique index.

func (*Manager) Replace added in v0.27.0

func (m *Manager) Replace(ctx context.Context, model Model, lock bool) (bool, error)

Replace will replace the existing document with the provided one. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction in case the replace did not change the document.

A transaction is required for locking.

func (*Manager) ReplaceFirst added in v0.27.0

func (m *Manager) ReplaceFirst(ctx context.Context, filter bson.M, model Model, lock bool) (bool, error)

ReplaceFirst will replace the first document that matches the specified filter. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction if the replace did not cause an update.

A transaction is required for locking.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run as part of a transaction.

func (*Manager) T added in v0.27.0

func (m *Manager) T() *Translator

T is a short-hand to access the managers translator.

func (*Manager) Update added in v0.27.0

func (m *Manager) Update(ctx context.Context, model Model, id ID, update bson.M, lock bool) (bool, error)

Update will update the document with the specified id. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction in case the update did not change the document.

A transaction is required for locking.

func (*Manager) UpdateAll added in v0.27.0

func (m *Manager) UpdateAll(ctx context.Context, filter, update bson.M, lock bool) (int64, error)

UpdateAll will update the documents that match the specified filter. It will return the number of matched documents. Lock can be set to true to force a write lock on the documents and prevent a stale read during a transaction in case the operation did not change all documents.

A transaction is required for locking.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run as part of a transaction.

func (*Manager) UpdateFirst added in v0.27.0

func (m *Manager) UpdateFirst(ctx context.Context, model Model, filter, update bson.M, sort []string, lock bool) (bool, error)

UpdateFirst will update the first document that matches the specified filter. It will return whether a document has been found. Lock can be set to true to force a write lock on the document and prevent a stale read during a transaction in case the update did not change the document.

A transaction is required for locking.

Warning: If the operation depends on interleaving writes to not include or exclude documents from the filter it should be run as part of a transaction.

func (*Manager) Upsert added in v0.27.0

func (m *Manager) Upsert(ctx context.Context, model Model, filter, update bson.M, sort []string, lock bool) (bool, error)

Upsert will update the first document that matches the specified filter. If no document has been found, the update document is applied to the filter and inserted. It will return whether a document has been inserted. Lock can be set to true to force a write lock on the existing document and prevent a stale read during a transaction.

A transaction is required for locking.

Warning: Even with transactions there is a risk for duplicate inserts when the filter is not covered by a unique index.

type Meta

type Meta struct {
	// The struct type.
	Type reflect.Type

	// The struct type name e.g. "models.CarWheel".
	Name string

	// The plural resource name e.g. "car-wheels".
	PluralName string

	// The collection name e.g. "car_wheels".
	Collection string

	// The struct fields.
	Fields map[string]*Field

	// The struct fields ordered.
	OrderedFields []*Field

	// The database fields.
	DatabaseFields map[string]*Field

	// The attributes.
	Attributes map[string]*Field

	// The relationships.
	Relationships map[string]*Field

	// The flagged fields.
	FlaggedFields map[string][]*Field

	// The accessor.
	Accessor *stick.Accessor
}

Meta stores extracted meta data from a model.

func GetMeta added in v0.20.0

func GetMeta(model Model) *Meta

GetMeta returns the meta structure for the specified model. It will always return the same value for the same model.

Note: This method panics if the passed Model has invalid fields or tags.

func (*Meta) Make

func (m *Meta) Make() Model

Make returns a pointer to a new zero initialized model e.g. *Post.

func (*Meta) MakeSlice

func (m *Meta) MakeSlice() interface{}

MakeSlice returns a pointer to a zero length slice of the model e.g. *[]*Post.

type Model

type Model interface {
	ID() ID
	Validate() error
	GetBase() *Base
	GetAccessor(interface{}) *stick.Accessor
}

Model defines the shape of a document stored in a collection. Custom types must implement the interface by embedding the Base type.

func Slice added in v0.26.1

func Slice(ptr interface{}) []Model

Slice takes a slice of the form *[]*Post and returns a new slice that contains all models.

type Receiver added in v0.17.1

type Receiver func(event Event, id ID, model Model, err error, token []byte) error

Receiver is a callback that receives stream events.

type Store

type Store struct {
	// contains filtered or unexported fields
}

A Store manages the usage of a database client.

func Connect added in v0.24.0

func Connect(uri string) (*Store, error)

Connect will connect to the specified database and return a new store. The read and write concern is set to majority by default.

In summary, queries may return data that has bas been committed but may not be the most recent committed data. Also, long running cursors on indexed fields may return duplicate or missing documents due to the documents moving within the index. For operations involving multiple documents a transaction must be used to ensure atomicity, consistency and isolation.

func MustConnect added in v0.24.0

func MustConnect(uri string) *Store

MustConnect will call Connect and panic on errors.

func MustOpen added in v0.24.0

func MustOpen(store lungo.Store, defaultDB string, reporter func(error)) *Store

MustOpen will call Open and panic on errors.

func NewStore

func NewStore(client lungo.IClient, defaultDB string, engine *lungo.Engine) *Store

NewStore creates a store that uses the specified client, default database and engine. The engine may be nil if no lungo database is used.

func Open added in v0.24.0

func Open(store lungo.Store, defaultDB string, reporter func(error)) (*Store, error)

Open will open the database using the provided lungo store. If the store is missing an in-memory store will be created.

func (*Store) C added in v0.20.0

func (s *Store) C(model Model) *Collection

C will return the collection for the specified model. The collection is just a thin wrapper around the driver collection API to integrate tracing. Since it does not perform any checks, it is recommended to use the manager to perform safe CRUD operations.

func (*Store) Client added in v0.20.0

func (s *Store) Client() lungo.IClient

Client returns the client used by this store.

func (*Store) Close

func (s *Store) Close() error

Close will close the store and its associated client.

func (*Store) DB added in v0.20.0

func (s *Store) DB() lungo.IDatabase

DB returns the database used by this store.

func (*Store) M added in v0.27.0

func (s *Store) M(model Model) *Manager

M will return the manager for the specified model. The manager will translate query and update documents as well as perform extensive checks before running operations to ensure they are as safe as possible.

func (*Store) T added in v0.27.0

func (s *Store) T(ctx context.Context, fn func(context.Context) error) error

T will create a transaction around the specified callback. If the callback returns no error the transaction will be committed. If T itself does not return an error the transaction has been committed. The created context must be used with all operations that should be included in the transaction.

A transaction has the effect that the read concern is upgraded to "snapshot" which results in isolated and linearizable reads and writes of the data that has been committed prior to the start of the transaction:

  • Writes that conflict with other transactional writes will return an error. Non-transactional writes will wait until the transaction has completed.
  • Reads are not guaranteed to be stable, another transaction may delete or modify the document an also commit concurrently. Therefore, documents that must "survive" the transaction and cause transactional writes to abort, must be locked by incrementing or changing a field to a new value.

type Stream added in v0.17.1

type Stream struct {
	// contains filtered or unexported fields
}

Stream simplifies the handling of change streams to receive changes to documents.

func OpenStream added in v0.19.2

func OpenStream(store *Store, model Model, token []byte, receiver Receiver) *Stream

OpenStream will open a stream and continuously forward events to the specified receiver until the stream is closed. If a token is present it will be used to resume the stream.

The stream automatically resumes on errors using an internally stored resume token. Applications that need more control should store the token externally and reopen the stream manually to resume from a specific position.

func Reconcile added in v0.20.0

func Reconcile(store *Store, model Model, loaded func(), created, updated func(Model), deleted func(ID), errored func(error)) *Stream

Reconcile uses a stream to reconcile changes to a collection. It will automatically load existing models once the underlying stream has been opened. After that it will yield all changes to the collection until the returned stream has been closed.

func (*Stream) Close added in v0.17.1

func (s *Stream) Close()

Close will close the stream.

type Tester added in v0.17.1

type Tester struct {
	// The store to use for cleaning the database.
	Store *Store

	// The registered models.
	Models []Model
}

Tester provides facilities to work with coal models in tests.

func NewTester added in v0.17.1

func NewTester(store *Store, models ...Model) *Tester

NewTester returns a new tester.

func (*Tester) Clean added in v0.17.1

func (t *Tester) Clean()

Clean will remove the collections of models that have been registered and reset the header map.

func (*Tester) Count added in v0.20.0

func (t *Tester) Count(model Model, query ...bson.M) int

Count will count all saved models.

func (*Tester) Delete added in v0.17.1

func (t *Tester) Delete(model Model)

Delete will delete the specified model.

func (*Tester) Fetch added in v0.17.1

func (t *Tester) Fetch(model Model, id ID) Model

Fetch will return the saved model.

func (*Tester) FindAll added in v0.17.1

func (t *Tester) FindAll(model Model, query ...bson.M) interface{}

FindAll will return all saved models.

func (*Tester) FindLast added in v0.17.1

func (t *Tester) FindLast(model Model, query ...bson.M) Model

FindLast will return the last saved model.

func (*Tester) Insert added in v0.26.1

func (t *Tester) Insert(model Model) Model

Insert will insert the specified model.

func (*Tester) Replace added in v0.26.1

func (t *Tester) Replace(model Model) Model

Replace will replace the specified model.

func (*Tester) Update added in v0.17.1

func (t *Tester) Update(model Model, update bson.M) Model

Update will update the specified model.

type Translator added in v0.27.0

type Translator struct {
	// contains filtered or unexported fields
}

Translator is capable of translating query, update and sort documents from struct field names to database fields names.

func NewTranslator added in v0.27.0

func NewTranslator(model Model) *Translator

NewTranslator will return a translator for the specified model.

func (*Translator) Document added in v0.27.0

func (t *Translator) Document(queryOrUpdate bson.M) (bson.D, error)

Document will convert the provided query or update document and translate all field names to refer to known database fields. It will also validate the query or update and return an error if an unsafe operator is used.

func (*Translator) Field added in v0.27.1

func (t *Translator) Field(field string) (string, error)

Field will translate the specified field.

func (*Translator) Sort added in v0.27.0

func (t *Translator) Sort(fields []string) (bson.D, error)

Sort will convert the provided sort array to a sort document and translate all field names to refer to known database fields.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL