diff --git a/src/Database/Esqueleto.hs b/src/Database/Esqueleto.hs index eb135c2..6f471f1 100644 --- a/src/Database/Esqueleto.hs +++ b/src/Database/Esqueleto.hs @@ -430,8 +430,9 @@ valJ = val . unValue -- | Synonym for 'Database.Persist.Store.delete' that does not -- clash with @esqueleto@'s 'delete'. -deleteKey :: ( PersistStore (PersistEntityBackend val) +deleteKey :: ( PersistStore backend + , BaseBackend backend ~ PersistEntityBackend val , MonadIO m , PersistEntity val ) - => Key val -> ReaderT (PersistEntityBackend val) m () + => Key val -> ReaderT backend m () deleteKey = Database.Persist.delete diff --git a/src/Database/Esqueleto/Internal/PersistentImport.hs b/src/Database/Esqueleto/Internal/PersistentImport.hs index ad193e0..4cd7a57 100644 --- a/src/Database/Esqueleto/Internal/PersistentImport.hs +++ b/src/Database/Esqueleto/Internal/PersistentImport.hs @@ -10,4 +10,4 @@ import Database.Persist.Sql hiding , selectKeysList, deleteCascadeWhere, (=.), (+=.), (-=.), (*=.), (/=.) , (==.), (!=.), (<.), (>.), (<=.), (>=.), (<-.), (/<-.), (||.) , listToJSON, mapToJSON, getPersistMap, limitOffsetOrder, selectSource - , update ) + , update , count ) diff --git a/src/Database/Esqueleto/Internal/Sql.hs b/src/Database/Esqueleto/Internal/Sql.hs index 32db5d9..baa2e02 100644 --- a/src/Database/Esqueleto/Internal/Sql.hs +++ b/src/Database/Esqueleto/Internal/Sql.hs @@ -754,10 +754,10 @@ rawSelectSource :: ( SqlSelect a r , MonadIO m2 ) => Mode -> SqlQuery a - -> SqlPersistT m1 (Acquire (C.Source m2 r)) + -> SqlReadT m1 (Acquire (C.Source m2 r)) rawSelectSource mode query = do - conn <- R.ask + conn <- persistBackend <$> R.ask res <- run conn return $ (C.$= massage) `fmap` res where @@ -833,7 +833,7 @@ selectSource query = do -- @SqlExpr (Entity Person)@. select :: ( SqlSelect a r , MonadIO m ) - => SqlQuery a -> SqlPersistT m [r] + => SqlQuery a -> SqlReadT m [r] select query = do res <- rawSelectSource SELECT query conn <- R.ask @@ -863,8 +863,8 @@ selectDistinct = select . distinct -- | (Internal) Run a 'C.Source' of rows. runSource :: Monad m => - C.Source (SqlPersistT m) r - -> SqlPersistT m [r] + C.Source (R.ReaderT backend m) r + -> R.ReaderT backend m [r] runSource src = src C.$$ CL.consume @@ -873,12 +873,12 @@ runSource src = src C.$$ CL.consume -- | (Internal) Execute an @esqueleto@ statement inside -- @persistent@'s 'SqlPersistT' monad. -rawEsqueleto :: ( MonadIO m, SqlSelect a r ) +rawEsqueleto :: ( MonadIO m, SqlSelect a r, IsPersistBackend backend, BaseBackend backend ~ SqlBackend) => Mode -> SqlQuery a - -> SqlPersistT m Int64 + -> R.ReaderT backend m Int64 rawEsqueleto mode query = do - conn <- R.ask + conn <- persistBackend <$> R.ask uncurry rawExecuteCount $ first builderToText $ toRawSql mode (conn, initialIdentState) query @@ -908,14 +908,14 @@ rawEsqueleto mode query = do -- @ delete :: ( MonadIO m ) => SqlQuery () - -> SqlPersistT m () + -> SqlWriteT m () delete = liftM (const ()) . deleteCount -- | Same as 'delete', but returns the number of rows affected. deleteCount :: ( MonadIO m ) => SqlQuery () - -> SqlPersistT m Int64 + -> SqlWriteT m Int64 deleteCount = rawEsqueleto DELETE @@ -934,7 +934,7 @@ deleteCount = rawEsqueleto DELETE update :: ( MonadIO m , SqlEntity val ) => (SqlExpr (Entity val) -> SqlQuery ()) - -> SqlPersistT m () + -> SqlWriteT m () update = liftM (const ()) . updateCount @@ -942,7 +942,7 @@ update = liftM (const ()) . updateCount updateCount :: ( MonadIO m , SqlEntity val ) => (SqlExpr (Entity val) -> SqlQuery ()) - -> SqlPersistT m Int64 + -> SqlWriteT m Int64 updateCount = rawEsqueleto UPDATE . from @@ -961,7 +961,9 @@ builderToText = TL.toStrict . TLB.toLazyTextWith defaultChunkSize -- @esqueleto@, instead of manually using this function (which is -- possible but tedious), you may just turn on query logging of -- @persistent@. -toRawSql :: SqlSelect a r => Mode -> IdentInfo -> SqlQuery a -> (TLB.Builder, [PersistValue]) +toRawSql + :: (IsPersistBackend backend, BaseBackend backend ~ SqlBackend, SqlSelect a r) + => Mode -> (backend, IdentState) -> SqlQuery a -> (TLB.Builder, [PersistValue]) toRawSql mode (conn, firstIdentState) query = let ((ret, sd), finalIdentState) = flip S.runState firstIdentState $ @@ -980,7 +982,7 @@ toRawSql mode (conn, firstIdentState) query = -- that were used) to the subsequent calls. This ensures -- that no name clashes will occur on subqueries that may -- appear on the expressions below. - info = (conn, finalIdentState) + info = (persistBackend conn, finalIdentState) in mconcat [ makeInsertInto info mode ret , makeSelect info mode distinctClause ret @@ -1745,17 +1747,17 @@ to16 ((a,b),(c,d),(e,f),(g,h),(i,j),(k,l),(m,n),(o,p)) = (a,b,c,d,e,f,g,h,i,j,k, -- -- /Since: 2.4.2/ insertSelect :: (MonadIO m, PersistEntity a) => - SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m () + SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m () insertSelect = liftM (const ()) . insertSelectCount -- | Insert a 'PersistField' for every selected value, return the count afterward insertSelectCount :: (MonadIO m, PersistEntity a) => - SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m Int64 + SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m Int64 insertSelectCount = rawEsqueleto INSERT_INTO . fmap EInsertFinal -- | Insert a 'PersistField' for every unique selected value. insertSelectDistinct :: (MonadIO m, PersistEntity a) => - SqlQuery (SqlExpr (Insertion a)) -> SqlPersistT m () + SqlQuery (SqlExpr (Insertion a)) -> SqlWriteT m () insertSelectDistinct = insertSelect . distinct {-# DEPRECATED insertSelectDistinct "Since 2.2.4: use 'insertSelect' and 'distinct'." #-} diff --git a/stack.yaml b/stack.yaml index 966a1df..c439489 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1 +1,7 @@ resolver: lts-5.1 +packages: +- location: + git: git@github.com:pseudonom/persistent + commit: 041eb7346cf5b597d8d6c67dc86dfc55d76acce3 + subdirs: + - persistent