packages feed

persistent-sqlite 2.11.1.0 → 2.12.0.0

raw patch · 4 files changed

+131/−92 lines, 4 filesdep −persistent-templatedep ~persistentPVP ok

version bump matches the API change (PVP)

Dependencies removed: persistent-template

Dependency ranges changed: persistent

API changes (from Hackage documentation)

- Database.Persist.Sqlite: instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistStore.BackendKey b) => Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistStore.BackendKey b) => Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistStore.BackendKey b) => Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistQuery.PersistQueryRead b => Database.Persist.Class.PersistQuery.PersistQueryRead (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistQuery.PersistQueryWrite b => Database.Persist.Class.PersistQuery.PersistQueryWrite (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistStore.PersistStoreRead b => Database.Persist.Class.PersistStore.PersistStoreRead (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistStore.PersistStoreWrite b => Database.Persist.Class.PersistStore.PersistStoreWrite (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistUnique.PersistUniqueRead b => Database.Persist.Class.PersistUnique.PersistUniqueRead (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Class.PersistUnique.PersistUniqueWrite b => Database.Persist.Class.PersistUnique.PersistUniqueWrite (Database.Persist.Sqlite.RawSqlite b)
- Database.Persist.Sqlite: instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistStore.BackendKey b) => Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Classes.Eq (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Classes.Eq (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Classes.Ord (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Classes.Ord (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Enum.Bounded (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Enum.Bounded (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Enum.Enum (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Enum.Enum (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Num.Num (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Num.Num (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Read.Read (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Read.Read (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Real.Integral (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Real.Integral (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Real.Real (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Real.Real (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: instance GHC.Show.Show (Database.Persist.Class.PersistStore.BackendKey b) => GHC.Show.Show (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistQuery.PersistQueryRead b) => Database.Persist.Class.PersistQuery.PersistQueryRead (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistQuery.PersistQueryWrite b) => Database.Persist.Class.PersistQuery.PersistQueryWrite (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistStore.PersistStoreRead b) => Database.Persist.Class.PersistStore.PersistStoreRead (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistStore.PersistStoreWrite b) => Database.Persist.Class.PersistStore.PersistStoreWrite (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistUnique.PersistUniqueRead b) => Database.Persist.Class.PersistUnique.PersistUniqueRead (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.HasPersistBackend b, Database.Persist.Class.PersistUnique.PersistUniqueWrite b) => Database.Persist.Class.PersistUnique.PersistUniqueWrite (Database.Persist.Sqlite.RawSqlite b)
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistStore.BackendKey b)) => Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistStore.BackendKey b)) => Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistStore.BackendKey b)) => Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistStore.BackendKey b)) => Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Classes.Eq (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Classes.Eq (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Classes.Ord (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Classes.Ord (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Enum.Bounded (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Enum.Bounded (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Enum.Enum (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Enum.Enum (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Num.Num (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Num.Num (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Read.Read (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Read.Read (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Real.Integral (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Real.Integral (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Real.Real (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Real.Real (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
+ Database.Persist.Sqlite: instance (Database.Persist.Class.PersistStore.PersistCore b, Database.Persist.Class.PersistStore.PersistCore (Database.Persist.Sqlite.RawSqlite b), GHC.Show.Show (Database.Persist.Class.PersistStore.BackendKey b)) => GHC.Show.Show (Database.Persist.Class.PersistStore.BackendKey (Database.Persist.Sqlite.RawSqlite b))
- Database.Persist.Sqlite: createRawSqlitePoolFromInfo :: (MonadLogger m, MonadUnliftIO m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m ()) -> Int -> m (Pool (RawSqlite SqlBackend))
+ Database.Persist.Sqlite: createRawSqlitePoolFromInfo :: (MonadLoggerIO m, MonadUnliftIO m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m ()) -> Int -> m (Pool (RawSqlite SqlBackend))
- Database.Persist.Sqlite: createRawSqlitePoolFromInfo_ :: (MonadLogger m, MonadUnliftIO m) => SqliteConnectionInfo -> Int -> m (Pool (RawSqlite SqlBackend))
+ Database.Persist.Sqlite: createRawSqlitePoolFromInfo_ :: (MonadLoggerIO m, MonadUnliftIO m) => SqliteConnectionInfo -> Int -> m (Pool (RawSqlite SqlBackend))
- Database.Persist.Sqlite: createSqlitePool :: (MonadLogger m, MonadUnliftIO m) => Text -> Int -> m (Pool SqlBackend)
+ Database.Persist.Sqlite: createSqlitePool :: (MonadLoggerIO m, MonadUnliftIO m) => Text -> Int -> m (Pool SqlBackend)
- Database.Persist.Sqlite: createSqlitePoolFromInfo :: (MonadLogger m, MonadUnliftIO m) => SqliteConnectionInfo -> Int -> m (Pool SqlBackend)
+ Database.Persist.Sqlite: createSqlitePoolFromInfo :: (MonadLoggerIO m, MonadUnliftIO m) => SqliteConnectionInfo -> Int -> m (Pool SqlBackend)
- Database.Persist.Sqlite: persistentBackend :: forall backend_ajyM backend_and2. Lens (RawSqlite backend_ajyM) (RawSqlite backend_and2) backend_ajyM backend_and2
+ Database.Persist.Sqlite: persistentBackend :: forall backend_ajAT backend_anML. Lens (RawSqlite backend_ajAT) (RawSqlite backend_anML) backend_ajAT backend_anML
- Database.Persist.Sqlite: rawSqliteConnection :: forall backend_ajyM. Lens' (RawSqlite backend_ajyM) Connection
+ Database.Persist.Sqlite: rawSqliteConnection :: forall backend_ajAT. Lens' (RawSqlite backend_ajAT) Connection
- Database.Persist.Sqlite: retryOnBusy :: (MonadUnliftIO m, MonadLogger m) => m a -> m a
+ Database.Persist.Sqlite: retryOnBusy :: (MonadUnliftIO m, MonadLoggerIO m) => m a -> m a
- Database.Persist.Sqlite: waitForDatabase :: (MonadUnliftIO m, MonadLogger m, BackendCompatible SqlBackend backend) => ReaderT backend m ()
+ Database.Persist.Sqlite: waitForDatabase :: (MonadUnliftIO m, MonadLoggerIO m, BackendCompatible SqlBackend backend) => ReaderT backend m ()
- Database.Persist.Sqlite: withRawSqliteConnInfo :: (MonadUnliftIO m, MonadLogger m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m a) -> m a
+ Database.Persist.Sqlite: withRawSqliteConnInfo :: (MonadUnliftIO m, MonadLoggerIO m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m a) -> m a
- Database.Persist.Sqlite: withRawSqlitePoolInfo :: (MonadUnliftIO m, MonadLogger m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m ()) -> Int -> (Pool (RawSqlite SqlBackend) -> m a) -> m a
+ Database.Persist.Sqlite: withRawSqlitePoolInfo :: (MonadUnliftIO m, MonadLoggerIO m) => SqliteConnectionInfo -> (RawSqlite SqlBackend -> m ()) -> Int -> (Pool (RawSqlite SqlBackend) -> m a) -> m a
- Database.Persist.Sqlite: withRawSqlitePoolInfo_ :: (MonadUnliftIO m, MonadLogger m) => SqliteConnectionInfo -> Int -> (Pool (RawSqlite SqlBackend) -> m a) -> m a
+ Database.Persist.Sqlite: withRawSqlitePoolInfo_ :: (MonadUnliftIO m, MonadLoggerIO m) => SqliteConnectionInfo -> Int -> (Pool (RawSqlite SqlBackend) -> m a) -> m a
- Database.Persist.Sqlite: withSqliteConn :: (MonadUnliftIO m, MonadLogger m) => Text -> (SqlBackend -> m a) -> m a
+ Database.Persist.Sqlite: withSqliteConn :: (MonadUnliftIO m, MonadLoggerIO m) => Text -> (SqlBackend -> m a) -> m a
- Database.Persist.Sqlite: withSqliteConnInfo :: (MonadUnliftIO m, MonadLogger m) => SqliteConnectionInfo -> (SqlBackend -> m a) -> m a
+ Database.Persist.Sqlite: withSqliteConnInfo :: (MonadUnliftIO m, MonadLoggerIO m) => SqliteConnectionInfo -> (SqlBackend -> m a) -> m a
- Database.Persist.Sqlite: withSqlitePool :: (MonadUnliftIO m, MonadLogger m) => Text -> Int -> (Pool SqlBackend -> m a) -> m a
+ Database.Persist.Sqlite: withSqlitePool :: (MonadUnliftIO m, MonadLoggerIO m) => Text -> Int -> (Pool SqlBackend -> m a) -> m a
- Database.Persist.Sqlite: withSqlitePoolInfo :: (MonadUnliftIO m, MonadLogger m) => SqliteConnectionInfo -> Int -> (Pool SqlBackend -> m a) -> m a
+ Database.Persist.Sqlite: withSqlitePoolInfo :: (MonadUnliftIO m, MonadLoggerIO m) => SqliteConnectionInfo -> Int -> (Pool SqlBackend -> m a) -> m a

Files

ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for persistent-sqlite +## 2.12.0.0++* Decomposed `HaskellName` into `ConstraintNameHS`, `EntityNameHS`, `FieldNameHS`. Decomposed `DBName` into `ConstraintNameDB`, `EntityNameDB`, `FieldNameDB` respectively. [#1174](https://github.com/yesodweb/persistent/pull/1174)+ ##  2.11.1.0  * Add `checkForeignKeys` operation to verify no foreign key constraints are@@ -36,7 +40,6 @@ * Add `createRawSqlitePoolFromInfo`, `createRawSqlitePoolFromInfo_`,   `withRawSqlitePoolInfo`, and `withRawSqlitePoolInfo_` to match the existing   pool functions for regular `SqlBackend`. [#983](https://github.com/yesodweb/persistent/pull/983)->>>>>>> master  ## 2.10.5.2 
Database/Persist/Sqlite.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}@@ -10,6 +11,12 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeFamilies #-}+-- Strictly, this could go as low as GHC 8.6.1, which is when DerivingVia was+-- introduced - this base version requires 8.6.5++#if MIN_VERSION_base(4,12,0)+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE UndecidableInstances #-}+#endif -- | A sqlite backend for persistent. -- -- Note: If you prepend @WAL=off @ to your connection string, it will disable@@ -52,10 +59,13 @@ import qualified Control.Exception as E import Control.Monad (forM_) import Control.Monad.IO.Unlift (MonadIO (..), MonadUnliftIO, askRunInIO, withRunInIO, withUnliftIO, unliftIO, withRunInIO)-import Control.Monad.Logger (NoLoggingT, runNoLoggingT, MonadLogger, logWarn, runLoggingT)+import Control.Monad.Logger (NoLoggingT, runNoLoggingT, MonadLoggerIO, logWarn, runLoggingT, askLoggerIO) import Control.Monad.Reader (MonadReader) import Control.Monad.Trans.Resource (MonadResource)-import Control.Monad.Trans.Reader (ReaderT, runReaderT, withReaderT)+import Control.Monad.Trans.Reader (ReaderT, runReaderT)+#if !MIN_VERSION_base(4,12,0)+import Control.Monad.Trans.Reader (withReaderT)+#endif import Control.Monad.Trans.Writer (runWriterT) import Data.Acquire (Acquire, mkAcquire, with) import Data.Maybe@@ -67,7 +77,6 @@ import qualified Data.HashMap.Lazy as HashMap import Data.Int (Int64) import Data.IORef-import qualified Data.List as List import qualified Data.Map as Map import Data.Monoid ((<>)) import Data.Pool (Pool)@@ -77,6 +86,9 @@ import Lens.Micro.TH (makeLenses) import UnliftIO.Resource (ResourceT, runResourceT) +#if MIN_VERSION_base(4,12,0)+import Database.Persist.Compatible+#endif import Database.Persist.Sql import qualified Database.Persist.Sql.Util as Util import qualified Database.Sqlite as Sqlite@@ -87,7 +99,7 @@ -- Note that this should not be used with the @:memory:@ connection string, as -- the pool will regularly remove connections, destroying your database. -- Instead, use 'withSqliteConn'.-createSqlitePool :: (MonadLogger m, MonadUnliftIO m)+createSqlitePool :: (MonadLoggerIO m, MonadUnliftIO m)                  => Text -> Int -> m (Pool SqlBackend) createSqlitePool = createSqlitePoolFromInfo . conStringToInfo @@ -98,14 +110,14 @@ -- Instead, use 'withSqliteConn'. -- -- @since 2.6.2-createSqlitePoolFromInfo :: (MonadLogger m, MonadUnliftIO m)+createSqlitePoolFromInfo :: (MonadLoggerIO m, MonadUnliftIO m)                          => SqliteConnectionInfo -> Int -> m (Pool SqlBackend) createSqlitePoolFromInfo connInfo = createSqlPool $ openWith const connInfo  -- | Run the given action with a connection pool. -- -- Like 'createSqlitePool', this should not be used with @:memory:@.-withSqlitePool :: (MonadUnliftIO m, MonadLogger m)+withSqlitePool :: (MonadUnliftIO m, MonadLoggerIO m)                => Text                -> Int -- ^ number of connections to open                -> (Pool SqlBackend -> m a) -> m a@@ -116,18 +128,18 @@ -- Like 'createSqlitePool', this should not be used with @:memory:@. -- -- @since 2.6.2-withSqlitePoolInfo :: (MonadUnliftIO m, MonadLogger m)+withSqlitePoolInfo :: (MonadUnliftIO m, MonadLoggerIO m)                    => SqliteConnectionInfo                    -> Int -- ^ number of connections to open                    -> (Pool SqlBackend -> m a) -> m a withSqlitePoolInfo connInfo = withSqlPool $ openWith const connInfo -withSqliteConn :: (MonadUnliftIO m, MonadLogger m)+withSqliteConn :: (MonadUnliftIO m, MonadLoggerIO m)                => Text -> (SqlBackend -> m a) -> m a withSqliteConn = withSqliteConnInfo . conStringToInfo  -- | @since 2.6.2-withSqliteConnInfo :: (MonadUnliftIO m, MonadLogger m)+withSqliteConnInfo :: (MonadUnliftIO m, MonadLoggerIO m)                    => SqliteConnectionInfo -> (SqlBackend -> m a) -> m a withSqliteConnInfo = withSqlConn . openWith const @@ -190,7 +202,7 @@ -- | Retry if a Busy is thrown, following an exponential backoff strategy. -- -- @since 2.9.3-retryOnBusy :: (MonadUnliftIO m, MonadLogger m) => m a -> m a+retryOnBusy :: (MonadUnliftIO m, MonadLoggerIO m) => m a -> m a retryOnBusy action =   start $ take 20 $ delays 1000   where@@ -216,7 +228,7 @@ -- -- @since 2.9.3 waitForDatabase-    :: (MonadUnliftIO m, MonadLogger m, BackendCompatible SqlBackend backend)+    :: (MonadUnliftIO m, MonadLoggerIO m, BackendCompatible SqlBackend backend)     => ReaderT backend m () waitForDatabase = retryOnBusy $ rawExecute "SELECT 42" [] @@ -267,7 +279,9 @@         , connBegin = \f _ -> helper "BEGIN" f         , connCommit = helper "COMMIT"         , connRollback = ignoreExceptions . helper "ROLLBACK"-        , connEscapeName = escape+        , connEscapeFieldName = escape . unFieldNameDB+        , connEscapeTableName = escape . unEntityNameDB . entityDB+        , connEscapeRawName = escape         , connNoLimit = "LIMIT -1"         , connRDBMS = "sqlite"         , connLimitOffset = decorateSQLWithLimitOffset "LIMIT -1"@@ -327,9 +341,9 @@           ISRManyKeys sql vals             where sql = T.concat                     [ "INSERT INTO "-                    , escape $ entityDB ent+                    , escapeE $ entityDB ent                     , "("-                    , T.intercalate "," $ map (escape . fieldDB) cols+                    , T.intercalate "," $ map (escapeF . fieldDB) cols                     , ") VALUES("                     , T.intercalate "," (map (const "?") cols)                     , ")"@@ -339,19 +353,19 @@             where               sel = T.concat                   [ "SELECT "-                  , escape $ fieldDB (entityId ent)+                  , escapeF $ fieldDB (entityId ent)                   , " FROM "-                  , escape $ entityDB ent+                  , escapeE $ entityDB ent                   , " WHERE _ROWID_=last_insert_rowid()"                   ]               ins = T.concat                   [ "INSERT INTO "-                  , escape $ entityDB ent+                  , escapeE $ entityDB ent                   , if null cols                         then " VALUES(null)"                         else T.concat                           [ "("-                          , T.intercalate "," $ map (escape . fieldDB) $ cols+                          , T.intercalate "," $ map (escapeF . fieldDB) $ cols                           , ") VALUES("                           , T.intercalate "," (map (const "?") cols)                           , ")"@@ -415,7 +429,7 @@     let (cols, uniqs, fdefs) = sqliteMkColumns allDefs val     let newSql = mkCreateTable False def (filter (not . safeToRemove val . cName) cols, uniqs, fdefs)     stmt <- getter "SELECT sql FROM sqlite_master WHERE type='table' AND name=?"-    oldSql' <- with (stmtQuery stmt [PersistText $ unDBName table])+    oldSql' <- with (stmtQuery stmt [PersistText $ unEntityNameDB table])       (\src -> runConduit $ src .| go)     case oldSql' of         Nothing -> return $ Right [(False, newSql)]@@ -457,7 +471,9 @@                    , connBegin = \f _ -> helper "BEGIN" f                    , connCommit = helper "COMMIT"                    , connRollback = ignoreExceptions . helper "ROLLBACK"-                   , connEscapeName = escape+                   , connEscapeFieldName = escape . unFieldNameDB+                   , connEscapeTableName = escape . unEntityNameDB . entityDB+                   , connEscapeRawName = escape                    , connNoLimit = "LIMIT -1"                    , connRDBMS = "sqlite"                    , connLimitOffset = decorateSQLWithLimitOffset "LIMIT -1"@@ -479,10 +495,10 @@  -- | Check if a column name is listed as the "safe to remove" in the entity -- list.-safeToRemove :: EntityDef -> DBName -> Bool-safeToRemove def (DBName colName)+safeToRemove :: EntityDef -> FieldNameDB -> Bool+safeToRemove def (FieldNameDB colName)     = any (elem FieldAttrSafeToRemove . fieldAttrs)-    $ filter ((== DBName colName) . fieldDB)+    $ filter ((== FieldNameDB colName) . fieldDB)     $ entityFields def  getCopyTable :: [EntityDef]@@ -490,9 +506,9 @@              -> EntityDef              -> IO [(Bool, Text)] getCopyTable allDefs getter def = do-    stmt <- getter $ T.concat [ "PRAGMA table_info(", escape table, ")" ]+    stmt <- getter $ T.concat [ "PRAGMA table_info(", escapeE table, ")" ]     oldCols' <- with (stmtQuery stmt []) (\src -> runConduit $ src .| getCols)-    let oldCols = map DBName oldCols'+    let oldCols = map FieldNameDB oldCols'     let newCols = filter (not . safeToRemove def) $ map cName cols     let common = filter (`elem` oldCols) newCols     return [ (False, tmpSql)@@ -512,30 +528,30 @@                 return $ name : names             Just y -> error $ "Invalid result from PRAGMA table_info: " ++ show y     table = entityDB def-    tableTmp = DBName $ unDBName table <> "_backup"+    tableTmp = EntityNameDB $ unEntityNameDB table <> "_backup"     (cols, uniqs, fdef) = sqliteMkColumns allDefs def     cols' = filter (not . safeToRemove def . cName) cols     newSql = mkCreateTable False def (cols', uniqs, fdef)     tmpSql = mkCreateTable True def { entityDB = tableTmp } (cols', uniqs, [])-    dropTmp = "DROP TABLE " <> escape tableTmp-    dropOld = "DROP TABLE " <> escape table+    dropTmp = "DROP TABLE " <> escapeE tableTmp+    dropOld = "DROP TABLE " <> escapeE table     copyToTemp common = T.concat         [ "INSERT INTO "-        , escape tableTmp+        , escapeE tableTmp         , "("-        , T.intercalate "," $ map escape common+        , T.intercalate "," $ map escapeF common         , ") SELECT "-        , T.intercalate "," $ map escape common+        , T.intercalate "," $ map escapeF common         , " FROM "-        , escape table+        , escapeE table         ]     copyToFinal newCols = T.concat         [ "INSERT INTO "-        , escape table+        , escapeE table         , " SELECT "-        , T.intercalate "," $ map escape newCols+        , T.intercalate "," $ map escapeF newCols         , " FROM "-        , escape tableTmp+        , escapeE tableTmp         ]  mkCreateTable :: Bool -> EntityDef -> ([Column], [UniqueDef], [ForeignDef]) -> Text@@ -546,7 +562,7 @@         [ "CREATE"         , if isTemp then " TEMP" else ""         , " TABLE "-        , escape $ entityDB entity+        , escapeE $ entityDB entity         , "("         ] @@ -561,12 +577,12 @@             [ T.drop 1 $ T.concat $ map (sqlColumn isTemp) cols             , ", PRIMARY KEY "             , "("-            , T.intercalate "," $ map (escape . fieldDB) $ compositeFields pdef+            , T.intercalate "," $ map (escapeF . fieldDB) $ compositeFields pdef             , ")"             ]          Nothing ->-            [ escape $ fieldDB (entityId entity)+            [ escapeF $ fieldDB (entityId entity)             , " "             , showSqlType $ fieldSqlType $ entityId entity             , " PRIMARY KEY"@@ -589,7 +605,7 @@ sqlColumn :: Bool -> Column -> Text sqlColumn noRef (Column name isNull typ def gen _cn _maxLen ref) = T.concat     [ ","-    , escape name+    , escapeF name     , " "     , showSqlType typ     , if isNull then " NULL" else " NOT NULL"@@ -598,7 +614,7 @@     , case ref of         Nothing -> ""         Just ColumnReference {crTableName=table, crFieldCascade=cascadeOpts} ->-          if noRef then "" else " REFERENCES " <> escape table+          if noRef then "" else " REFERENCES " <> escapeE table             <> onDelete cascadeOpts <> onUpdate cascadeOpts     ]   where@@ -608,13 +624,13 @@ sqlForeign :: ForeignDef -> Text sqlForeign fdef = T.concat $     [ ", CONSTRAINT "-    , escape $ foreignConstraintNameDBName fdef+    , escapeC $ foreignConstraintNameDBName fdef     , " FOREIGN KEY("-    , T.intercalate "," $ map (escape . snd. fst) $ foreignFields fdef+    , T.intercalate "," $ map (escapeF . snd. fst) $ foreignFields fdef     , ") REFERENCES "-    , escape $ foreignRefTableDBName fdef+    , escapeE $ foreignRefTableDBName fdef     , "("-    , T.intercalate "," $ map (escape . snd . snd) $ foreignFields fdef+    , T.intercalate "," $ map (escapeF . snd . snd) $ foreignFields fdef     , ")"     ] ++ onDelete ++ onUpdate   where@@ -634,14 +650,23 @@ sqlUnique :: UniqueDef -> Text sqlUnique (UniqueDef _ cname cols _) = T.concat     [ ",CONSTRAINT "-    , escape cname+    , escapeC cname     , " UNIQUE ("-    , T.intercalate "," $ map (escape . snd) cols+    , T.intercalate "," $ map (escapeF . snd) cols     , ")"     ] -escape :: DBName -> Text-escape (DBName s) =+escapeC :: ConstraintNameDB -> Text+escapeC = escapeWith escape++escapeE :: EntityNameDB -> Text+escapeE = escapeWith escape++escapeF :: FieldNameDB -> Text+escapeF = escapeWith escape++escape :: Text -> Text+escape s =     T.concat [q, T.concatMap go s, q]   where     q = T.singleton '"'@@ -652,21 +677,21 @@ putManySql ent n = putManySql' conflictColumns fields ent n   where     fields = entityFields ent-    conflictColumns = concatMap (map (escape . snd) . uniqueFields) (entityUniques ent)+    conflictColumns = concatMap (map (escapeF . snd) . uniqueFields) (entityUniques ent)  repsertManySql :: EntityDef -> Int -> Text repsertManySql ent n = putManySql' conflictColumns fields ent n   where     fields = keyAndEntityFields ent-    conflictColumns = escape . fieldDB <$> entityKeyFields ent+    conflictColumns = escapeF . fieldDB <$> entityKeyFields ent  putManySql' :: [Text] -> [FieldDef] -> EntityDef -> Int -> Text putManySql' conflictColumns fields ent n = q   where-    fieldDbToText = escape . fieldDB+    fieldDbToText = escapeF . fieldDB     mkAssignment f = T.concat [f, "=EXCLUDED.", f] -    table = escape . entityDB $ ent+    table = escapeE . entityDB $ ent     columns = Util.commaSeparated $ map fieldDbToText fields     placeholders = map (const "?") fields     updates = map (mkAssignment . fieldDbToText) fields@@ -787,12 +812,13 @@         _ -> liftIO . E.throwIO . PersistMarshalError $ mconcat             [ "Unexpected result from foreign key check:\n", T.pack (show l) ] -    query = "\-\ SELECT origin.rowid, origin.\"table\", group_concat(foreignkeys.\"from\")\n\-\ FROM pragma_foreign_key_check() AS origin\n\-\ INNER JOIN pragma_foreign_key_list(origin.\"table\") AS foreignkeys\n\-\ ON origin.fkid = foreignkeys.id AND origin.parent = foreignkeys.\"table\"\n\-\ GROUP BY origin.rowid"+    query = T.unlines+        [ "SELECT origin.rowid, origin.\"table\", group_concat(foreignkeys.\"from\")"+        , "FROM pragma_foreign_key_check() AS origin"+        , "INNER JOIN pragma_foreign_key_list(origin.\"table\") AS foreignkeys"+        , "ON origin.fkid = foreignkeys.id AND origin.parent = foreignkeys.\"table\""+        , "GROUP BY origin.rowid"+        ]  -- | Like `withSqliteConnInfo`, but exposes the internal `Sqlite.Connection`. -- For power users who want to manually interact with SQLite's C API via@@ -800,12 +826,12 @@ -- -- @since 2.10.2 withRawSqliteConnInfo-    :: (MonadUnliftIO m, MonadLogger m)+    :: (MonadUnliftIO m, MonadLoggerIO m)     => SqliteConnectionInfo     -> (RawSqlite SqlBackend -> m a)     -> m a withRawSqliteConnInfo connInfo f = do-    logFunc <- askLogFunc+    logFunc <- askLoggerIO     withRunInIO $ \run -> E.bracket (openBackend logFunc) closeBackend $ run . f   where     openBackend = openWith RawSqlite connInfo@@ -820,7 +846,7 @@ -- -- @since 2.10.6 createRawSqlitePoolFromInfo-    :: (MonadLogger m, MonadUnliftIO m)+    :: (MonadLoggerIO m, MonadUnliftIO m)     => SqliteConnectionInfo     -> (RawSqlite SqlBackend -> m ())     -- ^ An action that is run whenever a new `RawSqlite` connection is@@ -841,7 +867,7 @@ -- -- @since 2.10.6 createRawSqlitePoolFromInfo_-    :: (MonadLogger m, MonadUnliftIO m)+    :: (MonadLoggerIO m, MonadUnliftIO m)     => SqliteConnectionInfo -> Int -> m (Pool (RawSqlite SqlBackend)) createRawSqlitePoolFromInfo_ connInfo =   createRawSqlitePoolFromInfo connInfo (const (return ()))@@ -850,7 +876,7 @@ -- -- @since 2.10.6 withRawSqlitePoolInfo-    :: (MonadUnliftIO m, MonadLogger m)+    :: (MonadUnliftIO m, MonadLoggerIO m)     => SqliteConnectionInfo     -> (RawSqlite SqlBackend -> m ())     -> Int -- ^ number of connections to open@@ -868,7 +894,7 @@ -- -- @since 2.10.6 withRawSqlitePoolInfo_-    :: (MonadUnliftIO m, MonadLogger m)+    :: (MonadUnliftIO m, MonadLoggerIO m)     => SqliteConnectionInfo     -> Int -- ^ number of connections to open     -> (Pool (RawSqlite SqlBackend) -> m a)@@ -885,29 +911,15 @@     , _rawSqliteConnection :: Sqlite.Connection -- ^ The underlying `Sqlite.Connection`     } -instance HasPersistBackend b => HasPersistBackend (RawSqlite b) where-    type BaseBackend (RawSqlite b) = BaseBackend b-    persistBackend = persistBackend . _persistentBackend- instance BackendCompatible b (RawSqlite b) where     projectBackend = _persistentBackend -instance (PersistCore b) => PersistCore (RawSqlite b) where-    newtype BackendKey (RawSqlite b) = RawSqliteKey (BackendKey b)--deriving instance (Show (BackendKey b)) => Show (BackendKey (RawSqlite b))-deriving instance (Read (BackendKey b)) => Read (BackendKey (RawSqlite b))-deriving instance (Eq (BackendKey b)) => Eq (BackendKey (RawSqlite b))-deriving instance (Ord (BackendKey b)) => Ord (BackendKey (RawSqlite b))-deriving instance (Num (BackendKey b)) => Num (BackendKey (RawSqlite b))-deriving instance (Integral (BackendKey b)) => Integral (BackendKey (RawSqlite b))-deriving instance (PersistField (BackendKey b)) => PersistField (BackendKey (RawSqlite b))-deriving instance (PersistFieldSql (BackendKey b)) => PersistFieldSql (BackendKey (RawSqlite b))-deriving instance (Real (BackendKey b)) => Real (BackendKey (RawSqlite b))-deriving instance (Enum (BackendKey b)) => Enum (BackendKey (RawSqlite b))-deriving instance (Bounded (BackendKey b)) => Bounded (BackendKey (RawSqlite b))-deriving instance (ToJSON (BackendKey b)) => ToJSON (BackendKey (RawSqlite b))-deriving instance (FromJSON (BackendKey b)) => FromJSON (BackendKey (RawSqlite b))+#if MIN_VERSION_base(4,12,0)+makeCompatibleInstances [t| forall b. Compatible b (RawSqlite b) |]+#else+instance HasPersistBackend b => HasPersistBackend (RawSqlite b) where+    type BaseBackend (RawSqlite b) = BaseBackend b+    persistBackend = persistBackend . _persistentBackend  instance (PersistStoreRead b) => PersistStoreRead (RawSqlite b) where     get = withReaderT _persistentBackend . get@@ -947,6 +959,31 @@     upsert rec = withReaderT _persistentBackend . upsert rec     upsertBy uniq rec = withReaderT _persistentBackend . upsertBy uniq rec     putMany = withReaderT _persistentBackend . putMany+#endif++#if MIN_VERSION_base(4,12,0)+instance (PersistCore b) => PersistCore (RawSqlite b) where+  newtype BackendKey (RawSqlite b) = RawSqliteKey { unRawSqliteKey :: BackendKey (Compatible b (RawSqlite b)) }++makeCompatibleKeyInstances [t| forall b. Compatible b (RawSqlite b) |]+#else+instance (PersistCore b) => PersistCore (RawSqlite b) where+  newtype BackendKey (RawSqlite b) = RawSqliteKey { unRawSqliteKey :: BackendKey (RawSqlite b) }++deriving instance (Show (BackendKey b)) => Show (BackendKey (RawSqlite b))+deriving instance (Read (BackendKey b)) => Read (BackendKey (RawSqlite b))+deriving instance (Eq (BackendKey b)) => Eq (BackendKey (RawSqlite b))+deriving instance (Ord (BackendKey b)) => Ord (BackendKey (RawSqlite b))+deriving instance (Num (BackendKey b)) => Num (BackendKey (RawSqlite b))+deriving instance (Integral (BackendKey b)) => Integral (BackendKey (RawSqlite b))+deriving instance (PersistField (BackendKey b)) => PersistField (BackendKey (RawSqlite b))+deriving instance (PersistFieldSql (BackendKey b)) => PersistFieldSql (BackendKey (RawSqlite b))+deriving instance (Real (BackendKey b)) => Real (BackendKey (RawSqlite b))+deriving instance (Enum (BackendKey b)) => Enum (BackendKey (RawSqlite b))+deriving instance (Bounded (BackendKey b)) => Bounded (BackendKey (RawSqlite b))+deriving instance (ToJSON (BackendKey b)) => ToJSON (BackendKey (RawSqlite b))+deriving instance (FromJSON (BackendKey b)) => FromJSON (BackendKey (RawSqlite b))+#endif  makeLenses ''RawSqlite makeLenses ''SqliteConnectionInfo
Database/Sqlite.hs view
@@ -96,7 +96,7 @@ import Foreign import Foreign.C -import Database.Persist (PersistValue (..), listToJSON, mapToJSON)+import Database.Persist (PersistValue (..), listToJSON, mapToJSON, LiteralType(..))  -- | A custom exception type to make it easier to catch exceptions. --@@ -468,13 +468,13 @@             PersistUTCTime d -> bindText statement parameterIndex $ pack $ format8601 d             PersistList l -> bindText statement parameterIndex $ listToJSON l             PersistMap m -> bindText statement parameterIndex $ mapToJSON m-            PersistDbSpecific s -> bindText statement parameterIndex $ decodeUtf8With lenientDecode s             PersistArray a -> bindText statement parameterIndex $ listToJSON a -- copy of PersistList's definition             PersistObjectId _ -> P.error "Refusing to serialize a PersistObjectId to a SQLite value"              -- I know one of these is broken, but the docs for `sqlite3_bind_text` aren't very illuminating.-            PersistLiteral l -> bindText statement parameterIndex $ decodeUtf8With lenientDecode l-            PersistLiteralEscaped e -> bindText statement parameterIndex $ decodeUtf8With lenientDecode e+            PersistLiteral_ DbSpecific s -> bindText statement parameterIndex $ decodeUtf8With lenientDecode s+            PersistLiteral_ Unescaped l -> bindText statement parameterIndex $ decodeUtf8With lenientDecode l+            PersistLiteral_ Escaped e -> bindText statement parameterIndex $ decodeUtf8With lenientDecode e             )        $ zip [1..] sqlData   return ()
persistent-sqlite.cabal view
@@ -1,5 +1,5 @@ name:            persistent-sqlite-version:         2.11.1.0+version:         2.12.0.0 license:         MIT license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -44,7 +44,7 @@  library     build-depends:   base                    >= 4.9         && < 5-                   , persistent              >= 2.11        && < 3+                   , persistent              >= 2.12        && < 3                    , aeson                   >= 1.0                    , bytestring              >= 0.10                    , conduit                 >= 1.2.12@@ -120,7 +120,6 @@     build-depends:   base >= 4.9 && < 5                    , persistent                    , persistent-sqlite-                   , persistent-template                    , persistent-test                    , bytestring                    , containers