{-# LANGUAGE GeneralizedNewtypeDeriving, CPP #-}
module TsWeb.Db.Beam
( module Database.Beam
, RoPg(..)
, ReadOnlyM(..)
, Sel
) where
import qualified Database.Beam as Beam
import Database.Beam hiding (runSelectReturningList, runSelectReturningOne)
#if MIN_VERSION_beam_core(0, 8, 0)
import Database.Beam.Postgres (Pg, Postgres)
#else
import Database.Beam.Postgres (Pg, Postgres, PgSelectSyntax)
#endif
#if MIN_VERSION_beam_core(0, 8, 0)
type Sel a = SqlSelect Postgres a
#else
type Sel a = SqlSelect PgSelectSyntax a
#endif
class ReadOnlyM m where
runSelectReturningOne ::
FromBackendRow Postgres a => Sel a -> m (Maybe a)
runSelectReturningList ::
FromBackendRow Postgres a => Sel a -> m [a]
instance ReadOnlyM Pg where
runSelectReturningOne = Beam.runSelectReturningOne
runSelectReturningList = Beam.runSelectReturningList
newtype RoPg a = RoPg
{ _fromRoPg :: Pg a
} deriving (Functor, Applicative, Monad)
instance ReadOnlyM RoPg where
runSelectReturningOne = RoPg . Beam.runSelectReturningOne
runSelectReturningList = RoPg . Beam.runSelectReturningList