diff --git a/fixme-new/lib/Fixme/Run.hs b/fixme-new/lib/Fixme/Run.hs index bbefdf79..a68b2a30 100644 --- a/fixme-new/lib/Fixme/Run.hs +++ b/fixme-new/lib/Fixme/Run.hs @@ -123,8 +123,8 @@ runFixmeCLI m = do <*> newTVarIO mempty <*> newTVarIO mempty <*> newTVarIO mempty - <*> newTVarIO mempty - <*> newTVarIO mempty + <*> newTVarIO builtinAttribs + <*> newTVarIO builtinAttribVals <*> newTVarIO mempty <*> newTVarIO defCommentMap <*> newTVarIO Nothing @@ -317,6 +317,15 @@ runTop forms = do _ -> throwIO $ BadFormException @C nil + + entry $ bindMatch "delete" $ nil_ \case + [ FixmeHashLike w ] -> lift do + void $ runMaybeT do + key <- lift (selectFixmeKey w) >>= toMPlus + lift $ modifyFixme key [("deleted", "true")] + + _ -> throwIO $ BadFormException @C nil + entry $ bindMatch "dump" $ nil_ $ \case [ FixmeHashLike w ] -> lift $ void $ runMaybeT do key <- lift (selectFixmeKey w) >>= toMPlus diff --git a/fixme-new/lib/Fixme/State.hs b/fixme-new/lib/Fixme/State.hs index 90b401ec..a66ae52d 100644 --- a/fixme-new/lib/Fixme/State.hs +++ b/fixme-new/lib/Fixme/State.hs @@ -218,7 +218,7 @@ genPredQ tbl what = go what let bsql = go b ([qc|{fst asql} or {fst bsql}|], snd asql <> snd bsql) - Ignored -> ("false", mempty) + Ignored -> ("true", mempty) cleanupDatabase :: (FixmePerks m, MonadReader FixmeEnv m) => m () @@ -271,9 +271,8 @@ listFixme :: (FixmePerks m, MonadReader FixmeEnv m, HasPredicate q) listFixme expr = do let (w,bound) = genPredQ "s1" (predicate expr) - let end = case bound of - [] -> " or true" :: String - _ -> " or false" + + let present = [qc|and coalesce(json_extract(s1.blob, '$.deleted'),'false') <> 'true' |] :: String let sql = [qc| with s1 as ( @@ -284,7 +283,7 @@ listFixme expr = do select s1.blob from s1 where {w} - {end} + {present} order by json_extract(s1.blob, '$.commit-time') asc nulls last, json_extract(s1.blob, '$.w') asc nulls last diff --git a/fixme-new/lib/Fixme/Types.hs b/fixme-new/lib/Fixme/Types.hs index a8ed602f..758ac66c 100644 --- a/fixme-new/lib/Fixme/Types.hs +++ b/fixme-new/lib/Fixme/Types.hs @@ -383,6 +383,12 @@ fixmeGetGitDirCLIOpt = do <&> fmap (\d -> [qc|--git-dir {d}|]) <&> fromMaybe "" +builtinAttribs :: HashSet FixmeAttrName +builtinAttribs = HS.singleton "deleted" + +builtinAttribVals :: HashMap FixmeAttrName (HashSet FixmeAttrVal) +builtinAttribVals = HM.fromList [("deleted", HS.fromList ["true","false"])] + newtype FixmeM m a = FixmeM { fromFixmeM :: ReaderT FixmeEnv m a } deriving newtype ( Applicative , Functor @@ -404,8 +410,8 @@ fixmeEnvBare = <*> newTVarIO mempty <*> newTVarIO mempty <*> newTVarIO mempty - <*> newTVarIO mempty - <*> newTVarIO mempty + <*> newTVarIO builtinAttribs + <*> newTVarIO builtinAttribVals <*> newTVarIO mempty <*> newTVarIO defCommentMap <*> newTVarIO Nothing