module Database.Persist.SqlBackend
(
SqlBackend
, mkSqlBackend
, MkSqlBackendArgs(..)
, SqlBackendHooks
, emptySqlBackendHooks
, getRDBMS
, getEscapedFieldName
, getEscapedRawName
, getEscapeRawNameFunction
, getConnLimitOffset
, getConnUpsertSql
, getConnVault
, getConnHooks
, setConnMaxParams
, setConnRepsertManySql
, setConnInsertManySql
, setConnUpsertSql
, setConnPutManySql
, setConnVault
, modifyConnVault
, setConnHooks
) where
import Control.Monad.Reader
import Data.List.NonEmpty (NonEmpty)
import Data.Text (Text)
import Data.Vault.Strict (Vault)
import Database.Persist.Class.PersistStore (BackendCompatible(..))
import Database.Persist.Names
import Database.Persist.SqlBackend.Internal
import qualified Database.Persist.SqlBackend.Internal as SqlBackend
(SqlBackend(..))
import Database.Persist.SqlBackend.Internal.InsertSqlResult
import Database.Persist.SqlBackend.Internal.MkSqlBackend as Mk
(MkSqlBackendArgs(..))
import Database.Persist.Types.Base
getEscapedFieldName
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> FieldNameDB -> m Text
getEscapedFieldName :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
FieldNameDB -> m Text
getEscapedFieldName FieldNameDB
fieldName = do
FieldNameDB -> Text
func <- (backend -> FieldNameDB -> Text) -> m (FieldNameDB -> Text)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> FieldNameDB -> Text
SqlBackend.connEscapeFieldName (SqlBackend -> FieldNameDB -> Text)
-> (backend -> SqlBackend) -> backend -> FieldNameDB -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
Text -> m Text
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (FieldNameDB -> Text
func FieldNameDB
fieldName)
getEscapedRawName
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> Text -> m Text
getEscapedRawName :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
Text -> m Text
getEscapedRawName Text
name = do
Text -> Text
func <- m (Text -> Text)
forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m (Text -> Text)
getEscapeRawNameFunction
Text -> m Text
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> Text
func Text
name)
getEscapeRawNameFunction
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m (Text -> Text)
getEscapeRawNameFunction :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m (Text -> Text)
getEscapeRawNameFunction = do
(backend -> Text -> Text) -> m (Text -> Text)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> Text -> Text
SqlBackend.connEscapeRawName (SqlBackend -> Text -> Text)
-> (backend -> SqlBackend) -> backend -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
getConnLimitOffset
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> (Int, Int)
-> Text
-> m Text
getConnLimitOffset :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
(Int, Int) -> Text -> m Text
getConnLimitOffset (Int, Int)
limitOffset Text
sql = do
(Int, Int) -> Text -> Text
func <- (backend -> (Int, Int) -> Text -> Text)
-> m ((Int, Int) -> Text -> Text)
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> (Int, Int) -> Text -> Text
SqlBackend.connLimitOffset (SqlBackend -> (Int, Int) -> Text -> Text)
-> (backend -> SqlBackend) -> backend -> (Int, Int) -> Text -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
Text -> m Text
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> m Text) -> Text -> m Text
forall a b. (a -> b) -> a -> b
$ (Int, Int) -> Text -> Text
func (Int, Int)
limitOffset Text
sql
getConnUpsertSql
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m (Maybe (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
getConnUpsertSql :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m (Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
getConnUpsertSql = do
(backend
-> Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
-> m (Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend
-> Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
SqlBackend.connUpsertSql (SqlBackend
-> Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
-> (backend -> SqlBackend)
-> backend
-> Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
getConnVault
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m Vault
getConnVault :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m Vault
getConnVault = do
(backend -> Vault) -> m Vault
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> Vault
SqlBackend.connVault (SqlBackend -> Vault)
-> (backend -> SqlBackend) -> backend -> Vault
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
getConnHooks
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m SqlBackendHooks
getConnHooks :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m SqlBackendHooks
getConnHooks = do
(backend -> SqlBackendHooks) -> m SqlBackendHooks
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> SqlBackendHooks
SqlBackend.connHooks (SqlBackend -> SqlBackendHooks)
-> (backend -> SqlBackend) -> backend -> SqlBackendHooks
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
getRDBMS
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m Text
getRDBMS :: forall backend (m :: * -> *).
(BackendCompatible SqlBackend backend, MonadReader backend m) =>
m Text
getRDBMS = do
(backend -> Text) -> m Text
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks (SqlBackend -> Text
SqlBackend.connRDBMS (SqlBackend -> Text) -> (backend -> SqlBackend) -> backend -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. backend -> SqlBackend
forall sup sub. BackendCompatible sup sub => sub -> sup
projectBackend)
setConnMaxParams
:: Int
-> SqlBackend
-> SqlBackend
setConnMaxParams :: Int -> SqlBackend -> SqlBackend
setConnMaxParams Int
i SqlBackend
sb =
SqlBackend
sb { connMaxParams = Just i }
setConnRepsertManySql
:: (EntityDef -> Int -> Text)
-> SqlBackend
-> SqlBackend
setConnRepsertManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
setConnRepsertManySql EntityDef -> Int -> Text
mkQuery SqlBackend
sb =
SqlBackend
sb { connRepsertManySql = Just mkQuery }
setConnInsertManySql
:: (EntityDef -> [[PersistValue]] -> InsertSqlResult)
-> SqlBackend
-> SqlBackend
setConnInsertManySql :: (EntityDef -> [[PersistValue]] -> InsertSqlResult)
-> SqlBackend -> SqlBackend
setConnInsertManySql EntityDef -> [[PersistValue]] -> InsertSqlResult
mkQuery SqlBackend
sb =
SqlBackend
sb { connInsertManySql = Just mkQuery }
setConnUpsertSql
:: (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
-> SqlBackend
-> SqlBackend
setConnUpsertSql :: (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
-> SqlBackend -> SqlBackend
setConnUpsertSql EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text
mkQuery SqlBackend
sb =
SqlBackend
sb { connUpsertSql = Just mkQuery }
setConnPutManySql
:: (EntityDef -> Int -> Text)
-> SqlBackend
-> SqlBackend
setConnPutManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
setConnPutManySql EntityDef -> Int -> Text
mkQuery SqlBackend
sb =
SqlBackend
sb { connPutManySql = Just mkQuery }
setConnVault :: Vault -> SqlBackend -> SqlBackend
setConnVault :: Vault -> SqlBackend -> SqlBackend
setConnVault Vault
vault SqlBackend
sb =
SqlBackend
sb { connVault = vault }
modifyConnVault :: (Vault -> Vault) -> SqlBackend -> SqlBackend
modifyConnVault :: (Vault -> Vault) -> SqlBackend -> SqlBackend
modifyConnVault Vault -> Vault
f SqlBackend
sb =
SqlBackend
sb { connVault = f $ connVault sb }
setConnHooks :: SqlBackendHooks -> SqlBackend -> SqlBackend
setConnHooks :: SqlBackendHooks -> SqlBackend -> SqlBackend
setConnHooks SqlBackendHooks
hooks SqlBackend
sb =
SqlBackend
sb { connHooks = hooks }