Documentation
¶
Overview ¶
Package driver defines interfaces to be implemented by database drivers as used by package kivik.
Most code should use package kivik.
Index ¶
- type AttachmentMetaer
- type Authenticator
- type BulkDocer
- type BulkResult
- type BulkResults
- type Change
- type ChangedRevs
- type Changes
- type Client
- type ClientReplicator
- type Copier
- type DB
- type DBFlusher
- type DBStats
- type DBUpdate
- type DBUpdater
- type DBUpdates
- type Driver
- type Explainer
- type Finder
- type Index
- type MD5sum
- type Members
- type OldBulkDocer
- type QueryPlan
- type Replication
- type ReplicationInfo
- type Rever
- type Row
- type Rows
- type RowsWarner
- type Security
- type SequenceID
- type Session
- type Sessioner
- type Version
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AttachmentMetaer ¶
type AttachmentMetaer interface {
// GetAttachmentMeta returns meta information about an attachment.
GetAttachmentMeta(ctx context.Context, docID, rev, filename string) (contentType string, md5sum MD5sum, err error)
}
AttachmentMetaer is an optional interface which may be satisfied by a DB. If satisfied, it may be used to fetch meta data about an attachment. If not satisfied, GetAttachment will be used instead.
type Authenticator ¶
type Authenticator interface {
// Authenticate attempts to authenticate the client using an authenticator.
// If the authenticator is not known to the client, an error should be
// returned.
Authenticate(ctx context.Context, authenticator interface{}) error
}
Authenticator is an optional interface that may be implemented by a Client that supports authenitcated connections.
type BulkDocer ¶ added in v1.0.3
type BulkDocer interface {
// BulkDocs alls bulk create, update and/or delete operations. It returns an
// iterator over the results.
BulkDocs(ctx context.Context, docs []interface{}, options map[string]interface{}) (BulkResults, error)
}
BulkDocer is an optional interface which may be implemented by a driver to support bulk insert/update operations. For any driver that does not support the BulkDocer interface, the Put or CreateDoc methods will be called for each document to emulate the same functionality.
type BulkResult ¶
BulkResult is the result of a single doc update in a BulkDocs request.
type BulkResults ¶
type BulkResults interface {
// Next is called to populate *BulkResult with the values of the next bulk
// result in the set.
//
// Next should return io.EOF when there are no more results.
Next(*BulkResult) error
// Close closes the bulk results iterator.
Close() error
}
BulkResults is an iterator over the results for a BulkDocs call.
type Change ¶
type Change struct {
// ID is the document ID to which the change relates.
ID string `json:"id"`
// Seq is the update sequence for the changes feed.
Seq SequenceID `json:"seq"`
// Deleted is set to true for the changes feed, if the document has been
// deleted.
Deleted bool `json:"deleted"`
// Changes represents a list of document leaf revisions for the /_changes
// endpoint.
Changes ChangedRevs `json:"changes"`
// Doc is the raw, un-decoded JSON document. This is only populated when
// include_docs=true is set.
Doc json.RawMessage `json:"doc"`
}
Change represents the changes to a single document.
type ChangedRevs ¶
type ChangedRevs []string
ChangedRevs represents a "changes" field of a result in the /_changes stream.
func (*ChangedRevs) UnmarshalJSON ¶
func (c *ChangedRevs) UnmarshalJSON(data []byte) error
UnmarshalJSON satisfies the json.Unmarshaler interface
type Changes ¶
type Changes interface {
// Next is called to populate *Change with the values of the next value in
// the changes feed.
//
// Next should return io.EOF when the changes feed is closed by request.
Next(*Change) error
// Close closes the rows iterator.
Close() error
}
Changes is an iterator of the database changes feed.
type Client ¶
type Client interface {
// Version returns the server implementation's details.
Version(ctx context.Context) (*Version, error)
// AllDBs returns a list of all existing database names.
AllDBs(ctx context.Context, options map[string]interface{}) ([]string, error)
// DBExists returns true if the database exists.
DBExists(ctx context.Context, dbName string, options map[string]interface{}) (bool, error)
// CreateDB creates the requested DB. The dbName is validated as a valid
// CouchDB database name prior to calling this function, so the driver can
// assume a valid name.
CreateDB(ctx context.Context, dbName string, options map[string]interface{}) error
// DestroyDB deletes the requested DB.
DestroyDB(ctx context.Context, dbName string, options map[string]interface{}) error
// DB returns a handleto the requested database
DB(ctx context.Context, dbName string, options map[string]interface{}) (DB, error)
}
Client is a connection to a database server.
type ClientReplicator ¶
type ClientReplicator interface {
// Replicate initiates a replication.
Replicate(ctx context.Context, targetDSN, sourceDSN string, options map[string]interface{}) (Replication, error)
// GetReplications returns a list of replicatoins (i.e. all docs in the
// _replicator database)
GetReplications(ctx context.Context, options map[string]interface{}) ([]Replication, error)
}
ClientReplicator is an optional interface that may be implemented by a Client that supports replication between two database.
type Copier ¶
type Copier interface {
Copy(ctx context.Context, targetID, sourceID string, options map[string]interface{}) (targetRev string, err error)
}
Copier is an optional interface that may be implemented by a DB.
If a DB does implement Copier, Copy() functions will use it. If a DB does not implement the Copier interface, or if a call to Copy() returns an http.StatusUnimplemented, the driver will emulate a copy by doing a GET followed by PUT.
type DB ¶
type DB interface {
// AllDocs returns all of the documents in the database, subject to the
// options provided.
AllDocs(ctx context.Context, options map[string]interface{}) (Rows, error)
// Get fetches the requested document from the database, and unmarshals it
// into doc.
Get(ctx context.Context, docID string, options map[string]interface{}) (json.RawMessage, error)
// CreateDoc creates a new doc, with a server-generated ID.
CreateDoc(ctx context.Context, doc interface{}) (docID, rev string, err error)
// Put writes the document in the database.
Put(ctx context.Context, docID string, doc interface{}) (rev string, err error)
// Delete marks the specified document as deleted.
Delete(ctx context.Context, docID, rev string) (newRev string, err error)
// Stats returns database statistics.
Stats(ctx context.Context) (*DBStats, error)
// Compact initiates compaction of the database.
Compact(ctx context.Context) error
// CompactView initiates compaction of the view.
CompactView(ctx context.Context, ddocID string) error
// ViewCleanup cleans up stale view files.
ViewCleanup(ctx context.Context) error
// Security returns the database's security document.
Security(ctx context.Context) (*Security, error)
// SetSecurity sets the database's security document.
SetSecurity(ctx context.Context, security *Security) error
// Changes returns a Rows iterator for the changes feed. In continuous mode,
// the iterator will continue indefinitely, until Close is called.
Changes(ctx context.Context, options map[string]interface{}) (Changes, error)
// PutAttachment uploads an attachment to the specified document, returning
// the new revision.
PutAttachment(ctx context.Context, docID, rev, filename, contentType string, body io.Reader) (newRev string, err error)
// GetAttachment fetches an attachment for the associated document ID. rev
// may be an empty string to fetch the most recent document version.
GetAttachment(ctx context.Context, docID, rev, filename string) (contentType string, md5sum MD5sum, body io.ReadCloser, err error)
// DeleteAttachment deletes an attachment from a document, returning the
// document's new revision.
DeleteAttachment(ctx context.Context, docID, rev, filename string) (newRev string, err error)
// Query performs a query against a view, subject to the options provided.
// ddoc will be the design doc name without the '_design/' previx.
// view will be the view name without the '_view/' prefix.
Query(ctx context.Context, ddoc, view string, options map[string]interface{}) (Rows, error)
}
DB is a database handle.
type DBFlusher ¶
type DBFlusher interface {
// Flush requests a flush of disk cache to disk or other permanent storage.
//
// See http://docs.couchdb.org/en/2.0.0/api/database/compact.html#db-ensure-full-commit
Flush(ctx context.Context) error
}
DBFlusher is an optional interface that may be implemented by a database that can force a flush of the database backend file(s) to disk or other permanent storage.
type DBStats ¶
type DBStats struct {
Name string `json:"db_name"`
CompactRunning bool `json:"compact_running"`
DocCount int64 `json:"doc_count"`
DeletedCount int64 `json:"doc_del_count"`
UpdateSeq string `json:"update_seq"`
DiskSize int64 `json:"disk_size"`
ActiveSize int64 `json:"data_size"`
ExternalSize int64 `json:"-"`
}
DBStats contains database statistics..
type DBUpdate ¶
type DBUpdate struct {
DBName string `json:"db_name"`
Type string `json:"type"`
Seq string `json:"seq"`
}
DBUpdate represents a database update event.
type DBUpdater ¶
type DBUpdater interface {
// DBUpdates must return a channel on which *DBUpdate events are sent,
// and a function to close the connection.
DBUpdates() (DBUpdates, error)
}
DBUpdater is an optional interface that may be implemented by a client to provide access to the DB Updates feed.
type DBUpdates ¶
type DBUpdates interface {
// Next is called to populate DBUpdate with the values of the next update in
// the feed.
//
// Next should return io.EOF when the feed is closed normally.
Next(*DBUpdate) error
// Close closes the iterator.
Close() error
}
DBUpdates is a DBUpdates iterator.
type Driver ¶
type Driver interface {
// NewClient returns a connection handle to the database. The name is in a
// driver-specific format.
NewClient(ctx context.Context, name string) (Client, error)
}
Driver is the interface that must be implemented by a database driver.
type Explainer ¶ added in v1.1.2
The Explainer is an optional interface which provides access to the query explanation API supported by CouchDB 2.0 and newer, and PouchDB 6.3.4 and newer.
type Finder ¶
type Finder interface {
// Find executes a query using the new /_find interface. If query is a
// string, []byte, or json.RawMessage, it should be treated as a raw JSON
// payload. Any other type should be marshaled to JSON.
Find(ctx context.Context, query interface{}) (Rows, error)
// CreateIndex creates an index if it doesn't already exist. If the index
// already exists, it should do nothing. ddoc and name may be empty, in
// which case they should be provided by the backend. If index is a string,
// []byte, or json.RawMessage, it should be treated as a raw JSON payload.
// Any other type should be marshaled to JSON.
CreateIndex(ctx context.Context, ddoc, name string, index interface{}) error
// GetIndexes returns a list of all indexes in the database.
GetIndexes(ctx context.Context) ([]Index, error)
// Delete deletes the requested index.
DeleteIndex(ctx context.Context, ddoc, name string) error
}
The Finder is an optional interface which may be implemented by a database. The Finder interface provides access to the new (in CouchDB 2.0) MongoDB-style query interface.
type Index ¶
type Index struct {
DesignDoc string `json:"ddoc,omitempty"`
Name string `json:"name"`
Type string `json:"type"`
Definition interface{} `json:"def"`
}
Index is a MonboDB-style index definition.
type Members ¶
type Members struct {
Names []string `json:"names,omitempty"`
Roles []string `json:"roles,omitempty"`
}
Members represents the members of a database security document.
type OldBulkDocer ¶ added in v1.3.0
type OldBulkDocer interface {
// BulkDocs alls bulk create, update and/or delete operations. It returns an
// iterator over the results.
BulkDocs(ctx context.Context, docs []interface{}) (BulkResults, error)
}
OldBulkDocer is deprecated and will be removed in Kivik 2.0. Use BulkDocer instead.
type QueryPlan ¶ added in v1.1.2
type QueryPlan struct {
DBName string `json:"dbname"`
Index map[string]interface{} `json:"index"`
Selector map[string]interface{} `json:"selector"`
Options map[string]interface{} `json:"opts"`
Limit int64 `json:"limit"`
Skip int64 `json:"skip"`
// Fields is the list of fields to be returned in the result set, or
// an empty list if all fields are to be returned.
Fields []interface{} `json:"fields"`
Range map[string]interface{} `json:"range"`
}
QueryPlan is the response of an Explain query.
type Replication ¶
type Replication interface {
// The following methods are called just once, when the Replication is first
// returned from Replicate() or GetReplications().
ReplicationID() string
Source() string
Target() string
StartTime() time.Time
EndTime() time.Time
State() string
Err() error
// Delete deletes a replication, which cancels it if it is running.
Delete(context.Context) error
// Update fetches the latest replication state from the server.
Update(context.Context, *ReplicationInfo) error
}
Replication represents a _replicator document.
type ReplicationInfo ¶
type ReplicationInfo struct {
DocWriteFailures int64
DocsRead int64
DocsWritten int64
Progress float64
}
ReplicationInfo represents a snap-shot state of a replication, as provided by the _active_tasks endpoint.
type Rever ¶
type Rever interface {
// Rev returns the most current revision of the requested document.
Rev(ctx context.Context, docID string) (rev string, err error)
}
Rever is an optional interface that may be implemented by a database. If not implemented by the driver, the Get method will be used to emulate the functionality.
type Row ¶
type Row struct {
// ID is the document ID of the result.
ID string `json:"id"`
// Key is the view key of the result. For built-in views, this is the same
// as ID.
Key json.RawMessage `json:"key"`
// Value is the raw, un-decoded JSON value. For most built-in views (such as
// /_all_docs), this is `{"rev":"X-xxx"}`.
Value json.RawMessage `json:"value"`
// Doc is the raw, un-decoded JSON document. This is only populated by views
// which return docs, such as /_all_docs?include_docs=true.
Doc json.RawMessage `json:"doc"`
}
Row is a generic view result row.
type Rows ¶
type Rows interface {
// Next is called to populate *Row with the values of the next row in a
// result set.
//
// Next should return io.EOF when there are no more rows.
Next(*Row) error
// Close closes the rows iterator.
Close() error
// UpdateSeq is the update sequence of the database, if requested in the
// result set.
UpdateSeq() string
// Offset is the offset where the result set starts.
Offset() int64
// TotalRows is the number of documents in the database/view.
TotalRows() int64
}
Rows is an iterator over a view's results.
type RowsWarner ¶
type RowsWarner interface {
// Warning returns the warning generated by the query, if any.
Warning() string
}
RowsWarner is an optional interface, which allows a rows iterator to return a non-fatal warning. This is intended for use by the /_find endpoint, which generates warnings when indexes don't exist.
type SequenceID ¶
type SequenceID string
SequenceID is a CouchDB update sequence ID. This is just a string, but has a special JSON unmarshaler to work with both CouchDB 2.0.0 (which uses normal) strings for sequence IDs, and earlier versions (which use integers)
func (*SequenceID) UnmarshalJSON ¶
func (id *SequenceID) UnmarshalJSON(data []byte) error
UnmarshalJSON satisfies the json.Unmarshaler interface.
type Session ¶ added in v1.1.0
type Session struct {
// Name is the name of the authenticated user.
Name string
// Roles is a list of roles the user belongs to.
Roles []string
// AuthenticationMethod is the authentication method that was used for this
// session.
AuthenticationMethod string
// AuthenticationDB is the user database against which authentication was
// performed.
AuthenticationDB string
// AuthenticationHandlers is a list of authentication handlers configured on
// the server.
AuthenticationHandlers []string
// RawResponse is the raw JSON response sent by the server, useful for
// custom backends which may provide additional fields.
RawResponse json.RawMessage
}
Session is a copy of kivik.Session
type Sessioner ¶ added in v1.1.0
type Sessioner interface {
// Session returns information about the authenticated user.
Session(ctx context.Context) (*Session, error)
}
Sessioner is an optional interface that a client may satisfy to provide access to the authenticated session information.
type Version ¶
type Version struct {
// Version is the version number reported by the server or backend.
Version string
// Vendor is the vendor string reported by the server or backend.
Vendor string
// Features is a list of enabled, optional features. This was added in
// CouchDB 2.1.0, and can be expected to be empty for older versions.
Features []string
// RawResponse is the raw response body as returned by the server.
RawResponse json.RawMessage
}
Version represents a server version response.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package common contains logic and data structures shared by various kivik backends.
|
Package common contains logic and data structures shared by various kivik backends. |
|
Package couchdb is a driver for connecting with a CouchDB server over HTTP.
|
Package couchdb is a driver for connecting with a CouchDB server over HTTP. |
|
chttp
Package chttp provides a minimal HTTP driver backend for communicating with CouchDB servers.
|
Package chttp provides a minimal HTTP driver backend for communicating with CouchDB servers. |
|
Package memory provides a memory-backed Kivik driver, intended for testing.
|
Package memory provides a memory-backed Kivik driver, intended for testing. |
|
Package pouchdb provides a PouchDB driver for Kivik.
|
Package pouchdb provides a PouchDB driver for Kivik. |
|
bindings
Package bindings provides minimal GopherJS bindings around the PouchDB library.
|
Package bindings provides minimal GopherJS bindings around the PouchDB library. |
|
bindings/poucherr
Package poucherr exists only for the purpose of testing the PouchDB binding's handling of PouchDB-specific error messages.
|
Package poucherr exists only for the purpose of testing the PouchDB binding's handling of PouchDB-specific error messages. |
|
Package util provides utility functions used by various Kivik drivers.
|
Package util provides utility functions used by various Kivik drivers. |