| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
Database.Persist.SqlBackend
Description
This module contains types and information necessary for a SQL database.
 Database support libraries, like persistent-postgresql, will be responsible
 for constructing these values.
Synopsis
- data SqlBackend
- mkSqlBackend :: MkSqlBackendArgs -> SqlBackend
- data MkSqlBackendArgs = MkSqlBackendArgs {- connPrepare :: Text -> IO Statement
- connInsertSql :: EntityDef -> [PersistValue] -> InsertSqlResult
- connStmtMap :: IORef (Map Text Statement)
- connClose :: IO ()
- connMigrateSql :: [EntityDef] -> (Text -> IO Statement) -> EntityDef -> IO (Either [Text] [(Bool, Text)])
- connBegin :: (Text -> IO Statement) -> Maybe IsolationLevel -> IO ()
- connCommit :: (Text -> IO Statement) -> IO ()
- connRollback :: (Text -> IO Statement) -> IO ()
- connEscapeFieldName :: FieldNameDB -> Text
- connEscapeTableName :: EntityDef -> Text
- connEscapeRawName :: Text -> Text
- connNoLimit :: Text
- connRDBMS :: Text
- connLimitOffset :: (Int, Int) -> Text -> Text
- connLogFunc :: LogFunc
 
- data SqlBackendHooks
- emptySqlBackendHooks :: SqlBackendHooks
- getRDBMS :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m Text
- getEscapedFieldName :: (BackendCompatible SqlBackend backend, MonadReader backend m) => FieldNameDB -> m Text
- getEscapedRawName :: (BackendCompatible SqlBackend backend, MonadReader backend m) => Text -> m Text
- getEscapeRawNameFunction :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m (Text -> Text)
- getConnLimitOffset :: (BackendCompatible SqlBackend backend, MonadReader backend m) => (Int, Int) -> Text -> m Text
- getConnUpsertSql :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m (Maybe (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text))
- getConnVault :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m Vault
- getConnHooks :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m SqlBackendHooks
- setConnMaxParams :: Int -> SqlBackend -> SqlBackend
- setConnRepsertManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
- setConnInsertManySql :: (EntityDef -> [[PersistValue]] -> InsertSqlResult) -> SqlBackend -> SqlBackend
- setConnUpsertSql :: (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text) -> SqlBackend -> SqlBackend
- setConnPutManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend
- setConnVault :: Vault -> SqlBackend -> SqlBackend
- modifyConnVault :: (Vault -> Vault) -> SqlBackend -> SqlBackend
- setConnHooks :: SqlBackendHooks -> SqlBackend -> SqlBackend
The type and construction
data SqlBackend #
A SqlBackend represents a handle or connection to a database. It
 contains functions and values that allow databases to have more
 optimized implementations, as well as references that benefit
 performance and sharing.
Instead of using the SqlBackend constructor directly, use the
 mkSqlBackend function.
A SqlBackend is *not* thread-safe. You should not assume that
 a SqlBackend can be shared among threads and run concurrent queries.
 This *will* result in problems. Instead, you should create a Pool
 SqlBackendConnectionPool, and pass that around in
 multi-threaded applications.
To run actions in the persistent library, you should use the
 runSqlConn function. If you're using a multithreaded application, use
 the runSqlPool function.
Instances
mkSqlBackend :: MkSqlBackendArgs -> SqlBackend #
A function for creating a value of the SqlBackend type. You should prefer
 to use this instead of the constructor for SqlBackend, because default
 values for this will be provided for new fields on the record when new
 functionality is added.
Since: 2.13.0.0
data MkSqlBackendArgs #
This type shares many of the same field names as the SqlBackend type.
 It's useful for library authors to use this when migrating from using the
 SqlBackend constructor directly to the mkSqlBackend function.
This type will only contain required fields for constructing a SqlBackend.
 For fields that aren't present on this record, you'll want to use the various
 set functions or
Since: 2.13.0.0
Constructors
| MkSqlBackendArgs | |
| Fields 
 | |
data SqlBackendHooks #
Utilities
The functions exported here are a bit more general than the record accessors.
 The easiest way to use them is to provide the SqlBackend directly to the
 function. However, you can also use them in a ReaderT context, and you can
 even use them with any backend type tht has a BackendCompatible
 SqlBackend backend
SqlBackend Getters
getRDBMS :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m Text #
Get a tag displaying what database the SqlBackend is for. Can be
 used to differentiate features in downstream libraries for different
 database backends.
 @since 2.13.3.0
getEscapedFieldName :: (BackendCompatible SqlBackend backend, MonadReader backend m) => FieldNameDB -> m Text #
This function can be used directly with a SqlBackend to escape
 a FieldNameDB.
let conn :: SqlBackend getEscapedFieldName (FieldNameDB "asdf") conn
Alternatively, you can use it in a ReaderT SqlBackendSqlPersistT:
query :: SqlPersistM Text
query = do
    field <- getEscapedFieldName (FieldNameDB "asdf")
    pure field
Since: 2.13.0.0
getEscapedRawName :: (BackendCompatible SqlBackend backend, MonadReader backend m) => Text -> m Text #
This function can be used directly with a SqlBackend to escape
 a raw Text.
let conn :: SqlBackend getEscapedRawName (FieldNameDB "asdf") conn
Alternatively, you can use it in a ReaderT SqlBackendSqlPersistT:
query :: SqlPersistM Text
query = do
    field <- getEscapedRawName (FieldNameDB "asdf")
    pure field
Since: 2.13.0.0
getEscapeRawNameFunction :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m (Text -> Text) #
Return the function for escaping a raw name.
Since: 2.13.0.0
Arguments
| :: (BackendCompatible SqlBackend backend, MonadReader backend m) | |
| => (Int, Int) | The  | 
| -> Text | The SQL query that the LIMIT/OFFSET clause will be attached to. | 
| -> m Text | 
Decorate the given SQL query with the (LIMIT, OFFSET) specified.
Since: 2.13.0.0
getConnUpsertSql :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m (Maybe (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text)) #
Retrieve the function for generating an upsert statement, if the backend supports it.
Since: 2.13.0.0
getConnVault :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m Vault #
Retrieve the vault from the provided database backend.
Since: 2.13.3.0
getConnHooks :: (BackendCompatible SqlBackend backend, MonadReader backend m) => m SqlBackendHooks #
Retrieve instrumentation hooks from the provided database backend.
Since: 2.13.3.0
SqlBackend Setters
setConnMaxParams :: Int -> SqlBackend -> SqlBackend #
Set the maximum parameters that may be issued in a given SQL query. This should be used only if the database backend have this limitation.
Since: 2.13.0.0
setConnRepsertManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend #
Set the connRepsertManySql field on the SqlBackend. This should only be
 set by the database backend library. If this is not set, a slow default will
 be used.
Since: 2.13.0.0
setConnInsertManySql :: (EntityDef -> [[PersistValue]] -> InsertSqlResult) -> SqlBackend -> SqlBackend #
Set the connInsertManySql field on the SqlBackend. This should only be
 used by the database backend library to provide an efficient implementation
 of a bulk insert function. If this is not set, a slow default will be used.
Since: 2.13.0.0
setConnUpsertSql :: (EntityDef -> NonEmpty (FieldNameHS, FieldNameDB) -> Text -> Text) -> SqlBackend -> SqlBackend #
Set the connUpsertSql field on the SqlBackend. This should only be used
 by the database backend library to provide an efficient implementation of
 a bulk insert function. If this is not set, a slow default will be used.
Since: 2.13.0.0
setConnPutManySql :: (EntityDef -> Int -> Text) -> SqlBackend -> SqlBackend #
Set the 'connPutManySql field on the SqlBackend. This should only be used
 by the database backend library to provide an efficient implementation of
 a bulk insert function. If this is not set, a slow default will be used.
Since: 2.13.0.0
setConnVault :: Vault -> SqlBackend -> SqlBackend #
Set the vault on the provided database backend.
Since: 2.13.0
modifyConnVault :: (Vault -> Vault) -> SqlBackend -> SqlBackend #
Modify the vault on the provided database backend.
Since: 2.13.0
setConnHooks :: SqlBackendHooks -> SqlBackend -> SqlBackend #
Set hooks on the provided database backend.
Since: 2.13.0