postgresql-query-3.1.0: Sql interpolating quasiquote plus some kind of primitive ORM using it

Safe HaskellNone
LanguageHaskell2010

Database.PostgreSQL.Query.Types

Contents

Synopsis

Query execution

class MonadBase IO m => HasPostgres m where Source #

Instances of this typeclass can acquire connection and pass it to computation. It can be reader of pool of connections or just reader of connection

Minimal complete definition

withPGConnection

Methods

withPGConnection :: (Connection -> m a) -> m a Source #

Instances

HasPostgres m => HasPostgres (MaybeT m) Source # 

Methods

withPGConnection :: (Connection -> MaybeT m a) -> MaybeT m a Source #

MonadBase IO m => HasPostgres (PgMonadT m) Source # 
HasPostgres m => HasPostgres (IdentityT * m) Source # 
(HasPostgres m, Monoid w) => HasPostgres (WriterT w m) Source # 

Methods

withPGConnection :: (Connection -> WriterT w m a) -> WriterT w m a Source #

(HasPostgres m, Monoid w) => HasPostgres (WriterT w m) Source # 

Methods

withPGConnection :: (Connection -> WriterT w m a) -> WriterT w m a Source #

HasPostgres m => HasPostgres (StateT s m) Source # 

Methods

withPGConnection :: (Connection -> StateT s m a) -> StateT s m a Source #

HasPostgres m => HasPostgres (StateT s m) Source # 

Methods

withPGConnection :: (Connection -> StateT s m a) -> StateT s m a Source #

HasPostgres m => HasPostgres (EitherT e m) Source # 

Methods

withPGConnection :: (Connection -> EitherT e m a) -> EitherT e m a Source #

(MonadBase IO m, MonadBaseControl IO m, HGettable els (Pool Connection)) => HasPostgres (HReaderT els m) Source # 

Methods

withPGConnection :: (Connection -> HReaderT els m a) -> HReaderT els m a Source #

HasPostgres m => HasPostgres (ExceptT e m) Source # 

Methods

withPGConnection :: (Connection -> ExceptT e m a) -> ExceptT e m a Source #

HasPostgres m => HasPostgres (ReaderT * r m) Source # 

Methods

withPGConnection :: (Connection -> ReaderT * r m a) -> ReaderT * r m a Source #

HasPostgres m => HasPostgres (ContT * r m) Source # 

Methods

withPGConnection :: (Connection -> ContT * r m a) -> ContT * r m a Source #

class TransactionSafe m Source #

Empty typeclass signing monad in which transaction is safe. i.e. PgMonadT have this instance, but some other monad giving connection from e.g. connection pool is not.

newtype PgMonadT m a Source #

Reader of connection. Has instance of HasPostgres. So if you have a connection you can run queries in this monad using runPgMonadT. Or you can use this transformer to run sequence of queries using same connection with launchPG.

Constructors

PgMonadT 

Instances

MonadTrans PgMonadT Source # 

Methods

lift :: Monad m => m a -> PgMonadT m a #

MonadTransControl PgMonadT Source # 

Associated Types

type StT (PgMonadT :: (* -> *) -> * -> *) a :: * #

Methods

liftWith :: Monad m => (Run PgMonadT -> m a) -> PgMonadT m a #

restoreT :: Monad m => m (StT PgMonadT a) -> PgMonadT m a #

MonadBaseControl b m => MonadBaseControl b (PgMonadT m) Source # 

Associated Types

type StM (PgMonadT m :: * -> *) a :: * #

Methods

liftBaseWith :: (RunInBase (PgMonadT m) b -> b a) -> PgMonadT m a #

restoreM :: StM (PgMonadT m) a -> PgMonadT m a #

MonadBase b m => MonadBase b (PgMonadT m) Source # 

Methods

liftBase :: b α -> PgMonadT m α #

MonadError e m => MonadError e (PgMonadT m) Source # 

Methods

throwError :: e -> PgMonadT m a #

catchError :: PgMonadT m a -> (e -> PgMonadT m a) -> PgMonadT m a #

MonadReader r m => MonadReader r (PgMonadT m) Source # 

