fix: weird sql casting
This commit is contained in:
parent
60be62b63b
commit
eb9c6760b9
@ -17,7 +17,7 @@ module Database.Esqueleto.Utils
|
|||||||
, selectExists, selectNotExists
|
, selectExists, selectNotExists
|
||||||
, SqlHashable
|
, SqlHashable
|
||||||
, sha256
|
, sha256
|
||||||
, maybe, unsafeCoalesce
|
, maybe, maybeEq, unsafeCoalesce
|
||||||
, bool
|
, bool
|
||||||
, max, min
|
, max, min
|
||||||
, SqlProject(..)
|
, SqlProject(..)
|
||||||
@ -243,6 +243,25 @@ maybe onNothing onJust val = E.case_
|
|||||||
]
|
]
|
||||||
(E.else_ onNothing)
|
(E.else_ onNothing)
|
||||||
|
|
||||||
|
infix 4 `maybeEq`
|
||||||
|
|
||||||
|
maybeEq :: PersistField a
|
||||||
|
=> E.SqlExpr (E.Value (Maybe a))
|
||||||
|
-> E.SqlExpr (E.Value (Maybe a))
|
||||||
|
-> E.SqlExpr (E.Value Bool)
|
||||||
|
-- ^ `E.==.` but treat `E.nothing` as identical
|
||||||
|
maybeEq a b = E.case_
|
||||||
|
[ E.when_
|
||||||
|
(E.isNothing a)
|
||||||
|
E.then_
|
||||||
|
(E.isNothing b)
|
||||||
|
, E.when_
|
||||||
|
(E.isNothing b)
|
||||||
|
E.then_
|
||||||
|
false -- (E.isNothing a)
|
||||||
|
]
|
||||||
|
(E.else_ $ a E.==. b)
|
||||||
|
|
||||||
bool :: PersistField a
|
bool :: PersistField a
|
||||||
=> E.SqlExpr (E.Value a)
|
=> E.SqlExpr (E.Value a)
|
||||||
-> E.SqlExpr (E.Value a)
|
-> E.SqlExpr (E.Value a)
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import Database.Persist.Sql (deleteWhereCount)
|
|||||||
|
|
||||||
import qualified Database.Esqueleto as E
|
import qualified Database.Esqueleto as E
|
||||||
import qualified Database.Esqueleto.Utils as E
|
import qualified Database.Esqueleto.Utils as E
|
||||||
|
import qualified Database.Esqueleto.Internal.Sql as E (unsafeSqlCastAs)
|
||||||
|
|
||||||
import qualified Data.Conduit.Combinators as C
|
import qualified Data.Conduit.Combinators as C
|
||||||
import qualified Data.Conduit.List as C (mapMaybe)
|
import qualified Data.Conduit.List as C (mapMaybe)
|
||||||
@ -55,7 +56,9 @@ dispatchJobPruneUnreferencedFiles = JobHandlerAtomic . hoist lift $ do
|
|||||||
|
|
||||||
E.update $ \fileContent -> do
|
E.update $ \fileContent -> do
|
||||||
let isReferenced = E.any E.exists . fileReferences $ fileContent E.^. FileContentHash
|
let isReferenced = E.any E.exists . fileReferences $ fileContent E.^. FileContentHash
|
||||||
E.set fileContent [ FileContentUnreferencedSince E.=. E.bool (E.just . E.maybe (E.val now) (E.min $ E.val now) $ fileContent E.^. FileContentUnreferencedSince) E.nothing isReferenced ]
|
now' = E.unsafeSqlCastAs "TIMESTAMP WITH TIME ZONE" $ E.val now
|
||||||
|
shouldBe = E.bool (E.just . E.maybe now' (E.min now') $ fileContent E.^. FileContentUnreferencedSince) E.nothing isReferenced
|
||||||
|
E.set fileContent [ FileContentUnreferencedSince E.=. shouldBe ]
|
||||||
|
|
||||||
let
|
let
|
||||||
getCandidates = E.selectSource . E.from $ \fileContent -> do
|
getCandidates = E.selectSource . E.from $ \fileContent -> do
|
||||||
@ -71,7 +74,8 @@ dispatchJobPruneUnreferencedFiles = JobHandlerAtomic . hoist lift $ do
|
|||||||
.| C.map (view $ _1 . _Value)
|
.| C.map (view $ _1 . _Value)
|
||||||
.| C.mapM (\fRef -> Sum <$> deleteWhereCount [FileContentHash ==. fRef])
|
.| C.mapM (\fRef -> Sum <$> deleteWhereCount [FileContentHash ==. fRef])
|
||||||
.| C.fold
|
.| C.fold
|
||||||
$logInfoS "PruneUnreferencedFiles" [st|Deleted #{deleted} long-unreferenced files|]
|
when (deleted > 0) $
|
||||||
|
$logInfoS "PruneUnreferencedFiles" [st|Deleted #{deleted} long-unreferenced files|]
|
||||||
|
|
||||||
|
|
||||||
dispatchJobInjectFiles :: JobHandler UniWorX
|
dispatchJobInjectFiles :: JobHandler UniWorX
|
||||||
@ -100,7 +104,8 @@ dispatchJobInjectFiles = JobHandlerException . maybeT (return ()) $ do
|
|||||||
|
|
||||||
fmap ((, mempty) . Sum) . lift. lift . E.insertSelectCount $
|
fmap ((, mempty) . Sum) . lift. lift . E.insertSelectCount $
|
||||||
let isReferenced = E.any E.exists $ fileReferences (E.val fRef)
|
let isReferenced = E.any E.exists $ fileReferences (E.val fRef)
|
||||||
in return $ FileContent E.<# E.val fRef E.<&> E.val content E.<&> E.bool (E.just $ E.val now) E.nothing isReferenced
|
now' = E.unsafeSqlCastAs "TIMESTAMP WITH TIME ZONE" $ E.val now
|
||||||
|
in return $ FileContent E.<# E.val fRef E.<&> E.val content E.<&> E.bool (E.just now') E.nothing isReferenced
|
||||||
runAppMinio . maybeT (return ()) . catchIfMaybeT minioIsDoesNotExist $ Minio.removeObject uploadBucket obj
|
runAppMinio . maybeT (return ()) . catchIfMaybeT minioIsDoesNotExist $ Minio.removeObject uploadBucket obj
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user