Attempt to replace expensive query with a Haskell alternative

This commit is contained in:
Alexey Kuleshevich 2020-11-15 00:03:02 +03:00
parent af20bc6291
commit 17ad688aad
No known key found for this signature in database
GPG Key ID: E59B216127119E3E

View File

@ -611,16 +611,23 @@ snapshotPackageInfoQuery customize =
, spiChangelog = unValue cl , spiChangelog = unValue cl
} }
getSnapshotPackageLatestVersionQuery :: getSnapshotPackageLatestVersionQuery ::
PackageNameP -> ReaderT SqlBackend (RIO env) (Maybe SnapshotPackageInfo) PackageNameP -> ReaderT SqlBackend (RIO env) (Maybe SnapshotPackageInfo)
getSnapshotPackageLatestVersionQuery pname = getSnapshotPackageLatestVersionQuery pname = do
fmap snd . listToMaybe <$> versions <-
(snapshotPackageInfoQuery $ \_sp s pn v spiQ -> do select $
where_ (pn ^. PackageNameName ==. val pname) from $ \(sp `InnerJoin` pn `InnerJoin` v) -> do
orderBy [desc (versionArray v), desc (s ^. SnapshotCreated)] on (sp ^. SnapshotPackageVersion ==. v ^. VersionId)
limit 1 on (sp ^. SnapshotPackagePackageName ==. pn ^. PackageNameId)
pure ((), spiQ)) where_ $ pn ^. PackageNameName ==. val pname
pure (v ^. VersionVersion, sp ^. SnapshotPackageId)
case L.sortOn Down [(v, spid) | (Value v, Value spid) <- versions] of
[] -> pure Nothing
(_, spid):_ ->
fmap snd . listToMaybe <$>
(snapshotPackageInfoQuery $ \sp _s _pn _v spiQ -> do
where_ $ sp ^. SnapshotPackageId ==. val spid
pure ((), spiQ))
getSnapshotPackageLatestVersion :: getSnapshotPackageLatestVersion ::
GetStackageDatabase env m GetStackageDatabase env m