From 0a7a2dae4ee1247ec7825d5f6feae6ede32d8d72 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 15 Dec 2015 13:05:23 -0400 Subject: [PATCH] add getAssociatedKey I guess this is just as efficient as the getAssociatedFiles query, but I have not tried to optimise the database yet. --- Database/Keys.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 -- 2.30.2