| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Preql
Synopsis
- class SqlQuery m => SQL (m :: * -> *) where
- runTransaction' :: IsolationLevel -> Transaction a -> m a
- withConnection :: (Connection -> m a) -> m a
- queryOn :: (ToSql p, FromSql r) => Connection -> (Query, p) -> m (Vector r)
- queryOn_ :: ToSql p => Connection -> (Query, p) -> m ()
- sql :: QuasiQuoter
- data Transaction a
- data Query
- runTransactionIO :: IsolationLevel -> Transaction a -> Connection -> IO (Either QueryError a)
- class FromSql a
- class FromSqlField a
- class ToSql a
- class ToSqlField a
- data QueryError
- data FieldError = FieldError {}
- data UnlocatedFieldError
- data TypeMismatch = TypeMismatch {}
- module Preql.Wire
Documentation
class SqlQuery m => SQL (m :: * -> *) where Source #
An Effect class for running SQL queries. You can think of this as a context
specifying a particular Postgres connection (or connection pool). A minimal instance
defines withConnection.
Override the remaining methods to log errors before rethrowing, or not to rethrow.
Minimal complete definition
Methods
runTransaction' :: IsolationLevel -> Transaction a -> m a Source #
Run multiple queries in a transaction.
default runTransaction' :: MonadIO m => IsolationLevel -> Transaction a -> m a Source #
withConnection :: (Connection -> m a) -> m a Source #
runTransaction covers the most common patterns of
mult-statement transactions. withConnection is useful when
you want more control, or want to override the defaults that
your instance defines. For example:
- change the number of retries
- interleave calls to other services with the Postgres transaction
- ensure a prepared statement is shared among successive transactions
queryOn :: (ToSql p, FromSql r) => Connection -> (Query, p) -> m (Vector r) Source #
Run a query on the specified Connection
default queryOn :: (ToSql p, FromSql r, MonadIO m) => Connection -> (Query, p) -> m (Vector r) Source #
queryOn_ :: ToSql p => Connection -> (Query, p) -> m () Source #
Instances
sql :: QuasiQuoter Source #
Given a SQL query with ${} antiquotes, splice a pair (Query
p r, p) or a function p' -> (Query p r, p) if the SQL
string includes both antiquote and positional parameters.
The sql Quasiquoter allows passing parameters to a query by name, inside a ${} antiquote. For example:
[sql| SELECT name, age FROM cats WHERE age >= ${minAge} and age < ${maxAge} |]
The Haskell term within {} must be a variable in scope; more complex expressions are not supported.
Antiquotes are replaced by positional ($1, $2) parameters supported by Postgres, and the
encoded values are sent with PexecParams
Mixed named & numbered parameters are also supported. It is hoped that this will be useful when
migrating existing queries. For example:
query $ [sql| SELECT name, age FROM cats WHERE age >= ${minAge} and age < $1 |] maxAge
Named parameters will be assigned numbers higher than the highest numbered paramater placeholder.
A quote with only named parameters is converted to a tuple '(Query, p)'. For example:
("SELECT name, age FROM cats WHERE age >= $1 and age < $2", (minAge, maxAge))
If there are no parameters, the inner tuple is (), like ("SELECT * FROM cats", ()).
If there are both named & numbered params, the splice is a function taking a tuple and returning
(Query, p) where p includes both named & numbered params. For example:
a -> ("SELECT name, age FROM cats WHERE age >= $1 and age < $2", (a, maxAge))
data Transaction a Source #
A Transaction can only contain SQL queries (and pure functions).
Instances
| Monad Transaction Source # | |
Defined in Preql.Effect.Internal Methods (>>=) :: Transaction a -> (a -> Transaction b) -> Transaction b # (>>) :: Transaction a -> Transaction b -> Transaction b # return :: a -> Transaction a # | |
| Functor Transaction Source # | |
Defined in Preql.Effect.Internal Methods fmap :: (a -> b) -> Transaction a -> Transaction b # (<$) :: a -> Transaction b -> Transaction a # | |
| Applicative Transaction Source # | |
Defined in Preql.Effect.Internal Methods pure :: a -> Transaction a # (<*>) :: Transaction (a -> b) -> Transaction a -> Transaction b # liftA2 :: (a -> b -> c) -> Transaction a -> Transaction b -> Transaction c # (*>) :: Transaction a -> Transaction b -> Transaction b # (<*) :: Transaction a -> Transaction b -> Transaction a # | |
| SqlQuery Transaction Source # | The same |
Defined in Preql.Effect | |
The IsString instance does no validation; the limited instances discourage directly manipulating strings, with the high risk of SQL injection.
functions for writing SQL instances
runTransactionIO :: IsolationLevel -> Transaction a -> Connection -> IO (Either QueryError a) Source #
Run the provided Transaction. If it fails with a QueryError, roll back.
Decoding rows
Minimal complete definition
Instances
| FromSql Bool Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder Bool Source # | |
| FromSql Double Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Float Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Int16 Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Int32 Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Int64 Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql String Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql ByteString Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql ByteString Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Text Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder Text Source # | |
| FromSql UUID Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder UUID Source # | |
| FromSql Text Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder Text Source # | |
| FromSql Day Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder Day Source # | |
| FromSql TimeOfDay Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Value Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql UTCTime Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSql Oid Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder Oid Source # | |
| FromSql TimeTZ Source # | |
Defined in Preql.Wire.FromSql Methods | |
| FromSqlField a => FromSql (Maybe a) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (Maybe a) Source # | |
| (FromSql a, FromSql b) => FromSql (a, b) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b) Source # | |
| (FromSql a, FromSql b, FromSql c) => FromSql (a, b, c) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d) => FromSql (a, b, c, d) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e) => FromSql (a, b, c, d, e) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f) => FromSql (a, b, c, d, e, f) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g) => FromSql (a, b, c, d, e, f, g) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h) => FromSql (a, b, c, d, e, f, g, h) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i) => FromSql (a, b, c, d, e, f, g, h, i) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j) => FromSql (a, b, c, d, e, f, g, h, i, j) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k) => FromSql (a, b, c, d, e, f, g, h, i, j, k) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t, FromSql u) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t, FromSql u, FromSql v) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t, FromSql u, FromSql v, FromSql w) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t, FromSql u, FromSql v, FromSql w, FromSql x) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x) Source # | |
| (FromSql a, FromSql b, FromSql c, FromSql d, FromSql e, FromSql f, FromSql g, FromSql h, FromSql i, FromSql j, FromSql k, FromSql l, FromSql m, FromSql n, FromSql o, FromSql p, FromSql q, FromSql r, FromSql s, FromSql t, FromSql u, FromSql v, FromSql w, FromSql x, FromSql y) => FromSql (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) Source # | |
Defined in Preql.Wire.FromSql Methods fromSql :: RowDecoder (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y) Source # | |
class FromSqlField a Source #
Minimal complete definition
Instances
Encoding parameters
ToSql a is sufficient to pass a as parameters to a paramaterized query.
Minimal complete definition
Instances
class ToSqlField a Source #
Types which can be encoded to a single Postgres field.
Minimal complete definition
Instances
Errors
data QueryError Source #
Constructors
| ConnectionError Text | |
| DecoderError FieldError | |
| PgTypeMismatch [TypeMismatch] |
Instances
| Eq QueryError Source # | |
Defined in Preql.Wire.Errors | |
| Show QueryError Source # | |
Defined in Preql.Wire.Errors Methods showsPrec :: Int -> QueryError -> ShowS # show :: QueryError -> String # showList :: [QueryError] -> ShowS # | |
| Exception QueryError Source # | |
Defined in Preql.Wire.Errors Methods toException :: QueryError -> SomeException # fromException :: SomeException -> Maybe QueryError # displayException :: QueryError -> String # | |
| ToJSON QueryError Source # | |
Defined in Preql.Wire.Errors Methods toJSON :: QueryError -> Value # toEncoding :: QueryError -> Encoding # toJSONList :: [QueryError] -> Value # toEncodingList :: [QueryError] -> Encoding # | |
| FromJSON QueryError Source # | |
Defined in Preql.Wire.Errors | |
data FieldError Source #
A decoding error with information about the row & column of the result where it occured.
Constructors
| FieldError | |
Fields
| |
Instances
| Eq FieldError Source # | |
Defined in Preql.Wire.Errors | |
| Show FieldError Source # | |
Defined in Preql.Wire.Errors Methods showsPrec :: Int -> FieldError -> ShowS # show :: FieldError -> String # showList :: [FieldError] -> ShowS # | |
| Exception FieldError Source # | |
Defined in Preql.Wire.Errors Methods toException :: FieldError -> SomeException # fromException :: SomeException -> Maybe FieldError # displayException :: FieldError -> String # | |
| ToJSON FieldError Source # | |
Defined in Preql.Wire.Errors Methods toJSON :: FieldError -> Value # toEncoding :: FieldError -> Encoding # toJSONList :: [FieldError] -> Value # toEncodingList :: [FieldError] -> Encoding # | |
| FromJSON FieldError Source # | |
Defined in Preql.Wire.Errors | |
data UnlocatedFieldError Source #
Errors that can occur in decoding a single field.
Constructors
| UnexpectedNull | |
| ParseFailure Text |
Instances
| Eq UnlocatedFieldError Source # | |
Defined in Preql.Wire.Errors Methods (==) :: UnlocatedFieldError -> UnlocatedFieldError -> Bool # (/=) :: UnlocatedFieldError -> UnlocatedFieldError -> Bool # | |
| Show UnlocatedFieldError Source # | |
Defined in Preql.Wire.Errors Methods showsPrec :: Int -> UnlocatedFieldError -> ShowS # show :: UnlocatedFieldError -> String # showList :: [UnlocatedFieldError] -> ShowS # | |
| ToJSON UnlocatedFieldError Source # | |
Defined in Preql.Wire.Errors Methods toJSON :: UnlocatedFieldError -> Value # toEncoding :: UnlocatedFieldError -> Encoding # toJSONList :: [UnlocatedFieldError] -> Value # toEncodingList :: [UnlocatedFieldError] -> Encoding # | |
| FromJSON UnlocatedFieldError Source # | |
Defined in Preql.Wire.Errors Methods parseJSON :: Value -> Parser UnlocatedFieldError # parseJSONList :: Value -> Parser [UnlocatedFieldError] # | |
data TypeMismatch Source #
Constructors
| TypeMismatch | |
Instances
| Eq TypeMismatch Source # | |
Defined in Preql.Wire.Errors | |
| Show TypeMismatch Source # | |
Defined in Preql.Wire.Errors Methods showsPrec :: Int -> TypeMismatch -> ShowS # show :: TypeMismatch -> String # showList :: [TypeMismatch] -> ShowS # | |
| ToJSON TypeMismatch Source # | |
Defined in Preql.Wire.Errors Methods toJSON :: TypeMismatch -> Value # toEncoding :: TypeMismatch -> Encoding # toJSONList :: [TypeMismatch] -> Value # toEncodingList :: [TypeMismatch] -> Encoding # | |
| FromJSON TypeMismatch Source # | |
Defined in Preql.Wire.Errors | |
encoding & decoding to wire format
module Preql.Wire