comparison PostgreSQL/Plugins/CreateInstance.sql @ 71:d40c5fecd160 db-changes

new extension implemented for PostgreSQL: CreateInstance
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Jan 2019 13:51:52 +0100
parents
children 8dd29af7c844
comparison
equal deleted inserted replaced
70:e6c13ddd26d9 71:d40c5fecd160
1 CREATE FUNCTION CreateInstance(
2 IN patient TEXT,
3 IN study TEXT,
4 IN series TEXT,
5 IN instance TEXT,
6 OUT isNewPatient BIGINT,
7 OUT isNewStudy BIGINT,
8 OUT isNewSeries BIGINT,
9 OUT isNewInstance BIGINT,
10 OUT patientKey BIGINT,
11 OUT studyKey BIGINT,
12 OUT seriesKey BIGINT,
13 OUT instanceKey BIGINT) AS $$
14 BEGIN
15 SELECT internalId FROM Resources INTO instanceKey WHERE publicId = instance AND resourceType = 3;
16
17 IF NOT (instanceKey IS NULL) THEN
18 -- This instance already exists, stop here
19 isNewInstance := 0;
20 ELSE
21 SELECT internalId FROM Resources INTO patientKey WHERE publicId = patient AND resourceType = 0;
22 SELECT internalId FROM Resources INTO studyKey WHERE publicId = study AND resourceType = 1;
23 SELECT internalId FROM Resources INTO seriesKey WHERE publicId = series AND resourceType = 2;
24
25 IF patientKey IS NULL THEN
26 -- Must create a new patient
27 ASSERT studyKey IS NULL;
28 ASSERT seriesKey IS NULL;
29 ASSERT instanceKey IS NULL;
30 INSERT INTO Resources VALUES (DEFAULT, 0, patient, NULL) RETURNING internalId INTO patientKey;
31 isNewPatient := 1;
32 ELSE
33 isNewPatient := 0;
34 END IF;
35
36 ASSERT NOT patientKey IS NULL;
37
38 IF studyKey IS NULL THEN
39 -- Must create a new study
40 ASSERT seriesKey IS NULL;
41 ASSERT instanceKey IS NULL;
42 INSERT INTO Resources VALUES (DEFAULT, 1, study, patientKey) RETURNING internalId INTO studyKey;
43 isNewStudy := 1;
44 ELSE
45 isNewStudy := 0;
46 END IF;
47
48 ASSERT NOT studyKey IS NULL;
49
50 IF seriesKey IS NULL THEN
51 -- Must create a new series
52 ASSERT instanceKey IS NULL;
53 INSERT INTO Resources VALUES (DEFAULT, 2, series, studyKey) RETURNING internalId INTO seriesKey;
54 isNewSeries := 1;
55 ELSE
56 isNewSeries := 0;
57 END IF;
58
59 ASSERT NOT seriesKey IS NULL;
60 ASSERT instanceKey IS NULL;
61
62 INSERT INTO Resources VALUES (DEFAULT, 3, instance, seriesKey) RETURNING internalId INTO instanceKey;
63 isNewInstance := 1;
64 END IF;
65 END;
66 $$ LANGUAGE plpgsql;