module Database.Persist.Relational
( runQuery
, rawQuery
, mkHrrInstances
, defineTableFromPersistent
, defineTableFromPersistentWithConfig
, defineFromToSqlPersistValue
, defaultConfig
, ToPersistEntity (..)
) where
import Control.Monad.Reader (MonadReader)
import Control.Monad.Trans.Resource (MonadResource)
import Data.Conduit (Source, ($=))
import qualified Data.Conduit.List as CL
import qualified Data.Text as T
import Database.Persist
import Database.Persist.Relational.Instances ()
import Database.Persist.Relational.TH
import Database.Persist.Relational.ToPersistEntity
import Database.Persist.Sql (SqlBackend)
import qualified Database.Persist.Sql as PersistSql
import Database.Record (ToSql, recordToSql, runFromRecord, runToRecord)
import Database.Relational.Query
runQuery :: ( MonadResource m
, MonadReader env m
#if MIN_VERSION_persistent(2, 5, 0)
, HasPersistBackend env
, BaseBackend env ~ SqlBackend
#else
, HasPersistBackend env SqlBackend
#endif
, ToSql PersistValue p
, ToPersistEntity a b
)
=> Query p a
-> p
-> Source m b
runQuery q vals = rawQuery q vals $= CL.map (runToRecord recordFromSql')
rawQuery :: ( MonadResource m
, MonadReader env m
#if MIN_VERSION_persistent(2, 5, 0)
, HasPersistBackend env
, BaseBackend env ~ SqlBackend
#else
, HasPersistBackend env SqlBackend
#endif
, ToSql PersistValue p
)
=> Query p a
-> p
-> Source m [PersistValue]
rawQuery q vals = PersistSql.rawQuery queryTxt params
where
queryTxt = T.pack . untypeQuery $ q
params = runFromRecord recordToSql vals