Safe Haskell | Safe-Infered |
---|
Higher-level functions to interact with CouchDB views. To manipulate views in design documents see Database.CouchDB.Conduit.Design
- couchView :: MonadCouch m => Path -> Path -> Path -> Query -> ResourceT m (Source m Object)
- couchView' :: MonadCouch m => Path -> Path -> Path -> Query -> Sink Object m a -> ResourceT m a
- couchViewPost :: (MonadCouch m, ToJSON a) => Path -> Path -> Path -> Query -> a -> ResourceT m (Source m Object)
- couchViewPost' :: (MonadCouch m, ToJSON a) => Path -> Path -> Path -> Query -> a -> Sink Object m a -> ResourceT m a
- rowValue :: ResourceIO m => Conduit Object m Value
- mkParam :: ToJSON a => a -> ByteString
Acccessing views
In contrast to the functions of access to documents that are loaded into
memory entirely. couchView
and couchView'
combines the incredible power
of http-conduit and attoparsec to allow you to process objects in
constant space.
As data is read from the network, it is fed into attoparsec. When
attoparsec completes parsing row, it sent to Sink
. Sink
can be composed
from many conduits with sink at the end, such as rowValue
, view conduits
from Database.CouchDB.Conduit.Explicit and
Database.CouchDB.Conduit.Generic, and many others. See
Data.Conduit for details and documentation.
:: MonadCouch m | |
=> Path | Database |
-> Path | Design document |
-> Path | View name |
-> Query | Query parameters |
-> ResourceT m (Source m Object) |
Run CouchDB view in manner like http
.
runCouch def $ do -- Print all upon receipt. src <- couchView "mydb" "mydesign" "myview" [] src $$ CL.mapM_ (liftIO . print) -- ... Or extract row value and consume src' <- couchView "mydb" "mydesign" "myview" [] res <- src' $= rowValue $$ CL.consume
:: (MonadCouch m, ToJSON a) | |
=> Path | Database |
-> Path | Design document |
-> Path | View name |
-> Query | Query parameters |
-> a | View |
-> ResourceT m (Source m Object) |
Run CouchDB view in manner like http
using POST
(since CouchDB 0.9).
It's convenient in case that keys
paremeter too big for GET
query
string. Other query parameters used as usual.
runCouch def $ do src <- couchViewPost "mydb" "mydesign" "myview" [("group", Just "true")] ["key1", "key2", "key3"] src $$ CL.mapM_ (liftIO . print)
:: (MonadCouch m, ToJSON a) | |
=> Path | Database |
-> Path | Design document |
-> Path | View name |
-> Query | Query parameters |
-> a | View |
-> Sink Object m a | Sink for handle view rows. |
-> ResourceT m a |
Brain-free version of couchViewPost
. Takes Sink
to consume response.
rowValue :: ResourceIO m => Conduit Object m ValueSource
Conduit for extract "value" field from CouchDB view row.
View query parameters
For details see
http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options. Note,
because all options must be a proper URL encoded JSON, construction of
complex parameters can be very tedious. To simplify this, use mkParam
.
:: ToJSON a | |
=> a | Parameter |
-> ByteString |
Encode query parameter to ByteString
.
mkParam (["a", "b"] :: [String]) "[\"a\",\"b\"]"
It't just convert lazy ByteString
from encode
to strict
ByteString