module Database.Persist.SqlBackend
(
SqlBackend
, mkSqlBackend
, MkSqlBackendArgs(..)
, getEscapedFieldName
, getEscapedRawName
, getEscapeRawNameFunction
, getConnLimitOffset
, getConnUpsertSql
, setConnMaxParams
, setConnRepsertManySql
, setConnInsertManySql
, setConnUpsertSql
, setConnPutManySql
) where
import Control.Monad.Reader
import Data.Text (Text)
import Database.Persist.Class.PersistStore (BackendCompatible(..))
import Database.Persist.SqlBackend.Internal
import qualified Database.Persist.SqlBackend.Internal as SqlBackend
(SqlBackend(..))
import Database.Persist.SqlBackend.Internal.MkSqlBackend as Mk (MkSqlBackendArgs(..))
import Database.Persist.Types.Base
import Database.Persist.Names
import Database.Persist.SqlBackend.Internal.InsertSqlResult
import Data.List.NonEmpty (NonEmpty)
getEscapedFieldName
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> FieldNameDB -> m Text
getEscapedFieldName :: 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 (f :: * -> *) a. Applicative f => a -> f a
pure (FieldNameDB -> Text
func FieldNameDB
fieldName)
getEscapedRawName
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> Text -> m Text
getEscapedRawName :: 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 (f :: * -> *) a. Applicative f => a -> f a
pure (Text -> Text
func Text
name)
getEscapeRawNameFunction
:: (BackendCompatible SqlBackend backend, MonadReader backend m)
=> m (Text -> Text)
getEscapeRawNameFunction :: 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 :: (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 (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 :: 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)
setConnMaxParams
:: Int
-> SqlBackend
-> SqlBackend
setConnMaxParams :: Int -> SqlBackend -> SqlBackend
setConnMaxParams Int
i SqlBackend
sb =
SqlBackend
sb { connMaxParams :: Maybe Int
connMaxParams = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
i }
setConnRepsertManySql
:: (EntityDef -> Int -> Text)
-> SqlBackend
-> SqlBackend
setConnRepsertManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
setConnRepsertManySql EntityDef -> Int -> Text
mkQuery SqlBackend
sb =
SqlBackend
sb { connRepsertManySql :: Maybe (EntityDef -> Int -> Text)
connRepsertManySql = (EntityDef -> Int -> Text) -> Maybe (EntityDef -> Int -> Text)
forall a. a -> Maybe a
Just EntityDef -> Int -> Text
mkQuery }
setConnInsertManySql
:: (EntityDef -> [[PersistValue]] -> InsertSqlResult)
-> SqlBackend
-> SqlBackend
setConnInsertManySql :: (EntityDef -> [[PersistValue]] -> InsertSqlResult)
-> SqlBackend -> SqlBackend
setConnInsertManySql EntityDef -> [[PersistValue]] -> InsertSqlResult
mkQuery SqlBackend
sb =
SqlBackend
sb { connInsertManySql :: Maybe (EntityDef -> [[PersistValue]] -> InsertSqlResult)
connInsertManySql = (EntityDef -> [[PersistValue]] -> InsertSqlResult)
-> Maybe (EntityDef -> [[PersistValue]] -> InsertSqlResult)
forall a. a -> Maybe a
Just EntityDef -> [[PersistValue]] -> InsertSqlResult
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 :: Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
connUpsertSql = (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
-> Maybe
(EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)
forall a. a -> Maybe a
Just EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text
mkQuery }
setConnPutManySql
:: (EntityDef -> Int -> Text)
-> SqlBackend
-> SqlBackend
setConnPutManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
setConnPutManySql EntityDef -> Int -> Text
mkQuery SqlBackend
sb =
SqlBackend
sb { connPutManySql :: Maybe (EntityDef -> Int -> Text)
connPutManySql = (EntityDef -> Int -> Text) -> Maybe (EntityDef -> Int -> Text)
forall a. a -> Maybe a
Just EntityDef -> Int -> Text
mkQuery }