Methods

ask :: PgMonadT m r #

local :: (r -> r) -> PgMonadT m a -> PgMonadT m a #

reader :: (r -> a) -> PgMonadT m a #

MonadState s m => MonadState s (PgMonadT m) Source # 

Methods

get :: PgMonadT m s #

put :: s -> PgMonadT m () #

state :: (s -> (a, s)) -> PgMonadT m a #

MonadWriter w m => MonadWriter w (PgMonadT m) Source # 

Methods

writer :: (a, w) -> PgMonadT m a #

tell :: w -> PgMonadT m () #

listen :: PgMonadT m a -> PgMonadT m (a, w) #

pass :: PgMonadT m (a, w -> w) -> PgMonadT m a #

Monad m => Monad (PgMonadT m) Source # 

Methods

(>>=) :: PgMonadT m a -> (a -> PgMonadT m b) -> PgMonadT m b #

(>>) :: PgMonadT m a -> PgMonadT m b -> PgMonadT m b #

return :: a -> PgMonadT m a #

fail :: String -> PgMonadT m a #

Functor m => Functor (PgMonadT m) Source # 

Methods

fmap :: (a -> b) -> PgMonadT m a -> PgMonadT m b #

(<$) :: a -> PgMonadT m b -> PgMonadT m a #

MonadFix m => MonadFix (PgMonadT m) Source # 

Methods

mfix :: (a -> PgMonadT m a) -> PgMonadT m a #

Applicative m => Applicative (PgMonadT m) Source # 

Methods

pure :: a -> PgMonadT m a #

(<*>) :: PgMonadT m (a -> b) -> PgMonadT m a -> PgMonadT m b #

(*>) :: PgMonadT m a -> PgMonadT m b -> PgMonadT m b #

(<*) :: PgMonadT m a -> PgMonadT m b -> PgMonadT m a #

MonadPlus m => MonadPlus (PgMonadT m) Source # 

Methods

mzero :: PgMonadT m a #

mplus :: PgMonadT m a -> PgMonadT m a -> PgMonadT m a #

MonadIO m => MonadIO (PgMonadT m) Source # 

Methods

liftIO :: IO a -> PgMonadT m a #

Alternative m => Alternative (PgMonadT m) Source # 

Methods

empty :: PgMonadT m a #

(<|>) :: PgMonadT m a -> PgMonadT m a -> PgMonadT m a #

some :: PgMonadT m a -> PgMonadT m [a] #

many :: PgMonadT m a -> PgMonadT m [a] #

MonadThrow m => MonadThrow (PgMonadT m) Source # 

Methods

throwM :: Exception e => e -> PgMonadT m a #

MonadCatch m => MonadCatch (PgMonadT m) Source # 

Methods

catch :: Exception e => PgMonadT m a -> (e -> PgMonadT m a) -> PgMonadT m a #

MonadMask m => MonadMask (PgMonadT m) Source # 

Methods

mask :: ((forall a. PgMonadT m a -> PgMonadT m a) -> PgMonadT m b) -> PgMonadT m b #

uninterruptibleMask :: ((forall a. PgMonadT m a -> PgMonadT m a) -> PgMonadT m b) -> PgMonadT m b #

MonadHReader m => MonadHReader (PgMonadT m) Source # 

Associated Types

type MHRElements (PgMonadT m :: * -> *) :: [*] #

MonadLogger m => MonadLogger (PgMonadT m) Source # 

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> PgMonadT m () #

MonadCont m => MonadCont (PgMonadT m) Source # 

Methods

callCC :: ((a -> PgMonadT m b) -> PgMonadT m a) -> PgMonadT m a #

TransactionSafe (PgMonadT m) Source # 
MonadBase IO m => HasPostgres (PgMonadT m) Source # 
type StT PgMonadT a Source # 
type MHRElements (PgMonadT m) Source # 
type StM (PgMonadT m) a Source # 
type StM (PgMonadT m) a = StM (ReaderT * Connection m) a

launchPG :: HasPostgres m => PgMonadT m a -> m a Source #

