summaryrefslogtreecommitdiff
path: root/migrations/030_abandon_stale_recurrences.sql
blob: f8ec225e4fc7e24555244216858913f885244826 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- A recurring task that wasn't done before its next iteration arrived is stale,
-- not still-owed: the next one supersedes it. Without a way to record that, every
-- skipped occurrence stayed open forever and piled up as permanent overdue items
-- (found live: "Bills" and "Bones's meds" each sitting in the list twice, an
-- unfinished instance alongside its already-generated successor).
--
-- Deliberately a separate flag rather than reusing `completed`: these were never
-- done, and marking them completed would falsely credit them and pollute
-- completion history.
ALTER TABLE native_tasks ADD COLUMN abandoned BOOLEAN DEFAULT 0;

-- Backfill: any uncompleted recurring instance that already has a later sibling
-- in its series was superseded before this flag existed.
UPDATE native_tasks
SET abandoned = 1
WHERE completed = 0
  AND recurrence_series_id != ''
  AND due_date IS NOT NULL
  AND EXISTS (
    SELECT 1 FROM native_tasks later
    WHERE later.recurrence_series_id = native_tasks.recurrence_series_id
      AND later.due_date > native_tasks.due_date
  );