couchdb-conduit-0.8.0: Couch DB client library using http-conduit and aeson

Safe HaskellSafe-Infered

Database.CouchDB.Conduit

Contents

Description

CouchDB

To work with concrete objects, use the following modules:

For complete documentation about The Couch DB HTTP API see http://wiki.apache.org/couchdb/Complete_HTTP_API_Reference

Synopsis

Document paths and revisions

type Path = ByteStringSource

Represents a path or path fragment.

As a rule, full path to document in CouchDB is just URL path. But there is one subtlety. For example, document ids can contain slashes. But, to work with such objects, path fragments must be escaped.

 database/doc%2Fname

But, fo non-document items such as views, attachments e.t.c., slashes between path fragments must not be escaped. While slashes in path fragments must be escaped.

 database/_design/my%2Fdesign/_view/my%2Fview

Except low-level functions, couchdb-conduit escapes all segments in paths.

type Revision = ByteStringSource

Represents a revision of a CouchDB Document.

CouchDB Connection

data CouchConnection Source

Represents a single connection to CouchDB server. The constructor for this data type is not exposed. Instead, you should use either the def method to retrieve a default instance.

def :: Default a => a

The default value for this type.

couchHost :: CouchConnection -> ByteStringSource

Hostname. Default value is "localhost"

couchPort :: CouchConnection -> IntSource

Port. 5984 by default.

couchLogin :: CouchConnection -> ByteStringSource

CouchDB login. By default is empty.

couchPass :: CouchConnection -> ByteStringSource

CouchDB password. By default is empty.

couchPrefix :: CouchConnection -> ByteStringSource

CouchDB database prefix. It will prepended to first fragment of request path. Must be fully valid DB name fragment.

Runtime enviroment and errors

class (MonadResource m, MonadBaseControl IO m) => MonadCouch m whereSource

A monad which allows access to the connection.

All functions to access CouchDB require a MonadCouch instance to access the connection information. ReaderT is an instance of MonadCouch, and runCouch runs a sequence of database actions using ReaderT and ResourceT.

If your db code is part of a larger monad, it makes sense to just make the larger monad an instance of MonadCouch and skip the intermediate ReaderT, since then performance is improved by eliminating one monad from the final transformer stack.

data CouchError Source

A CouchDB Error.

Constructors

CouchHttpError Int ByteString

Error comes from http.

CouchInternalError ByteString

Non-http errors include things like errors parsing the response.

NotModified

Is not an error actually. It is thrown when CouchDB returns 304 - Not Modified response to the request. See http://wiki.apache.org/couchdb/HTTP_Document_API

runCouchSource

Arguments

:: (MonadThrow m, MonadUnsafeIO m, MonadIO m, MonadBaseControl IO m) 
=> CouchConnection

Couch connection

-> ReaderT (Manager, CouchConnection) (ResourceT m) a

Actions

-> m a 

Connect to a CouchDB server, run a sequence of CouchDB actions, and then close the connection.. This function is a combination of withManager, withCouchConnection, runReaderT and runResourceT.

If you create your own instance of MonadCouch or use connection pool, use withCouchConnection.

withCouchConnectionSource

Arguments

:: (MonadResource m, MonadBaseControl IO m) 
=> Manager

Connection manager

-> CouchConnection

Couch connection

-> ((Manager, CouchConnection) -> m a)

Actions

-> m a 

Run a sequence of CouchDB actions with provided Manager and CouchConnection.

 withCouchConnection manager def {couchDB = "db"} . runReaderT . 
          runResourceT . lift $ do
    ... -- actions

Documents

couchRevSource

Arguments

:: MonadCouch m 
=> Path

Database.

-> Path

Document path.

-> m Revision 

Get Revision of a document.

couchRev'Source

Arguments

:: MonadCouch m 
=> Path

Database.

-> Path

Document path.

-> m Revision 

Brain-free version of couchRev. If document absent, just return empty ByteString.

couchDeleteSource

Arguments

:: MonadCouch m 
=> Path

Database.

-> Path

Document path.

-> Revision

Revision

-> m () 

Delete the given revision of the object.