If your monad have instance of HasPostgres you maybe dont need this function, unless your instance use withPGPool which acquires connection from pool for each query. If you want to run sequence of queries using same connection you need this function

Auxiliary types

data Qp Source #

Special constructor to perform old-style query interpolation

Constructors

ToRow row => Qp Query row 

newtype FN Source #

Dot-separated field name. Each element in nested list will be properly quoted and separated by dot. It also have instance of ToSqlBuilder and IsString so you can:

>>> let a = "hello" :: FN
>>> a
FN ["hello"]
>>> let b = "user.name" :: FN
>>> b
FN ["user","name"]
>>> let n = "u.name" :: FN
>>> runSqlBuilder c $ toSqlBuilder n
"\"u\".\"name\""
>>> ("user" <> "name") :: FN
FN ["user","name"]
>>> let a = "name" :: FN
>>> let b = "email" :: FN
>>> runSqlBuilder c [sqlExp|^{"u" <> a} = 'name', ^{"e" <> b} = 'email'|]
"\"u\".\"name\" = 'name', \"e\".\"email\" = 'email'"

Constructors

FN [Text] 

Instances

Eq FN Source # 

Methods

(==) :: FN -> FN -> Bool #

(/=) :: FN -> FN -> Bool #

Ord FN Source # 

Methods

compare :: FN -> FN -> Ordering #

(<) :: FN -> FN -> Bool #

(<=) :: FN -> FN -> Bool #

(>) :: FN -> FN -> Bool #

(>=) :: FN -> FN -> Bool #

max :: FN -> FN -> FN #

min :: FN -> FN -> FN #

Show FN Source # 

Methods

showsPrec :: Int -> FN -> ShowS #

show :: FN -> String #

showList :: [FN] -> ShowS #

IsString FN Source # 

Methods

fromString :: String -> FN #

Generic FN Source # 

Associated Types

type Rep FN :: * -> * #

Methods

from :: FN -> Rep FN x #

to :: Rep FN x -> FN #

Monoid FN Source # 

Methods

mempty :: FN #

mappend :: FN -> FN -> FN #

mconcat :: [FN] -> FN #

Lift FN Source # 

Methods

lift :: FN -> Q Exp #

ToSqlBuilder FN Source # 
type Rep FN Source # 
type Rep FN = D1 (MetaData "FN" "Database.PostgreSQL.Query.Types" "postgresql-query-3.1.0-JIgOGuFIL8OH5talOVcy5c" True) (C1 (MetaCons "FN" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [Text])))

textFN :: Text -> FN Source #

Single field to FN

>>> textFN "hello"
FN ["hello"]
>>> textFN "user.name"
FN ["user.name"]

Note that it does not split string to parts by point like instance of IsString does

newtype MarkedRow Source #

Marked row is list of pairs of field name and some sql expression. Used to generate queries like:

name = name AND size = 10 AND length = 20

or

UPDATE tbl SET name = name, size = 10, lenght = 20

Constructors

MR 

Fields

Instances

Generic MarkedRow Source # 

Associated Types

type Rep MarkedRow :: * -> * #

Monoid MarkedRow Source # 
ToMarkedRow MarkedRow Source # 
type Rep MarkedRow Source # 
type Rep MarkedRow = D1 (MetaData "MarkedRow" "Database.PostgreSQL.Query.Types" "postgresql-query-3.1.0-JIgOGuFIL8OH5talOVcy5c" True) (C1 (MetaCons "MR" PrefixI True) (S1 (MetaSel (Just Symbol "unMR") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(FN, SqlBuilder)])))

mrToBuilder Source #

Arguments

:: SqlBuilder

Builder to intercalate with

-> MarkedRow 
-> SqlBuilder 

Turns marked row to query intercalating it with other builder

>>> runSqlBuilder c $ mrToBuilder "AND" $ MR [("name", mkValue "petr"), ("email", mkValue "foo@bar.com")]
" \"name\" = 'petr' AND \"email\" = 'foo@bar.com' "

class ToMarkedRow a where Source #

Minimal complete definition

toMarkedRow

Methods

toMarkedRow :: a -> MarkedRow Source #

generate list of pairs (field name, field value)