-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy path107-task-terminology.sql
91 lines (69 loc) · 3.21 KB
/
107-task-terminology.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
START TRANSACTION;
do $$ begin ASSERT (select schemaVersion from webknossos.releaseInformation) = 106, 'Previous schema version mismatch'; end; $$ LANGUAGE plpgsql;
DROP VIEW webknossos.tasks_;
DROP TRIGGER onUpdateAnnotationTrigger ON webknossos.annotations;
DROP TRIGGER onInsertAnnotationTrigger ON webknossos.annotations;
DROP TRIGGER onDeleteAnnotationTrigger ON webknossos.annotations;
DROP TRIGGER onUpdateTaskTrigger ON webknossos.tasks;
DROP FUNCTION webknossos.onUpdateAnnotation;
DROP FUNCTION webknossos.onInsertAnnotation;
DROP FUNCTION webknossos.onDeleteAnnotation;
DROP FUNCTION webknossos.onUpdateTask;
ALTER TABLE webknossos.tasks DROP CONSTRAINT openInstancesLargeEnoughCheck;
ALTER TABLE webknossos.tasks RENAME COLUMN openInstances TO pendingInstances;
ALTER TABLE webknossos.tasks ADD CONSTRAINT pendingInstancesLargeEnoughCheck CHECK (pendingInstances >= 0);
CREATE VIEW webknossos.tasks_ AS SELECT * FROM webknossos.tasks WHERE NOT isDeleted;
CREATE FUNCTION webknossos.onUpdateTask() RETURNS trigger AS $$
BEGIN
IF NEW.totalInstances <> OLD.totalInstances THEN
UPDATE webknossos.tasks SET pendingInstances = pendingInstances + (NEW.totalInstances - OLD.totalInstances) WHERE _id = NEW._id;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER onUpdateTaskTrigger
AFTER UPDATE ON webknossos.tasks
FOR EACH ROW EXECUTE PROCEDURE webknossos.onUpdateTask();
CREATE FUNCTION webknossos.onInsertAnnotation() RETURNS trigger AS $$
BEGIN
IF (NEW.typ = 'Task') AND (NEW.isDeleted = false) AND (NEW.state != 'Cancelled') THEN
UPDATE webknossos.tasks SET pendingInstances = pendingInstances - 1 WHERE _id = NEW._task;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER onInsertAnnotationTrigger
AFTER INSERT ON webknossos.annotations
FOR EACH ROW EXECUTE PROCEDURE webknossos.onInsertAnnotation();
CREATE OR REPLACE FUNCTION webknossos.onUpdateAnnotation() RETURNS trigger AS $$
BEGIN
IF (NEW._task != OLD._task) OR (NEW.typ != OLD.typ) THEN
RAISE EXCEPTION 'annotation columns _task and typ are immutable';
END IF;
IF (webknossos.countsAsTaskInstance(OLD) AND NOT webknossos.countsAsTaskInstance(NEW))
THEN
UPDATE webknossos.tasks SET pendingInstances = pendingInstances + 1 WHERE _id = NEW._task;
END IF;
IF (NOT webknossos.countsAsTaskInstance(OLD) AND webknossos.countsAsTaskInstance(NEW))
THEN
UPDATE webknossos.tasks SET pendingInstances = pendingInstances - 1 WHERE _id = NEW._task;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER onUpdateAnnotationTrigger
AFTER UPDATE ON webknossos.annotations
FOR EACH ROW EXECUTE PROCEDURE webknossos.onUpdateAnnotation();
CREATE FUNCTION webknossos.onDeleteAnnotation() RETURNS trigger AS $$
BEGIN
IF (OLD.typ = 'Task') AND (OLD.isDeleted = false) AND (OLD.state != 'Cancelled') THEN
UPDATE webknossos.tasks SET pendingInstances = pendingInstances + 1 WHERE _id = OLD._task;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER onDeleteAnnotationTrigger
AFTER DELETE ON webknossos.annotations
FOR EACH ROW EXECUTE PROCEDURE webknossos.onDeleteAnnotation();
UPDATE webknossos.releaseInformation SET schemaVersion = 107;
COMMIT TRANSACTION;