From ca465e5c2a6680a0f12d293c47f0e7f05a5eb9dc Mon Sep 17 00:00:00 2001 From: Bartek Wrona <wrona@syncad.com> Date: Thu, 23 Jul 2020 20:32:23 +0200 Subject: [PATCH] Fixed query counting children for posts collected during sync. --- hive/db/schema.py | 54 +++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/hive/db/schema.py b/hive/db/schema.py index 89f1a5edc..6cbb703ec 100644 --- a/hive/db/schema.py +++ b/hive/db/schema.py @@ -653,40 +653,40 @@ def setup(db): db.query_no_return(sql) sql = """ - DROP FUNCTION if exists update_hive_posts_children_count() - ; - CREATE OR REPLACE FUNCTION update_hive_posts_children_count() - RETURNS VOID - LANGUAGE plpgsql - AS - $function$ + DROP FUNCTION IF EXISTS public.update_hive_posts_children_count(); + + CREATE OR REPLACE FUNCTION public.update_hive_posts_children_count() + RETURNS void + LANGUAGE 'plpgsql' + + COST 100 + STABLE + AS $BODY$ BEGIN update hive_posts uhp - set children = data_source.childrencount + set children = data_source.children_count from ( - WITH RECURSIVE ChildrenCTE AS ( - SELECT ID as RootId, ID - FROM hive_posts hp - where hp.parent_id != 0 - UNION ALL - SELECT cte.RootID, d.ID - FROM ChildrenCTE cte - INNER JOIN hive_posts d ON d.parent_id = cte.ID - ) - SELECT d.ID, d.parent_id, cnt.ChildrenCount - FROM hive_posts d - INNER JOIN ( - SELECT RootID as ID, COUNT(*) - 1 as ChildrenCount - FROM ChildrenCTE - GROUP BY RootID - ) cnt ON cnt.ID = d.ID - ) as data_source - where uhp.id = data_source.id + WITH recursive tblChild AS + ( + SELECT s.queried_parent, s.id + from + (SELECT h1.Parent_Id as queried_parent, h1.id + FROM hive_posts h1 WHERE h1.depth > 0 + order by h1.depth desc + ) s + UNION ALL + SELECT tblChild.queried_parent, p.id FROM hive_posts p JOIN tblChild ON p.Parent_Id = tblChild.Id + ) + SELECT queried_parent, cast(count(1) as smallint) as children_count + FROM tblChild + group by queried_parent + ) data_source + where uhp.id = data_source.queried_parent ; END - $function$ + $BODY$; """ db.query_no_return(sql) -- GitLab