Portability | portable |
---|---|
Stability | experimental |
Maintainer | Bryan O'Sullivan <bos@mailrank.com> |
The QueryResults
typeclass, for converting a row of results
returned by a SQL query into a more useful Haskell representation.
- class QueryResults a where
- convertResults :: [Field] -> [Maybe ByteString] -> a
- convertError :: [Field] -> [Maybe ByteString] -> Int -> a
Documentation
class QueryResults a whereSource
A collection type that can be converted from a list of strings.
Instances should use the convert
method of the Result
class
to perform conversion of each element of the collection.
This example instance demonstrates how to convert a two-column row
into a Haskell pair. Each field in the metadata is paired up with
each value from the row, and the two are passed to convert
.
instance (Result
a,Result
b) =>QueryResults
(a,b) whereconvertResults
[fa,fb] [va,vb] = (a,b) where !a =convert
fa va !b =convert
fb vbconvertResults
fs vs =convertError
fs vs
Notice that this instance evaluates each element to WHNF before constructing the pair. By doing this, we guarantee two important properties:
- Keep resource usage under control by preventing the construction of potentially long-lived thunks.
- Ensure that any
ResultError
that might arise is thrown immediately, rather than some place later in application code that cannot handle it.
convertResults :: [Field] -> [Maybe ByteString] -> aSource
Convert values from a row into a Haskell collection.
This function will throw a ResultError
if conversion of the
collection fails.
Result a => QueryResults (Only a) | |
(Result a, Result b) => QueryResults (a, b) | |
(Result a, Result b, Result c) => QueryResults (a, b, c) | |
(Result a, Result b, Result c, Result d) => QueryResults (a, b, c, d) | |
(Result a, Result b, Result c, Result d, Result e) => QueryResults (a, b, c, d, e) | |
(Result a, Result b, Result c, Result d, Result e, Result f) => QueryResults (a, b, c, d, e, f) | |
(Result a, Result b, Result c, Result d, Result e, Result f, Result g) => QueryResults (a, b, c, d, e, f, g) | |
(Result a, Result b, Result c, Result d, Result e, Result f, Result g, Result h) => QueryResults (a, b, c, d, e, f, g, h) | |
(Result a, Result b, Result c, Result d, Result e, Result f, Result g, Result h, Result i) => QueryResults (a, b, c, d, e, f, g, h, i) | |
(Result a, Result b, Result c, Result d, Result e, Result f, Result g, Result h, Result i, Result j) => QueryResults (a, b, c, d, e, f, g, h, i, j) |
convertError :: [Field] -> [Maybe ByteString] -> Int -> aSource
Throw a ConversionFailed
exception, indicating a mismatch
between the number of columns in the Field
and row, and the
number in the collection to be converted to.