Subtask count includes all descendents

pull/3385/head
Alex Baker 9 months ago
parent bfea931495
commit aafe4b37b0

@ -120,14 +120,27 @@ internal object TaskListQueryRecursive {
ROW_NUMBER() OVER () AS sequence ROW_NUMBER() OVER () AS sequence
FROM recursive_tasks FROM recursive_tasks
), ),
child_counts AS ( descendants_recursive AS (
SELECT parent, SELECT
COUNT(*) AS children parent,
FROM max_indent task as descendant,
WHERE parent_complete as completed
parent > 0 FROM recursive_tasks
AND indent = max_indent WHERE parent > 0
AND indent > 0 UNION ALL
SELECT
d.parent,
r.task as descendant,
r.parent_complete as completed
FROM recursive_tasks r
JOIN descendants_recursive d ON r.parent = d.descendant
),
descendants AS (
SELECT
parent,
COUNT(DISTINCT CASE WHEN completed > 0 THEN descendant ELSE NULL END) as completed_children,
COUNT(DISTINCT CASE WHEN completed = 0 THEN descendant ELSE NULL END) as uncompleted_children
FROM descendants_recursive
GROUP BY parent GROUP BY parent
) )
SELECT SELECT
@ -135,7 +148,10 @@ internal object TaskListQueryRecursive {
group_concat(distinct(tag_uid)) AS tags, group_concat(distinct(tag_uid)) AS tags,
indent, indent,
sort_group, sort_group,
children, CASE
WHEN parent_complete > 0 THEN completed_children
ELSE uncompleted_children
END as children,
primary_sort, primary_sort,
secondary_sort, secondary_sort,
parent_complete parent_complete
@ -144,7 +160,7 @@ internal object TaskListQueryRecursive {
ON tasks._id = max_indent.task ON tasks._id = max_indent.task
AND indent = max_indent AND indent = max_indent
AND hidden = 0 AND hidden = 0
LEFT JOIN child_counts ON child_counts.parent = tasks._id LEFT JOIN descendants ON descendants.parent = tasks._id
LEFT JOIN tags ON tags.task = tasks._id LEFT JOIN tags ON tags.task = tasks._id
${TaskListQuery.JOINS} ${TaskListQuery.JOINS}
GROUP BY tasks._id GROUP BY tasks._id

Loading…
Cancel
Save