mysql-simple-0.2.0.0: A mid-level MySQL client library.

Portabilityportable
Stabilityexperimental
MaintainerBryan O'Sullivan <bos@mailrank.com>

Database.MySQL.Simple.QueryResults

Description

The QueryResults typeclass, for converting a row of results returned by a SQL query into a more useful Haskell representation.

Synopsis

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) where
     convertResults [fa,fb] [va,vb] = (a,b)
         where !a = convert fa va
               !b = convert fb vb
     convertResults 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.

Methods

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.

Instances

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.