[evolvis-commits] r9951: initial commit of stored procs to add counters to taskman↵

mirabilos at evolvis.org mirabilos at evolvis.org
Thu Feb 24 17:34:28 CET 2011


Author: mirabilos
Date: 2011-02-24 17:34:27 +0100 (Thu, 24 Feb 2011)
New Revision: 9951

Added:
   trunk/gforge_base/evolvisforge-5.1/gforge/db/20040914.sql
Log:
initial commit of stored procs to add counters to taskman


Added: trunk/gforge_base/evolvisforge-5.1/gforge/db/20040914.sql
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/gforge/db/20040914.sql	                        (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/gforge/db/20040914.sql	2011-02-24 16:34:27 UTC (rev 9951)
@@ -0,0 +1,115 @@
+CREATE TABLE project_counts_agg (
+        group_project_id integer NOT NULL,
+        count integer DEFAULT 0 NOT NULL,
+        open_count integer DEFAULT 0
+);
+
+INSERT INTO project_counts_agg 
+	SELECT group_project_id, 
+	(SELECT count(*) FROM project_task WHERE status_id != 3 AND 
+		project_task.group_project_id=project_group_list.group_project_id),
+	(SELECT count(*) FROM project_task WHERE status_id = 2 AND 
+		project_task.group_project_id=project_group_list.group_project_id)
+	FROM project_group_list;
+
+CREATE FUNCTION projectgrouplist_insert_agg () RETURNS opaque AS '
+BEGIN
+    INSERT INTO project_counts_agg (group_project_id,count,open_count)
+        VALUES (NEW.group_project_id,0,0);
+        RETURN NEW;
+END;
+' LANGUAGE 'plpgsql';
+
+
+CREATE FUNCTION projectgroup_update_agg () RETURNS opaque AS '
+BEGIN
+    --
+    -- see if they are moving to a new subproject
+    -- if so, its a more complex operation
+    --
+    IF NEW.group_project_id <> OLD.group_project_id THEN
+        --
+        -- transferred tasks always have a status of 1
+        -- so we will increment the new subprojects sums
+        --
+        IF OLD.status_id=3 THEN
+            -- No need to decrement counters on old tracker
+        ELSE
+            IF OLD.status_id=2 THEN
+                UPDATE project_counts_agg SET count=count-1
+                    WHERE group_project_id=OLD.group_project_id;
+            ELSE
+                IF OLD.status_id=1 THEN
+                    UPDATE project_counts_agg SET count=count-1,open_count=open_count-1
+                        WHERE group_project_id=OLD.group_project_id;
+                END IF;
+            END IF;
+        END IF;
+
+        IF NEW.status_id=3 THEN
+            --DO NOTHING
+        ELSE
+            IF NEW.status_id=2 THEN
+                    UPDATE project_counts_agg SET count=count+1
+                        WHERE group_project_id=NEW.group_project_id;
+            ELSE
+                IF NEW.status_id=1 THEN
+                    UPDATE project_counts_agg SET count=count+1, open_count=open_count+1
+                        WHERE group_project_id=NEW.group_project_id;
+                END IF;
+            END IF;
+        END IF;
+    ELSE
+        --
+        -- just need to evaluate the status flag and
+        -- increment/decrement the counter as necessary
+        --
+        IF NEW.status_id <> OLD.status_id THEN
+            IF NEW.status_id = 1 THEN
+                IF OLD.status_id=2 THEN
+                    UPDATE project_counts_agg SET open_count=open_count+1
+                        WHERE group_project_id=NEW.group_project_id;
+                ELSE
+                    IF OLD.status_id=3 THEN
+                        UPDATE project_counts_agg SET open_count=open_count+1, count=count+1
+                            WHERE group_project_id=NEW.group_project_id;
+                    END IF;
+                END IF;
+            ELSE
+                IF NEW.status_id = 2 THEN
+                    IF OLD.status_id=1 THEN
+                        UPDATE project_counts_agg SET open_count=open_count-1
+                            WHERE group_project_id=NEW.group_project_id;
+                    ELSE
+                        IF OLD.status_id=3 THEN
+                            UPDATE project_counts_agg SET count=count+1
+                                WHERE group_project_id=NEW.group_project_id;
+                        END IF;
+                    END IF;
+                ELSE
+                    IF NEW.status_id = 3 THEN
+                        IF OLD.status_id=2 THEN
+                            UPDATE project_counts_agg SET count=count-1
+                                WHERE group_project_id=NEW.group_project_id;
+                        ELSE
+                            IF OLD.status_id=1 THEN
+                                UPDATE project_counts_agg SET open_count=open_count-1,count=count-1
+                                    WHERE group_project_id=NEW.group_project_id;
+                            END IF;
+                        END IF;
+                    END IF;
+                END IF;
+            END IF;
+        END IF;
+    END IF;
+    RETURN NEW;
+END;
+' LANGUAGE 'plpgsql';
+
+CREATE TRIGGER projectgrouplist_insert_trig AFTER INSERT ON artifact_group_list
+FOR EACH ROW EXECUTE PROCEDURE projectgrouplist_insert_agg ();
+
+
+CREATE TRIGGER projectgroup_update_trig AFTER UPDATE ON artifact
+FOR EACH ROW EXECUTE PROCEDURE projectgroup_update_agg ();
+



More information about the evolvis-commits mailing list