From 5bbf31096dea265b6d706bf9e67f8341068af6f8 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Tue, 3 Jun 2025 17:01:16 -1000 Subject: [PATCH] ;lib: note an issue with filterQuery --- hledger-lib/Hledger/Query.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hledger-lib/Hledger/Query.hs b/hledger-lib/Hledger/Query.hs index 07a280cf3..42b468078 100644 --- a/hledger-lib/Hledger/Query.hs +++ b/hledger-lib/Hledger/Query.hs @@ -589,9 +589,12 @@ filterQuery :: (Query -> Bool) -> Query -> Query filterQuery p = simplifyQuery . filterQuery' p -- | Like filterQuery, but returns the filtered query as is, without simplifying. +-- Note this is problematic for complex boolean queries, which if split apart +-- by filterQuery and then re-composed, may be altered. See eg #2371. filterQuery' :: (Query -> Bool) -> Query -> Query -filterQuery' p (And qs) = And $ map (filterQuery p) qs -filterQuery' p (Or qs) = Or $ map (filterQuery p) qs +filterQuery' p (And qs) = And $ map (filterQuery' p) qs +filterQuery' p (Or qs) = Or $ map (filterQuery' p) qs +-- filterQuery' p (Or qs) = Or $ filter (not.(==Any)) $ map (filterQuery' p) qs -- better for some, worse for others filterQuery' p q = if p q then q else Any -- | Remove query terms (or whole sub-expressions) from this query