Mercurial > hg > orthanc-databases
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; |