From: Joey Hess Date: Tue, 15 Dec 2015 17:05:23 +0000 (-0400) Subject: add getAssociatedKey X-Git-Tag: archive/raspbian/10.20250416-2+rpi1~1^2~320^2~184^2~51 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0a7a2dae4ee1247ec7825d5f6feae6ede32d8d72;p=git-annex.git add getAssociatedKey I guess this is just as efficient as the getAssociatedFiles query, but I have not tried to optimise the database yet. --- diff --git a/Database/Keys.hs b/Database/Keys.hs index 78d583d633..62c7c25eb4 100644 --- a/Database/Keys.hs +++ b/Database/Keys.hs @@ -17,6 +17,7 @@ module Database.Keys ( shutdown, addAssociatedFile, getAssociatedFiles, + getAssociatedKey, removeAssociatedFile, storeInodeCaches, addInodeCaches, @@ -118,6 +119,19 @@ getAssociatedFiles' sk = do return (r ^. AssociatedFile) return $ map unValue l +{- Gets any keys that are on record as having a particular associated file. + - (Should be one or none but the database doesn't enforce that.) -} +getAssociatedKey :: FilePath -> Annex [Key] +getAssociatedKey f = withDbHandle $ \h -> H.queryDb h $ + getAssociatedKey' f + +getAssociatedKey' :: FilePath -> SqlPersistM [Key] +getAssociatedKey' f = do + l <- select $ from $ \r -> do + where_ (r ^. AssociatedFile ==. val f) + return (r ^. AssociatedKey) + return $ map (fromSKey . unValue) l + removeAssociatedFile :: Key -> FilePath -> Annex () removeAssociatedFile k f = withDbHandle $ \h -> H.queueDb h (\_ _ -> pure True) $ delete $ from $ \r -> do