Skip to content
Snippets Groups Projects
Commit 5017d462 authored by Ruud Overeem's avatar Ruud Overeem
Browse files

Task #8531: New getTreeGroup function major rewritten to include or exclude clusters.

parent 835434aa
No related branches found
No related tags found
No related merge requests found
--
-- getTreesInPeriod.sql: function for getting treeinfo from the OTDB
-- getTreeGroup.sql: function for getting treeinfo from the OTDB
--
-- Copyright (C) 2005
-- ASTRON (Netherlands Foundation for Research in Astronomy)
......@@ -23,7 +23,7 @@
--
--
-- getTreesInPeriod (groupType, periodInMinutes)
-- getTreeGroup (groupType, periodInMinutes)
--
-- groupType = 0: get all trees that have to be scheduled
-- 1: get all trees that are scheduled to start in the period: now till now+period
......@@ -41,7 +41,7 @@
--
-- Types: treeInfo
--
CREATE OR REPLACE FUNCTION getTreeGroup(INT, INT)
CREATE OR REPLACE FUNCTION getTreeGroup(INT, INT, VARCHAR(20))
RETURNS SETOF treeInfo AS $$
-- $Id: addComponentToVT_func.sql 19935 2012-01-25 09:06:14Z mol $
DECLARE
......@@ -53,31 +53,36 @@ CREATE OR REPLACE FUNCTION getTreeGroup(INT, INT)
TSfinished CONSTANT INT2 := 1000;
TThierarchy CONSTANT INT2 := 30;
TCoperational CONSTANT INT2 := 3;
vWhere TEXT;
vQuery TEXT;
vSortOrder TEXT;
vExcept TEXT;
vCluster TEXT;
BEGIN
vQuery := '';
vWhere := '';
vQuery := 'SELECT v.* FROM VICtrees v';
vSortOrder := 't.starttime, t.treeID';
vExcept := '';
IF $1 = 0 THEN
vQuery := ' AND (t.stoptime > now() OR t.stoptime IS NULL) ';
vWhere := ' AND (t.stoptime > now() OR t.stoptime IS NULL) ';
ELSE
IF $1 = 1 THEN
vQuery := ' AND (t.state = ' || TSscheduled || ' OR t.state = ' || TSqueued || ') ';
vQuery := vQuery || ' AND t.starttime >= now() AND t.starttime < now()+interval ' || chr(39) || $2 || ' minutes' || chr(39);
vWhere := ' AND (t.state = ' || TSscheduled || ' OR t.state = ' || TSqueued || ') ';
vWhere := vWhere || ' AND t.starttime >= now() AND t.starttime < now()+interval ' || chr(39) || $2 || ' minutes' || chr(39);
ELSE
IF $1 = 2 THEN
vQuery := ' AND t.state > ' || TSscheduled || ' AND t.state < ' || TScompleting;
vQuery := vQuery || ' AND t.stoptime>now()-interval ' || chr(39) || $2 || ' minutes' || chr(39);
vWhere := ' AND t.state > ' || TSscheduled || ' AND t.state < ' || TScompleting;
vWhere := vWhere || ' AND t.stoptime>now()-interval ' || chr(39) || $2 || ' minutes' || chr(39);
ELSE
IF $1 = 3 THEN
vQuery := ' AND t.state >= ' || TScompleting;
vQuery := vQuery || ' AND t.stoptime > now()-interval ' || chr(39) || $2 || ' minutes' || chr(39);
vWhere := ' AND t.state >= ' || TScompleting;
vWhere := vWhere || ' AND t.stoptime > now()-interval ' || chr(39) || $2 || ' minutes' || chr(39);
vSortOrder := 't.stoptime, t.treeID';
ELSE
IF $1 = 4 THEN
vQuery := ' AND t.state >= ' || TSapproved;
vQuery := vQuery || ' AND t.stoptime < now() ';
vWhere := ' AND t.state >= ' || TSapproved;
vWhere := vWhere || ' AND t.stoptime < now() ';
vSortOrder := 't.treeID';
ELSE
RAISE EXCEPTION 'groupType must be 0,1,2,3 or 4 not %', $1;
......@@ -86,33 +91,53 @@ CREATE OR REPLACE FUNCTION getTreeGroup(INT, INT)
END IF;
END IF;
END IF;
IF $3 != '' THEN
vExcept := '
SELECT x.* FROM VICtrees x INNER JOIN VIChierarchy h USING(treeid)
WHERE x.processtype = \'Pipeline\'
AND h.name = \'LOFAR.ObsSW.Observation.Cluster.ProcessingCluster.clusterName\'
AND h.value='|| chr(39);
IF LEFT($3,1) = '!' THEN
vCluster := substring($3 from 2);
vExcept := ' EXCEPT ' || vExcept || vCluster || chr(39);
ELSE
vCluster := $3;
vQuery := vExcept || vCluster || chr(39);
vExcept := '';
END IF;
raise warning 'query = >>%<<', vQuery;
raise warning 'except = >>%<<', vExcept;
END IF;
-- do selection
FOR vRecord IN EXECUTE '
SELECT t.treeID,
t.momID,
t.groupID,
t.classif,
u.username,
t.d_creation,
t.modificationdate,
t.treetype,
t.state,
t.originID,
c.name,
t.starttime,
t.stoptime,
t.processType,
t.processSubtype,
t.strategy,
t.description
FROM OTDBtree t
INNER JOIN OTDBuser u ON t.creator = u.userid
INNER JOIN campaign c ON c.ID = t.campaign
WHERE t.treetype = 30
AND t.classif = 3
' || vQuery || '
ORDER BY ' || vSortOrder
WITH VICtrees AS (
SELECT t.treeID,
t.momID,
t.groupID,
t.classif,
u.username,
t.d_creation,
t.modificationdate,
t.treetype,
t.state,
t.originID,
c.name,
t.starttime,
t.stoptime,
t.processType,
t.processSubtype,
t.strategy,
t.description
FROM OTDBtree t
INNER JOIN OTDBuser u ON t.creator = u.userid
INNER JOIN campaign c ON c.ID = t.campaign
WHERE t.treetype = 30
AND t.classif = 3
' || vWhere || '
ORDER BY ' || vSortOrder || ')
' || vQuery || vExcept
LOOP
RETURN NEXT vRecord;
END LOOP;
......
......@@ -9,3 +9,4 @@ CREATE INDEX statehist_creation_idx ON statehistory(creation);
-- Load modified/improved functions
\i exportTree_func.sql
\i getTreeGroup_func.sql
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment