Mercurial > hg > orthanc-databases
annotate Framework/Plugins/IndexBackend.cpp @ 566:a7f841fc4a9f find-refactoring
fix builds on older compilers
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sun, 22 Sep 2024 10:06:51 +0200 |
parents | 373cf7d747cc |
children | 77c8544bbd7d |
rev | line source |
---|---|
0 | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | |
4 * Department, University Hospital of Liege, Belgium | |
507
54d518dcd74a
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
505
diff
changeset
|
5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
54d518dcd74a
updated copyright, as Orthanc Team now replaces Osimis
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
505
diff
changeset
|
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
459
ecd0b719cff5
update year to 2024
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
426
diff
changeset
|
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium |
0 | 8 * |
9 * This program is free software: you can redistribute it and/or | |
10 * modify it under the terms of the GNU Affero General Public License | |
11 * as published by the Free Software Foundation, either version 3 of | |
12 * the License, or (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, but | |
15 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 * Affero General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU Affero General Public License | |
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
21 **/ | |
22 | |
23 | |
24 #include "IndexBackend.h" | |
25 | |
26 #include "../Common/BinaryStringValue.h" | |
27 #include "../Common/Integer64Value.h" | |
28 #include "../Common/Utf8StringValue.h" | |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
29 #include "DatabaseBackendAdapterV2.h" |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
30 #include "DatabaseBackendAdapterV3.h" |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
31 #include "DatabaseBackendAdapterV4.h" |
0 | 32 #include "GlobalProperties.h" |
33 | |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
34 #include <Compatibility.h> // For std::unique_ptr<> |
152 | 35 #include <Logging.h> |
36 #include <OrthancException.h> | |
447 | 37 #include <Toolbox.h> |
0 | 38 |
39 | |
40 namespace OrthancDatabases | |
41 { | |
42 static std::string ConvertWildcardToLike(const std::string& query) | |
43 { | |
44 std::string s = query; | |
45 | |
46 for (size_t i = 0; i < s.size(); i++) | |
47 { | |
48 if (s[i] == '*') | |
49 { | |
50 s[i] = '%'; | |
51 } | |
52 else if (s[i] == '?') | |
53 { | |
54 s[i] = '_'; | |
55 } | |
56 } | |
57 | |
65 | 58 // TODO Escape underscores and percents |
59 | |
0 | 60 return s; |
61 } | |
62 | |
63 | |
64 template <typename T> | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
65 static void ReadListOfIntegers(std::list<T>& target, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
66 DatabaseManager::CachedStatement& statement, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
67 const Dictionary& args) |
0 | 68 { |
69 statement.Execute(args); | |
70 | |
71 target.clear(); | |
72 | |
73 if (!statement.IsDone()) | |
74 { | |
75 if (statement.GetResultFieldsCount() != 1) | |
76 { | |
77 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
78 } | |
79 | |
80 statement.SetResultFieldType(0, ValueType_Integer64); | |
81 | |
82 while (!statement.IsDone()) | |
83 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
84 target.push_back(static_cast<T>(statement.ReadInteger64(0))); |
0 | 85 statement.Next(); |
86 } | |
87 } | |
88 } | |
89 | |
90 | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
91 static void ReadListOfStrings(std::list<std::string>& target, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
92 DatabaseManager::CachedStatement& statement, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
93 const Dictionary& args) |
0 | 94 { |
95 statement.Execute(args); | |
96 | |
97 target.clear(); | |
98 | |
99 if (!statement.IsDone()) | |
100 { | |
101 if (statement.GetResultFieldsCount() != 1) | |
102 { | |
103 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
104 } | |
105 | |
106 while (!statement.IsDone()) | |
107 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
108 target.push_back(statement.ReadString(0)); |
0 | 109 statement.Next(); |
110 } | |
111 } | |
112 } | |
113 | |
114 | |
566
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
115 namespace // Anonymous namespace to avoid clashes between compilation modules |
0 | 116 { |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
117 struct Change |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
118 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
119 int64_t seq_; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
120 int32_t changeType_; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
121 OrthancPluginResourceType resourceType_; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
122 std::string publicId_; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
123 std::string changeDate_; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
124 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
125 Change(int64_t seq, int32_t changeType, OrthancPluginResourceType resourceType, const std::string& publicId, const std::string& changeDate) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
126 : seq_(seq), changeType_(changeType), resourceType_(resourceType), publicId_(publicId), changeDate_(changeDate) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
127 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
128 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
129 }; |
566
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
130 } |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
131 |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
132 |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
133 void IndexBackend::ReadChangesInternal(IDatabaseBackendOutput& output, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
134 bool& done, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
135 DatabaseManager& manager, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
136 DatabaseManager::CachedStatement& statement, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
137 const Dictionary& args, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
138 uint32_t limit, |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
139 bool returnFirstResults) |
a7f841fc4a9f
fix builds on older compilers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
565
diff
changeset
|
140 { |
0 | 141 statement.Execute(args); |
142 | |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
143 std::list<Change> changes; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
144 while (!statement.IsDone()) |
0 | 145 { |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
146 changes.push_back(Change( |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
147 statement.ReadInteger64(0), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
148 statement.ReadInteger32(1), |
310
f3eac614b32e
fixed two DatabaseManager::CachedStatement in the same scope
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
307
diff
changeset
|
149 static_cast<OrthancPluginResourceType>(statement.ReadInteger32(2)), |
f3eac614b32e
fixed two DatabaseManager::CachedStatement in the same scope
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
307
diff
changeset
|
150 statement.ReadString(3), |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
151 statement.ReadString(4) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
152 )); |
0 | 153 |
154 statement.Next(); | |
155 } | |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
156 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
157 done = changes.size() <= limit; // 'done' means we have returned all requested changes |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
158 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
159 // if we have retrieved more changes than requested -> cleanup |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
160 if (changes.size() > limit) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
161 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
162 assert(changes.size() == limit+1); // the statement should only request 1 element more |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
163 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
164 if (returnFirstResults) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
165 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
166 changes.pop_back(); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
167 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
168 else |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
169 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
170 changes.pop_front(); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
171 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
172 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
173 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
174 for (std::list<Change>::const_iterator it = changes.begin(); it != changes.end(); ++it) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
175 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
176 output.AnswerChange(it->seq_, it->changeType_, it->resourceType_, it->publicId_, it->changeDate_); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
177 } |
0 | 178 } |
179 | |
180 | |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
181 void IndexBackend::ReadExportedResourcesInternal(IDatabaseBackendOutput& output, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
182 bool& done, |
0 | 183 DatabaseManager::CachedStatement& statement, |
184 const Dictionary& args, | |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
185 uint32_t limit) |
0 | 186 { |
187 statement.Execute(args); | |
188 | |
189 uint32_t count = 0; | |
190 | |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
191 while (count < limit && |
0 | 192 !statement.IsDone()) |
193 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
194 int64_t seq = statement.ReadInteger64(0); |
0 | 195 OrthancPluginResourceType resourceType = |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
196 static_cast<OrthancPluginResourceType>(statement.ReadInteger32(1)); |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
197 std::string publicId = statement.ReadString(2); |
0 | 198 |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
199 output.AnswerExportedResource(seq, |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
200 resourceType, |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
201 publicId, |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
202 statement.ReadString(3), // modality |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
203 statement.ReadString(8), // date |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
204 statement.ReadString(4), // patient ID |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
205 statement.ReadString(5), // study instance UID |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
206 statement.ReadString(6), // series instance UID |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
207 statement.ReadString(7)); // sop instance UID |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
208 |
0 | 209 statement.Next(); |
210 count++; | |
211 } | |
212 | |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
213 done = (count < limit || |
0 | 214 statement.IsDone()); |
215 } | |
216 | |
433
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
217 void IndexBackend::ClearRemainingAncestor(DatabaseManager& manager) |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
218 { |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
219 DatabaseManager::CachedStatement statement( |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
220 STATEMENT_FROM_HERE, manager, |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
221 "DELETE FROM RemainingAncestor"); |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
222 |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
223 statement.Execute(); |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
224 } |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
225 |
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
226 |
0 | 227 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
228 void IndexBackend::ClearDeletedFiles(DatabaseManager& manager) |
0 | 229 { |
230 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
231 STATEMENT_FROM_HERE, manager, |
0 | 232 "DELETE FROM DeletedFiles"); |
233 | |
234 statement.Execute(); | |
235 } | |
236 | |
237 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
238 void IndexBackend::ClearDeletedResources(DatabaseManager& manager) |
0 | 239 { |
240 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
241 STATEMENT_FROM_HERE, manager, |
0 | 242 "DELETE FROM DeletedResources"); |
243 | |
244 statement.Execute(); | |
245 } | |
246 | |
247 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
248 void IndexBackend::SignalDeletedFiles(IDatabaseBackendOutput& output, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
249 DatabaseManager& manager) |
0 | 250 { |
251 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
252 STATEMENT_FROM_HERE, manager, |
314
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
253 "SELECT uuid, fileType, uncompressedSize, uncompressedHash, compressionType, " |
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
254 "compressedSize, compressedHash FROM DeletedFiles"); |
0 | 255 |
256 statement.SetReadOnly(true); | |
257 statement.Execute(); | |
258 | |
259 while (!statement.IsDone()) | |
260 { | |
314
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
261 output.SignalDeletedAttachment(statement.ReadString(0), |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
262 statement.ReadInteger32(1), |
314
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
263 statement.ReadInteger64(2), |
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
264 statement.ReadString(3), |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
265 statement.ReadInteger32(4), |
314
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
266 statement.ReadInteger64(5), |
64763998cdff
clarification in IndexBackend::SignalDeletedFiles()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
310
diff
changeset
|
267 statement.ReadString(6)); |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
268 |
0 | 269 statement.Next(); |
270 } | |
271 } | |
272 | |
273 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
274 void IndexBackend::SignalDeletedResources(IDatabaseBackendOutput& output, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
275 DatabaseManager& manager) |
0 | 276 { |
277 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
278 STATEMENT_FROM_HERE, manager, |
307
8de3a1ecac11
MySQL: Added missing calls to OrthancPluginDatabaseSignalDeletedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
306
diff
changeset
|
279 "SELECT resourceType, publicId FROM DeletedResources"); |
0 | 280 |
281 statement.SetReadOnly(true); | |
282 statement.Execute(); | |
283 | |
284 while (!statement.IsDone()) | |
285 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
286 output.SignalDeletedResource( |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
287 statement.ReadString(1), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
288 static_cast<OrthancPluginResourceType>(statement.ReadInteger32(0))); |
0 | 289 |
290 statement.Next(); | |
291 } | |
292 } | |
293 | |
294 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
295 IndexBackend::IndexBackend(OrthancPluginContext* context) : |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
296 context_(context) |
0 | 297 { |
298 } | |
299 | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
300 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
301 void IndexBackend::SetOutputFactory(IDatabaseBackendOutput::IFactory* factory) |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
302 { |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
303 boost::unique_lock<boost::shared_mutex> lock(outputFactoryMutex_); |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
304 |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
305 if (factory == NULL) |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
306 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
307 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
308 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
309 else if (outputFactory_.get() != NULL) |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
310 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
311 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
312 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
313 else |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
314 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
315 outputFactory_.reset(factory); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
316 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
317 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
318 |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
319 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
320 IDatabaseBackendOutput* IndexBackend::CreateOutput() |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
321 { |
232
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
322 boost::shared_lock<boost::shared_mutex> lock(outputFactoryMutex_); |
4e15eace9b90
reorganization in DatabaseBackendAdapterV3
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
226
diff
changeset
|
323 |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
324 if (outputFactory_.get() == NULL) |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
325 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
326 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
327 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
328 else |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
329 { |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
330 return outputFactory_->CreateOutput(); |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
331 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
332 } |
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
333 |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
334 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
335 static void ExecuteAddAttachment(DatabaseManager::CachedStatement& statement, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
336 Dictionary& args, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
337 int64_t id, |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
338 const OrthancPluginAttachment& attachment) |
0 | 339 { |
340 statement.SetParameterType("id", ValueType_Integer64); | |
341 statement.SetParameterType("type", ValueType_Integer64); | |
342 statement.SetParameterType("uuid", ValueType_Utf8String); | |
343 statement.SetParameterType("compressed", ValueType_Integer64); | |
344 statement.SetParameterType("uncompressed", ValueType_Integer64); | |
345 statement.SetParameterType("compression", ValueType_Integer64); | |
346 statement.SetParameterType("hash", ValueType_Utf8String); | |
347 statement.SetParameterType("hash-compressed", ValueType_Utf8String); | |
348 | |
349 args.SetIntegerValue("id", id); | |
350 args.SetIntegerValue("type", attachment.contentType); | |
351 args.SetUtf8Value("uuid", attachment.uuid); | |
352 args.SetIntegerValue("compressed", attachment.compressedSize); | |
353 args.SetIntegerValue("uncompressed", attachment.uncompressedSize); | |
354 args.SetIntegerValue("compression", attachment.compressionType); | |
355 args.SetUtf8Value("hash", attachment.uncompressedHash); | |
356 args.SetUtf8Value("hash-compressed", attachment.compressedHash); | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
357 |
0 | 358 statement.Execute(args); |
359 } | |
360 | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
361 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
362 void IndexBackend::AddAttachment(DatabaseManager& manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
363 int64_t id, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
364 const OrthancPluginAttachment& attachment, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
365 int64_t revision) |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
366 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
367 if (HasRevisionsSupport()) |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
368 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
369 DatabaseManager::CachedStatement statement( |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
370 STATEMENT_FROM_HERE, manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
371 "INSERT INTO AttachedFiles VALUES(${id}, ${type}, ${uuid}, ${compressed}, " |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
372 "${uncompressed}, ${compression}, ${hash}, ${hash-compressed}, ${revision})"); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
373 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
374 Dictionary args; |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
375 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
376 statement.SetParameterType("revision", ValueType_Integer64); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
377 args.SetIntegerValue("revision", revision); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
378 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
379 ExecuteAddAttachment(statement, args, id, attachment); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
380 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
381 else |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
382 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
383 DatabaseManager::CachedStatement statement( |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
384 STATEMENT_FROM_HERE, manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
385 "INSERT INTO AttachedFiles VALUES(${id}, ${type}, ${uuid}, ${compressed}, " |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
386 "${uncompressed}, ${compression}, ${hash}, ${hash-compressed})"); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
387 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
388 Dictionary args; |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
389 ExecuteAddAttachment(statement, args, id, attachment); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
390 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
391 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
392 |
0 | 393 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
394 void IndexBackend::AttachChild(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
395 int64_t parent, |
0 | 396 int64_t child) |
397 { | |
398 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
399 STATEMENT_FROM_HERE, manager, |
0 | 400 "UPDATE Resources SET parentId = ${parent} WHERE internalId = ${child}"); |
401 | |
402 statement.SetParameterType("parent", ValueType_Integer64); | |
403 statement.SetParameterType("child", ValueType_Integer64); | |
404 | |
405 Dictionary args; | |
406 args.SetIntegerValue("parent", parent); | |
407 args.SetIntegerValue("child", child); | |
408 | |
409 statement.Execute(args); | |
410 } | |
411 | |
412 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
413 void IndexBackend::ClearChanges(DatabaseManager& manager) |
0 | 414 { |
415 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
416 STATEMENT_FROM_HERE, manager, |
0 | 417 "DELETE FROM Changes"); |
418 | |
419 statement.Execute(); | |
420 } | |
421 | |
422 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
423 void IndexBackend::ClearExportedResources(DatabaseManager& manager) |
0 | 424 { |
425 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
426 STATEMENT_FROM_HERE, manager, |
0 | 427 "DELETE FROM ExportedResources"); |
428 | |
429 statement.Execute(); | |
430 } | |
431 | |
432 | |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
433 void IndexBackend::DeleteAttachment(IDatabaseBackendOutput& output, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
434 DatabaseManager& manager, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
435 int64_t id, |
0 | 436 int32_t attachment) |
437 { | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
438 ClearDeletedFiles(manager); |
0 | 439 |
440 { | |
441 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
442 STATEMENT_FROM_HERE, manager, |
0 | 443 "DELETE FROM AttachedFiles WHERE id=${id} AND fileType=${type}"); |
444 | |
445 statement.SetParameterType("id", ValueType_Integer64); | |
446 statement.SetParameterType("type", ValueType_Integer64); | |
447 | |
448 Dictionary args; | |
449 args.SetIntegerValue("id", id); | |
450 args.SetIntegerValue("type", static_cast<int>(attachment)); | |
451 | |
452 statement.Execute(args); | |
453 } | |
454 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
455 SignalDeletedFiles(output, manager); |
0 | 456 } |
457 | |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
458 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
459 void IndexBackend::DeleteMetadata(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
460 int64_t id, |
0 | 461 int32_t metadataType) |
462 { | |
463 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
464 STATEMENT_FROM_HERE, manager, |
0 | 465 "DELETE FROM Metadata WHERE id=${id} and type=${type}"); |
466 | |
467 statement.SetParameterType("id", ValueType_Integer64); | |
468 statement.SetParameterType("type", ValueType_Integer64); | |
469 | |
470 Dictionary args; | |
471 args.SetIntegerValue("id", id); | |
472 args.SetIntegerValue("type", static_cast<int>(metadataType)); | |
473 | |
474 statement.Execute(args); | |
475 } | |
476 | |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
477 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
478 void IndexBackend::DeleteResource(IDatabaseBackendOutput& output, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
479 DatabaseManager& manager, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
480 int64_t id) |
0 | 481 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
482 ClearDeletedFiles(manager); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
483 ClearDeletedResources(manager); |
433
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
484 ClearRemainingAncestor(manager); |
0 | 485 |
486 { | |
487 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
488 STATEMENT_FROM_HERE, manager, |
0 | 489 "DELETE FROM Resources WHERE internalId=${id}"); |
490 | |
491 statement.SetParameterType("id", ValueType_Integer64); | |
492 | |
493 Dictionary args; | |
494 args.SetIntegerValue("id", id); | |
495 | |
496 statement.Execute(args); | |
497 } | |
498 | |
499 | |
500 { | |
501 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
502 STATEMENT_FROM_HERE, manager, |
0 | 503 "SELECT * FROM RemainingAncestor"); |
504 statement.Execute(); | |
505 | |
506 if (!statement.IsDone()) | |
507 { | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
508 output.SignalRemainingAncestor( |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
509 statement.ReadString(1), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
510 static_cast<OrthancPluginResourceType>(statement.ReadInteger32(0))); |
0 | 511 |
512 // There is at most 1 remaining ancestor | |
513 assert((statement.Next(), statement.IsDone())); | |
514 } | |
515 } | |
433
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
516 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
517 SignalDeletedFiles(output, manager); |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
518 SignalDeletedResources(output, manager); |
433
5964ce6385a5
use temporary tables for DeletedFiles, RemainingAncestor and DeletedResources
Alain Mazy <am@osimis.io>
parents:
432
diff
changeset
|
519 |
0 | 520 } |
521 | |
522 | |
523 void IndexBackend::GetAllInternalIds(std::list<int64_t>& target, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
524 DatabaseManager& manager, |
0 | 525 OrthancPluginResourceType resourceType) |
526 { | |
527 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
528 STATEMENT_FROM_HERE, manager, |
0 | 529 "SELECT internalId FROM Resources WHERE resourceType=${type}"); |
530 | |
531 statement.SetReadOnly(true); | |
532 statement.SetParameterType("type", ValueType_Integer64); | |
533 | |
534 Dictionary args; | |
535 args.SetIntegerValue("type", static_cast<int>(resourceType)); | |
536 | |
537 ReadListOfIntegers<int64_t>(target, statement, args); | |
538 } | |
539 | |
540 | |
541 void IndexBackend::GetAllPublicIds(std::list<std::string>& target, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
542 DatabaseManager& manager, |
0 | 543 OrthancPluginResourceType resourceType) |
544 { | |
545 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
546 STATEMENT_FROM_HERE, manager, |
0 | 547 "SELECT publicId FROM Resources WHERE resourceType=${type}"); |
548 | |
549 statement.SetReadOnly(true); | |
550 statement.SetParameterType("type", ValueType_Integer64); | |
551 | |
552 Dictionary args; | |
553 args.SetIntegerValue("type", static_cast<int>(resourceType)); | |
554 | |
555 ReadListOfStrings(target, statement, args); | |
556 } | |
557 | |
558 | |
559 void IndexBackend::GetAllPublicIds(std::list<std::string>& target, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
560 DatabaseManager& manager, |
0 | 561 OrthancPluginResourceType resourceType, |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
562 int64_t since, |
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
563 uint32_t limit) |
0 | 564 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
565 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
566 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
567 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
568 suffix = "OFFSET ${since} ROWS FETCH FIRST ${limit} ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
569 } |
555 | 570 else if (limit > 0) |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
571 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
572 suffix = "LIMIT ${limit} OFFSET ${since}"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
573 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
574 |
555 | 575 std::string sql = "SELECT publicId FROM (SELECT publicId FROM Resources " |
576 "WHERE resourceType=${type}) AS tmp ORDER BY tmp.publicId " + suffix; | |
577 | |
578 DatabaseManager::CachedStatement statement(STATEMENT_FROM_HERE_DYNAMIC(sql), manager, sql); | |
0 | 579 |
580 statement.SetReadOnly(true); | |
581 | |
582 Dictionary args; | |
555 | 583 |
584 statement.SetParameterType("type", ValueType_Integer64); | |
0 | 585 args.SetIntegerValue("type", static_cast<int>(resourceType)); |
555 | 586 |
587 if (limit > 0) | |
588 { | |
589 statement.SetParameterType("limit", ValueType_Integer64); | |
590 statement.SetParameterType("since", ValueType_Integer64); | |
591 args.SetIntegerValue("limit", limit); | |
592 args.SetIntegerValue("since", since); | |
593 } | |
0 | 594 |
595 ReadListOfStrings(target, statement, args); | |
596 } | |
597 | |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
598 void IndexBackend::GetChanges(IDatabaseBackendOutput& output, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
599 bool& done /*out*/, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
600 DatabaseManager& manager, |
0 | 601 int64_t since, |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
602 uint32_t limit) |
0 | 603 { |
532
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
604 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
605 GetChangesExtended(output, done, manager, since, -1, _OrthancPluginChangeType_All, limit); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
606 #else |
532
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
607 GetChangesExtended(output, done, manager, since, -1, 65535, limit); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
608 #endif |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
609 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
610 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
611 /* Use GetOutput().AnswerChange() */ |
532
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
612 void IndexBackend::GetChangesExtended(IDatabaseBackendOutput& output, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
613 bool& done /*out*/, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
614 DatabaseManager& manager, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
615 int64_t since, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
616 int64_t to, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
617 int32_t changeType, |
25cfcb752af6
merged find-refactoring -> large-queries
Alain Mazy <am@orthanc.team>
parents:
521
diff
changeset
|
618 uint32_t limit) |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
619 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
620 std::string limitSuffix; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
621 if (manager.GetDialect() == Dialect_MSSQL) |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
622 { |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
623 limitSuffix = "OFFSET 0 ROWS FETCH FIRST ${limit} ROWS ONLY"; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
624 } |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
625 else |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
626 { |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
627 limitSuffix = "LIMIT ${limit}"; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
628 } |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
629 |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
630 std::vector<std::string> filters; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
631 bool hasSince = false; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
632 bool hasTo = false; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
633 bool hasFilterType = false; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
634 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
635 if (since > 0) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
636 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
637 hasSince = true; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
638 filters.push_back("seq>${since}"); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
639 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
640 if (to != -1) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
641 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
642 hasTo = true; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
643 filters.push_back("seq<=${to}"); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
644 } |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
564
diff
changeset
|
645 |
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
564
diff
changeset
|
646 #if ORTHANC_PLUGINS_HAS_CHANGES_EXTENDED == 1 |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
647 if (changeType != _OrthancPluginChangeType_All) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
648 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
649 hasFilterType = true; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
650 filters.push_back("changeType=${changeType}"); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
651 } |
565
373cf7d747cc
fix build against orthanc mainline
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
564
diff
changeset
|
652 #endif |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
653 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
654 std::string filtersString; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
655 if (filters.size() > 0) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
656 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
657 Orthanc::Toolbox::JoinStrings(filtersString, filters, " AND "); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
658 filtersString = "WHERE " + filtersString; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
659 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
660 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
661 std::string sql; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
662 bool returnFirstResults; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
663 if (hasTo && !hasSince) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
664 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
665 // in this case, we want the largest values but we want them ordered in ascending order |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
666 sql = "SELECT * FROM (SELECT Changes.seq, Changes.changeType, Changes.resourceType, Resources.publicId, Changes.date " |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
667 "FROM Changes INNER JOIN Resources " |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
668 "ON Changes.internalId = Resources.internalId " + filtersString + " ORDER BY seq DESC " + limitSuffix + |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
669 ") AS FilteredChanges ORDER BY seq ASC"; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
670 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
671 returnFirstResults = false; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
672 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
673 else |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
674 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
675 // default query: we want the smallest values ordered in ascending order |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
676 sql = "SELECT Changes.seq, Changes.changeType, Changes.resourceType, Resources.publicId, " |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
677 "Changes.date FROM Changes INNER JOIN Resources " |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
678 "ON Changes.internalId = Resources.internalId " + filtersString + " ORDER BY seq ASC " + limitSuffix; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
679 returnFirstResults = true; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
680 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
681 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
682 DatabaseManager::CachedStatement statement(STATEMENT_FROM_HERE_DYNAMIC(sql), manager, sql); |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
683 statement.SetReadOnly(true); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
684 Dictionary args; |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
685 |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
686 statement.SetParameterType("limit", ValueType_Integer64); |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
687 args.SetIntegerValue("limit", limit + 1); // we take limit+1 because we use the +1 to know if "Done" must be set to true |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
688 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
689 if (hasSince) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
690 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
691 statement.SetParameterType("since", ValueType_Integer64); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
692 args.SetIntegerValue("since", since); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
693 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
694 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
695 if (hasTo) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
696 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
697 statement.SetParameterType("to", ValueType_Integer64); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
698 args.SetIntegerValue("to", to); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
699 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
700 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
701 if (hasFilterType) |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
702 { |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
703 statement.SetParameterType("changeType", ValueType_Integer64); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
704 args.SetIntegerValue("changeType", changeType); |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
705 } |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
706 |
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
707 ReadChangesInternal(output, done, manager, statement, args, limit, returnFirstResults); |
0 | 708 } |
709 | |
710 | |
711 void IndexBackend::GetChildrenInternalId(std::list<int64_t>& target /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
712 DatabaseManager& manager, |
0 | 713 int64_t id) |
714 { | |
715 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
716 STATEMENT_FROM_HERE, manager, |
0 | 717 "SELECT a.internalId FROM Resources AS a, Resources AS b " |
718 "WHERE a.parentId = b.internalId AND b.internalId = ${id}"); | |
719 | |
720 statement.SetReadOnly(true); | |
721 statement.SetParameterType("id", ValueType_Integer64); | |
722 | |
723 Dictionary args; | |
724 args.SetIntegerValue("id", id); | |
725 | |
726 ReadListOfIntegers<int64_t>(target, statement, args); | |
727 } | |
728 | |
729 | |
730 void IndexBackend::GetChildrenPublicId(std::list<std::string>& target /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
731 DatabaseManager& manager, |
0 | 732 int64_t id) |
733 { | |
734 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
735 STATEMENT_FROM_HERE, manager, |
0 | 736 "SELECT a.publicId FROM Resources AS a, Resources AS b " |
737 "WHERE a.parentId = b.internalId AND b.internalId = ${id}"); | |
738 | |
739 statement.SetReadOnly(true); | |
740 statement.SetParameterType("id", ValueType_Integer64); | |
741 | |
742 Dictionary args; | |
743 args.SetIntegerValue("id", id); | |
744 | |
745 ReadListOfStrings(target, statement, args); | |
746 } | |
747 | |
748 | |
749 /* Use GetOutput().AnswerExportedResource() */ | |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
750 void IndexBackend::GetExportedResources(IDatabaseBackendOutput& output, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
751 bool& done /*out*/, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
752 DatabaseManager& manager, |
0 | 753 int64_t since, |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
754 uint32_t limit) |
0 | 755 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
756 std::string suffix; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
757 if (manager.GetDialect() == Dialect_MSSQL) |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
758 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
759 suffix = "OFFSET 0 ROWS FETCH FIRST ${limit} ROWS ONLY"; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
760 } |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
761 else |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
762 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
763 suffix = "LIMIT ${limit}"; |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
764 } |
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
765 |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
766 DatabaseManager::CachedStatement statement( |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
767 STATEMENT_FROM_HERE, manager, |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
768 "SELECT * FROM ExportedResources WHERE seq>${since} ORDER BY seq " + suffix); |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
769 |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
770 statement.SetReadOnly(true); |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
771 statement.SetParameterType("limit", ValueType_Integer64); |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
772 statement.SetParameterType("since", ValueType_Integer64); |
0 | 773 |
774 Dictionary args; | |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
775 args.SetIntegerValue("limit", limit + 1); |
0 | 776 args.SetIntegerValue("since", since); |
777 | |
385
346fe629d638
clarifying types of since/limit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
381
diff
changeset
|
778 ReadExportedResourcesInternal(output, done, statement, args, limit); |
0 | 779 } |
780 | |
781 | |
782 /* Use GetOutput().AnswerChange() */ | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
783 void IndexBackend::GetLastChange(IDatabaseBackendOutput& output, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
784 DatabaseManager& manager) |
0 | 785 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
786 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
787 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
788 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
789 suffix = "OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
790 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
791 else |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
792 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
793 suffix = "LIMIT 1"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
794 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
795 |
0 | 796 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
797 STATEMENT_FROM_HERE, manager, |
326
4454545bb265
Fix issue 200 (fields messed up in /changes route)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
798 "SELECT Changes.seq, Changes.changeType, Changes.resourceType, Resources.publicId, " |
4454545bb265
Fix issue 200 (fields messed up in /changes route)
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
314
diff
changeset
|
799 "Changes.date FROM Changes INNER JOIN Resources " |
310
f3eac614b32e
fixed two DatabaseManager::CachedStatement in the same scope
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
307
diff
changeset
|
800 "ON Changes.internalId = Resources.internalId ORDER BY seq DESC " + suffix); |
0 | 801 |
802 statement.SetReadOnly(true); | |
803 | |
804 Dictionary args; | |
805 | |
806 bool done; // Ignored | |
501
594859656a06
Added support for ExtendedApiV1: /changes
Alain Mazy <am@orthanc.team>
parents:
460
diff
changeset
|
807 ReadChangesInternal(output, done, manager, statement, args, 1, true); |
0 | 808 } |
809 | |
810 | |
811 /* Use GetOutput().AnswerExportedResource() */ | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
812 void IndexBackend::GetLastExportedResource(IDatabaseBackendOutput& output, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
813 DatabaseManager& manager) |
0 | 814 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
815 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
816 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
817 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
818 suffix = "OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
819 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
820 else |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
821 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
822 suffix = "LIMIT 1"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
823 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
824 |
0 | 825 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
826 STATEMENT_FROM_HERE, manager, |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
827 "SELECT * FROM ExportedResources ORDER BY seq DESC " + suffix); |
0 | 828 |
829 statement.SetReadOnly(true); | |
830 | |
831 Dictionary args; | |
832 | |
833 bool done; // Ignored | |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
834 ReadExportedResourcesInternal(output, done, statement, args, 1); |
0 | 835 } |
836 | |
837 | |
838 /* Use GetOutput().AnswerDicomTag() */ | |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
839 void IndexBackend::GetMainDicomTags(IDatabaseBackendOutput& output, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
840 DatabaseManager& manager, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
841 int64_t id) |
0 | 842 { |
843 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
844 STATEMENT_FROM_HERE, manager, |
0 | 845 "SELECT * FROM MainDicomTags WHERE id=${id}"); |
846 | |
847 statement.SetReadOnly(true); | |
848 statement.SetParameterType("id", ValueType_Integer64); | |
849 | |
850 Dictionary args; | |
851 args.SetIntegerValue("id", id); | |
852 | |
853 statement.Execute(args); | |
854 | |
855 while (!statement.IsDone()) | |
856 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
857 output.AnswerDicomTag(static_cast<uint16_t>(statement.ReadInteger64(1)), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
858 static_cast<uint16_t>(statement.ReadInteger64(2)), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
859 statement.ReadString(3)); |
0 | 860 statement.Next(); |
861 } | |
862 } | |
863 | |
864 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
865 std::string IndexBackend::GetPublicId(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
866 int64_t resourceId) |
0 | 867 { |
868 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
869 STATEMENT_FROM_HERE, manager, |
0 | 870 "SELECT publicId FROM Resources WHERE internalId=${id}"); |
871 | |
872 statement.SetReadOnly(true); | |
873 statement.SetParameterType("id", ValueType_Integer64); | |
874 | |
875 Dictionary args; | |
876 args.SetIntegerValue("id", resourceId); | |
877 | |
878 statement.Execute(args); | |
879 | |
880 if (statement.IsDone()) | |
881 { | |
505 | 882 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource, "No public id found for internal id"); |
0 | 883 } |
884 else | |
885 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
886 return statement.ReadString(0); |
0 | 887 } |
888 } | |
889 | |
890 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
891 uint64_t IndexBackend::GetResourcesCount(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
892 OrthancPluginResourceType resourceType) |
0 | 893 { |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
894 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 895 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
896 switch (manager.GetDialect()) |
0 | 897 { |
898 case Dialect_MySQL: | |
899 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
900 STATEMENT_FROM_HERE, manager, |
0 | 901 "SELECT CAST(COUNT(*) AS UNSIGNED INT) FROM Resources WHERE resourceType=${type}")); |
902 break; | |
903 | |
904 case Dialect_PostgreSQL: | |
905 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
906 STATEMENT_FROM_HERE, manager, |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
907 "SELECT CAST(COUNT(*) AS BIGINT) FROM Resources WHERE resourceType=${type}")); |
0 | 908 break; |
909 | |
301 | 910 case Dialect_MSSQL: |
0 | 911 case Dialect_SQLite: |
912 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
913 STATEMENT_FROM_HERE, manager, |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
914 "SELECT COUNT(*) FROM Resources WHERE resourceType=${type}")); |
0 | 915 break; |
916 | |
917 default: | |
918 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
919 } | |
920 | |
921 statement->SetReadOnly(true); | |
922 statement->SetParameterType("type", ValueType_Integer64); | |
923 | |
924 Dictionary args; | |
925 args.SetIntegerValue("type", resourceType); | |
926 | |
927 statement->Execute(args); | |
928 | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
929 return static_cast<uint64_t>(statement->ReadInteger64(0)); |
0 | 930 } |
931 | |
932 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
933 OrthancPluginResourceType IndexBackend::GetResourceType(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
934 int64_t resourceId) |
0 | 935 { |
936 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
937 STATEMENT_FROM_HERE, manager, |
0 | 938 "SELECT resourceType FROM Resources WHERE internalId=${id}"); |
939 | |
940 statement.SetReadOnly(true); | |
941 statement.SetParameterType("id", ValueType_Integer64); | |
942 | |
943 Dictionary args; | |
944 args.SetIntegerValue("id", resourceId); | |
945 | |
946 statement.Execute(args); | |
947 | |
948 if (statement.IsDone()) | |
949 { | |
505 | 950 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource, "No resource type found for internal id."); |
0 | 951 } |
952 else | |
953 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
954 return static_cast<OrthancPluginResourceType>(statement.ReadInteger32(0)); |
0 | 955 } |
956 } | |
957 | |
958 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
959 uint64_t IndexBackend::GetTotalCompressedSize(DatabaseManager& manager) |
0 | 960 { |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
961 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 962 |
963 // NB: "COALESCE" is used to replace "NULL" by "0" if the number of rows is empty | |
964 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
965 switch (manager.GetDialect()) |
0 | 966 { |
967 case Dialect_MySQL: | |
968 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
969 STATEMENT_FROM_HERE, manager, |
0 | 970 "SELECT CAST(COALESCE(SUM(compressedSize), 0) AS UNSIGNED INTEGER) FROM AttachedFiles")); |
971 break; | |
972 | |
973 case Dialect_PostgreSQL: | |
974 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
975 STATEMENT_FROM_HERE, manager, |
0 | 976 "SELECT CAST(COALESCE(SUM(compressedSize), 0) AS BIGINT) FROM AttachedFiles")); |
977 break; | |
978 | |
301 | 979 case Dialect_MSSQL: |
0 | 980 case Dialect_SQLite: |
981 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
982 STATEMENT_FROM_HERE, manager, |
0 | 983 "SELECT COALESCE(SUM(compressedSize), 0) FROM AttachedFiles")); |
984 break; | |
985 | |
986 default: | |
987 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
988 } | |
989 | |
990 statement->SetReadOnly(true); | |
991 statement->Execute(); | |
992 | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
993 return static_cast<uint64_t>(statement->ReadInteger64(0)); |
0 | 994 } |
995 | |
996 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
997 uint64_t IndexBackend::GetTotalUncompressedSize(DatabaseManager& manager) |
0 | 998 { |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
999 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 1000 |
1001 // NB: "COALESCE" is used to replace "NULL" by "0" if the number of rows is empty | |
1002 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1003 switch (manager.GetDialect()) |
0 | 1004 { |
1005 case Dialect_MySQL: | |
1006 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1007 STATEMENT_FROM_HERE, manager, |
0 | 1008 "SELECT CAST(COALESCE(SUM(uncompressedSize), 0) AS UNSIGNED INTEGER) FROM AttachedFiles")); |
1009 break; | |
1010 | |
1011 case Dialect_PostgreSQL: | |
1012 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1013 STATEMENT_FROM_HERE, manager, |
0 | 1014 "SELECT CAST(COALESCE(SUM(uncompressedSize), 0) AS BIGINT) FROM AttachedFiles")); |
1015 break; | |
1016 | |
301 | 1017 case Dialect_MSSQL: |
0 | 1018 case Dialect_SQLite: |
1019 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1020 STATEMENT_FROM_HERE, manager, |
0 | 1021 "SELECT COALESCE(SUM(uncompressedSize), 0) FROM AttachedFiles")); |
1022 break; | |
1023 | |
1024 default: | |
1025 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
1026 } | |
1027 | |
1028 statement->SetReadOnly(true); | |
1029 statement->Execute(); | |
1030 | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1031 return static_cast<uint64_t>(statement->ReadInteger64(0)); |
0 | 1032 } |
1033 | |
1034 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1035 bool IndexBackend::IsExistingResource(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1036 int64_t internalId) |
0 | 1037 { |
1038 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1039 STATEMENT_FROM_HERE, manager, |
0 | 1040 "SELECT * FROM Resources WHERE internalId=${id}"); |
1041 | |
1042 statement.SetReadOnly(true); | |
1043 statement.SetParameterType("id", ValueType_Integer64); | |
1044 | |
1045 Dictionary args; | |
1046 args.SetIntegerValue("id", internalId); | |
1047 | |
1048 statement.Execute(args); | |
1049 | |
1050 return !statement.IsDone(); | |
1051 } | |
1052 | |
1053 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1054 bool IndexBackend::IsProtectedPatient(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1055 int64_t internalId) |
0 | 1056 { |
1057 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1058 STATEMENT_FROM_HERE, manager, |
0 | 1059 "SELECT * FROM PatientRecyclingOrder WHERE patientId = ${id}"); |
1060 | |
1061 statement.SetReadOnly(true); | |
1062 statement.SetParameterType("id", ValueType_Integer64); | |
1063 | |
1064 Dictionary args; | |
1065 args.SetIntegerValue("id", internalId); | |
1066 | |
1067 statement.Execute(args); | |
1068 | |
1069 return statement.IsDone(); | |
1070 } | |
1071 | |
1072 | |
1073 void IndexBackend::ListAvailableMetadata(std::list<int32_t>& target /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1074 DatabaseManager& manager, |
0 | 1075 int64_t id) |
1076 { | |
1077 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1078 STATEMENT_FROM_HERE, manager, |
0 | 1079 "SELECT type FROM Metadata WHERE id=${id}"); |
1080 | |
1081 statement.SetReadOnly(true); | |
1082 statement.SetParameterType("id", ValueType_Integer64); | |
1083 | |
1084 Dictionary args; | |
1085 args.SetIntegerValue("id", id); | |
1086 | |
1087 ReadListOfIntegers<int32_t>(target, statement, args); | |
1088 } | |
1089 | |
1090 | |
1091 void IndexBackend::ListAvailableAttachments(std::list<int32_t>& target /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1092 DatabaseManager& manager, |
0 | 1093 int64_t id) |
1094 { | |
1095 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1096 STATEMENT_FROM_HERE, manager, |
0 | 1097 "SELECT fileType FROM AttachedFiles WHERE id=${id}"); |
1098 | |
1099 statement.SetReadOnly(true); | |
1100 statement.SetParameterType("id", ValueType_Integer64); | |
1101 | |
1102 Dictionary args; | |
1103 args.SetIntegerValue("id", id); | |
1104 | |
1105 ReadListOfIntegers<int32_t>(target, statement, args); | |
1106 } | |
1107 | |
1108 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1109 void IndexBackend::LogChange(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1110 int32_t changeType, |
209 | 1111 int64_t resourceId, |
1112 OrthancPluginResourceType resourceType, | |
1113 const char* date) | |
0 | 1114 { |
1115 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1116 STATEMENT_FROM_HERE, manager, |
302
3a52e27a2d80
in GenericFormatter, replaced ${} by ${AUTOINCREMENT}
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
1117 "INSERT INTO Changes VALUES(${AUTOINCREMENT} ${changeType}, ${id}, ${resourceType}, ${date})"); |
0 | 1118 |
1119 statement.SetParameterType("changeType", ValueType_Integer64); | |
1120 statement.SetParameterType("id", ValueType_Integer64); | |
1121 statement.SetParameterType("resourceType", ValueType_Integer64); | |
1122 statement.SetParameterType("date", ValueType_Utf8String); | |
1123 | |
1124 Dictionary args; | |
209 | 1125 args.SetIntegerValue("changeType", changeType); |
1126 args.SetIntegerValue("id", resourceId); | |
1127 args.SetIntegerValue("resourceType", resourceType); | |
1128 args.SetUtf8Value("date", date); | |
0 | 1129 |
1130 statement.Execute(args); | |
1131 } | |
1132 | |
1133 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1134 void IndexBackend::LogExportedResource(DatabaseManager& manager, |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1135 OrthancPluginResourceType resourceType, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1136 const char* publicId, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1137 const char* modality, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1138 const char* date, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1139 const char* patientId, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1140 const char* studyInstanceUid, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1141 const char* seriesInstanceUid, |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1142 const char* sopInstanceUid) |
0 | 1143 { |
1144 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1145 STATEMENT_FROM_HERE, manager, |
302
3a52e27a2d80
in GenericFormatter, replaced ${} by ${AUTOINCREMENT}
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
1146 "INSERT INTO ExportedResources VALUES(${AUTOINCREMENT} ${type}, ${publicId}, " |
0 | 1147 "${modality}, ${patient}, ${study}, ${series}, ${instance}, ${date})"); |
1148 | |
1149 statement.SetParameterType("type", ValueType_Integer64); | |
1150 statement.SetParameterType("publicId", ValueType_Utf8String); | |
1151 statement.SetParameterType("modality", ValueType_Utf8String); | |
1152 statement.SetParameterType("patient", ValueType_Utf8String); | |
1153 statement.SetParameterType("study", ValueType_Utf8String); | |
1154 statement.SetParameterType("series", ValueType_Utf8String); | |
1155 statement.SetParameterType("instance", ValueType_Utf8String); | |
1156 statement.SetParameterType("date", ValueType_Utf8String); | |
1157 | |
1158 Dictionary args; | |
378
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1159 args.SetIntegerValue("type", resourceType); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1160 args.SetUtf8Value("publicId", publicId); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1161 args.SetUtf8Value("modality", modality); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1162 args.SetUtf8Value("patient", patientId); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1163 args.SetUtf8Value("study", studyInstanceUid); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1164 args.SetUtf8Value("series", seriesInstanceUid); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1165 args.SetUtf8Value("instance", sopInstanceUid); |
9db9e0275ec0
refactoring IndexBackend::LogExportedResource()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
373
diff
changeset
|
1166 args.SetUtf8Value("date", date); |
0 | 1167 |
1168 statement.Execute(args); | |
1169 } | |
1170 | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1171 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1172 static bool ExecuteLookupAttachment(DatabaseManager::CachedStatement& statement, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1173 IDatabaseBackendOutput& output, |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
1174 int64_t id, |
0 | 1175 int32_t contentType) |
1176 { | |
1177 statement.SetReadOnly(true); | |
1178 statement.SetParameterType("id", ValueType_Integer64); | |
1179 statement.SetParameterType("type", ValueType_Integer64); | |
1180 | |
1181 Dictionary args; | |
1182 args.SetIntegerValue("id", id); | |
1183 args.SetIntegerValue("type", static_cast<int>(contentType)); | |
1184 | |
1185 statement.Execute(args); | |
1186 | |
1187 if (statement.IsDone()) | |
1188 { | |
1189 return false; | |
1190 } | |
1191 else | |
1192 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1193 output.AnswerAttachment(statement.ReadString(0), |
201
42990b2dd51b
create IDatabaseBackendOutput only if needed
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
1194 contentType, |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1195 statement.ReadInteger64(1), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1196 statement.ReadString(4), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1197 statement.ReadInteger32(2), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1198 statement.ReadInteger64(3), |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1199 statement.ReadString(5)); |
0 | 1200 return true; |
1201 } | |
1202 } | |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1203 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1204 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1205 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1206 /* Use GetOutput().AnswerAttachment() */ |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1207 bool IndexBackend::LookupAttachment(IDatabaseBackendOutput& output, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1208 int64_t& revision /*out*/, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1209 DatabaseManager& manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1210 int64_t id, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1211 int32_t contentType) |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1212 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1213 if (HasRevisionsSupport()) |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1214 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1215 DatabaseManager::CachedStatement statement( |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1216 STATEMENT_FROM_HERE, manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1217 "SELECT uuid, uncompressedSize, compressionType, compressedSize, uncompressedHash, " |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1218 "compressedHash, revision FROM AttachedFiles WHERE id=${id} AND fileType=${type}"); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1219 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1220 if (ExecuteLookupAttachment(statement, output, id, contentType)) |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1221 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1222 if (statement.GetResultField(6).GetType() == ValueType_Null) |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1223 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1224 // "NULL" can happen with a database created by PostgreSQL |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1225 // plugin <= 3.3 (because of "ALTER TABLE AttachedFiles") |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1226 revision = 0; |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1227 } |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1228 else |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1229 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1230 revision = statement.ReadInteger64(6); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1231 } |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1232 |
262
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1233 return true; |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1234 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1235 else |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1236 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1237 return false; |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1238 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1239 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1240 else |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1241 { |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1242 DatabaseManager::CachedStatement statement( |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1243 STATEMENT_FROM_HERE, manager, |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1244 "SELECT uuid, uncompressedSize, compressionType, compressedSize, uncompressedHash, " |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1245 "compressedHash FROM AttachedFiles WHERE id=${id} AND fileType=${type}"); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1246 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1247 revision = 0; |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1248 |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1249 return ExecuteLookupAttachment(statement, output, id, contentType); |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1250 } |
b0c65094b299
adding support for revisions in attachments
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
261
diff
changeset
|
1251 } |
0 | 1252 |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1253 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1254 static bool ReadGlobalProperty(std::string& target, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1255 DatabaseManager::CachedStatement& statement, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1256 const Dictionary& args) |
0 | 1257 { |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1258 statement.Execute(args); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1259 statement.SetResultFieldType(0, ValueType_Utf8String); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1260 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1261 if (statement.IsDone()) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1262 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1263 return false; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1264 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1265 else |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1266 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1267 ValueType type = statement.GetResultField(0).GetType(); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1268 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1269 if (type == ValueType_Null) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1270 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1271 return false; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1272 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1273 else if (type != ValueType_Utf8String) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1274 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1275 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1276 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1277 else |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1278 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1279 target = dynamic_cast<const Utf8StringValue&>(statement.GetResultField(0)).GetContent(); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1280 return true; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1281 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1282 } |
0 | 1283 } |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1284 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1285 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1286 bool IndexBackend::LookupGlobalProperty(std::string& target /*out*/, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1287 DatabaseManager& manager, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1288 const char* serverIdentifier, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1289 int32_t property) |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1290 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1291 if (serverIdentifier == NULL) |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1292 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1293 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1294 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1295 else |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1296 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1297 if (strlen(serverIdentifier) == 0) |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1298 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1299 DatabaseManager::CachedStatement statement( |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1300 STATEMENT_FROM_HERE, manager, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1301 "SELECT value FROM GlobalProperties WHERE property=${property}"); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1302 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1303 statement.SetReadOnly(true); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1304 statement.SetParameterType("property", ValueType_Integer64); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1305 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1306 Dictionary args; |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1307 args.SetIntegerValue("property", property); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1308 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1309 return ReadGlobalProperty(target, statement, args); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1310 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1311 else |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1312 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1313 DatabaseManager::CachedStatement statement( |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1314 STATEMENT_FROM_HERE, manager, |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1315 "SELECT value FROM ServerProperties WHERE server=${server} AND property=${property}"); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1316 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1317 statement.SetReadOnly(true); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1318 statement.SetParameterType("server", ValueType_Utf8String); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1319 statement.SetParameterType("property", ValueType_Integer64); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1320 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1321 Dictionary args; |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1322 args.SetUtf8Value("server", serverIdentifier); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1323 args.SetIntegerValue("property", property); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1324 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1325 return ReadGlobalProperty(target, statement, args); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1326 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1327 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1328 } |
0 | 1329 |
431 | 1330 bool IndexBackend::HasAtomicIncrementGlobalProperty() |
1331 { | |
1332 return false; // currently only implemented in Postgres | |
1333 } | |
1334 | |
1335 int64_t IndexBackend::IncrementGlobalProperty(DatabaseManager& manager, | |
1336 const char* serverIdentifier, | |
1337 int32_t property, | |
1338 int64_t increment) | |
1339 { | |
1340 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
1341 } | |
436
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1342 |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1343 bool IndexBackend::HasUpdateAndGetStatistics() |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1344 { |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1345 return false; // currently only implemented in Postgres |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1346 } |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1347 |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1348 void IndexBackend::UpdateAndGetStatistics(DatabaseManager& manager, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1349 int64_t& patientsCount, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1350 int64_t& studiesCount, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1351 int64_t& seriesCount, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1352 int64_t& instancesCount, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1353 int64_t& compressedSize, |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1354 int64_t& uncompressedSize) |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1355 { |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1356 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1357 } |
f16faa1fdc46
InsertOrUpdateMetadata function + UpdateAndGetStatistics
Alain Mazy <am@osimis.io>
parents:
433
diff
changeset
|
1358 |
447 | 1359 bool IndexBackend::HasMeasureLatency() |
1360 { | |
1361 return true; | |
1362 } | |
1363 | |
1364 | |
0 | 1365 void IndexBackend::LookupIdentifier(std::list<int64_t>& target /*out*/, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1366 DatabaseManager& manager, |
0 | 1367 OrthancPluginResourceType resourceType, |
1368 uint16_t group, | |
1369 uint16_t element, | |
1370 OrthancPluginIdentifierConstraint constraint, | |
1371 const char* value) | |
1372 { | |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
1373 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 1374 |
1375 std::string header = | |
1376 "SELECT d.id FROM DicomIdentifiers AS d, Resources AS r WHERE " | |
1377 "d.id = r.internalId AND r.resourceType=${type} AND d.tagGroup=${group} " | |
1378 "AND d.tagElement=${element} AND "; | |
1379 | |
1380 switch (constraint) | |
1381 { | |
1382 case OrthancPluginIdentifierConstraint_Equal: | |
1383 header += "d.value = ${value}"; | |
1384 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1385 STATEMENT_FROM_HERE, manager, header.c_str())); |
0 | 1386 break; |
1387 | |
1388 case OrthancPluginIdentifierConstraint_SmallerOrEqual: | |
1389 header += "d.value <= ${value}"; | |
1390 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1391 STATEMENT_FROM_HERE, manager, header.c_str())); |
0 | 1392 break; |
1393 | |
1394 case OrthancPluginIdentifierConstraint_GreaterOrEqual: | |
1395 header += "d.value >= ${value}"; | |
1396 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1397 STATEMENT_FROM_HERE, manager, header.c_str())); |
0 | 1398 break; |
1399 | |
1400 case OrthancPluginIdentifierConstraint_Wildcard: | |
1401 header += "d.value LIKE ${value}"; | |
1402 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1403 STATEMENT_FROM_HERE, manager, header.c_str())); |
0 | 1404 break; |
1405 | |
1406 default: | |
1407 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | |
1408 } | |
1409 | |
1410 statement->SetReadOnly(true); | |
1411 statement->SetParameterType("type", ValueType_Integer64); | |
1412 statement->SetParameterType("group", ValueType_Integer64); | |
1413 statement->SetParameterType("element", ValueType_Integer64); | |
1414 statement->SetParameterType("value", ValueType_Utf8String); | |
1415 | |
1416 Dictionary args; | |
1417 args.SetIntegerValue("type", resourceType); | |
1418 args.SetIntegerValue("group", group); | |
1419 args.SetIntegerValue("element", element); | |
1420 | |
1421 if (constraint == OrthancPluginIdentifierConstraint_Wildcard) | |
1422 { | |
1423 args.SetUtf8Value("value", ConvertWildcardToLike(value)); | |
1424 } | |
1425 else | |
1426 { | |
1427 args.SetUtf8Value("value", value); | |
1428 } | |
1429 | |
1430 statement->Execute(args); | |
1431 | |
1432 target.clear(); | |
1433 while (!statement->IsDone()) | |
1434 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1435 target.push_back(statement->ReadInteger64(0)); |
0 | 1436 statement->Next(); |
1437 } | |
1438 } | |
1439 | |
1440 | |
1441 void IndexBackend::LookupIdentifierRange(std::list<int64_t>& target /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1442 DatabaseManager& manager, |
0 | 1443 OrthancPluginResourceType resourceType, |
1444 uint16_t group, | |
1445 uint16_t element, | |
1446 const char* start, | |
1447 const char* end) | |
1448 { | |
1449 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1450 STATEMENT_FROM_HERE, manager, |
0 | 1451 "SELECT d.id FROM DicomIdentifiers AS d, Resources AS r WHERE " |
1452 "d.id = r.internalId AND r.resourceType=${type} AND d.tagGroup=${group} " | |
1453 "AND d.tagElement=${element} AND d.value>=${start} AND d.value<=${end}"); | |
1454 | |
1455 statement.SetReadOnly(true); | |
1456 statement.SetParameterType("type", ValueType_Integer64); | |
1457 statement.SetParameterType("group", ValueType_Integer64); | |
1458 statement.SetParameterType("element", ValueType_Integer64); | |
1459 statement.SetParameterType("start", ValueType_Utf8String); | |
1460 statement.SetParameterType("end", ValueType_Utf8String); | |
1461 | |
1462 Dictionary args; | |
1463 args.SetIntegerValue("type", resourceType); | |
1464 args.SetIntegerValue("group", group); | |
1465 args.SetIntegerValue("element", element); | |
1466 args.SetUtf8Value("start", start); | |
1467 args.SetUtf8Value("end", end); | |
1468 | |
1469 statement.Execute(args); | |
1470 | |
1471 target.clear(); | |
1472 while (!statement.IsDone()) | |
1473 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1474 target.push_back(statement.ReadInteger64(0)); |
0 | 1475 statement.Next(); |
1476 } | |
1477 } | |
1478 | |
1479 | |
1480 bool IndexBackend::LookupMetadata(std::string& target /*out*/, | |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1481 int64_t& revision /*out*/, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1482 DatabaseManager& manager, |
0 | 1483 int64_t id, |
1484 int32_t metadataType) | |
1485 { | |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1486 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1487 |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1488 if (HasRevisionsSupport()) |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1489 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1490 statement.reset(new DatabaseManager::CachedStatement( |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1491 STATEMENT_FROM_HERE, manager, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1492 "SELECT value, revision FROM Metadata WHERE id=${id} and type=${type}")); |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1493 } |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1494 else |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1495 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1496 statement.reset(new DatabaseManager::CachedStatement( |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1497 STATEMENT_FROM_HERE, manager, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1498 "SELECT value FROM Metadata WHERE id=${id} and type=${type}")); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1499 } |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1500 |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1501 statement->SetReadOnly(true); |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1502 statement->SetParameterType("id", ValueType_Integer64); |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1503 statement->SetParameterType("type", ValueType_Integer64); |
0 | 1504 |
1505 Dictionary args; | |
1506 args.SetIntegerValue("id", id); | |
1507 args.SetIntegerValue("type", metadataType); | |
1508 | |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1509 statement->Execute(args); |
0 | 1510 |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1511 if (statement->IsDone()) |
0 | 1512 { |
1513 return false; | |
1514 } | |
1515 else | |
1516 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1517 target = statement->ReadString(0); |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1518 |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1519 if (HasRevisionsSupport()) |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1520 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1521 if (statement->GetResultField(1).GetType() == ValueType_Null) |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1522 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1523 // "NULL" can happen with a database created by PostgreSQL |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1524 // plugin <= 3.3 (because of "ALTER TABLE AttachedFiles") |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1525 revision = 0; |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1526 } |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1527 else |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1528 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1529 revision = statement->ReadInteger64(1); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1530 } |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1531 } |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1532 else |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1533 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1534 revision = 0; // No support for revisions |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1535 } |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1536 |
0 | 1537 return true; |
1538 } | |
1539 } | |
1540 | |
1541 | |
1542 bool IndexBackend::LookupParent(int64_t& parentId /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1543 DatabaseManager& manager, |
0 | 1544 int64_t resourceId) |
1545 { | |
1546 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1547 STATEMENT_FROM_HERE, manager, |
0 | 1548 "SELECT parentId FROM Resources WHERE internalId=${id}"); |
1549 | |
1550 statement.SetReadOnly(true); | |
1551 statement.SetParameterType("id", ValueType_Integer64); | |
1552 | |
1553 Dictionary args; | |
1554 args.SetIntegerValue("id", resourceId); | |
1555 | |
1556 statement.Execute(args); | |
1557 | |
1558 if (statement.IsDone() || | |
1559 statement.GetResultField(0).GetType() == ValueType_Null) | |
1560 { | |
1561 return false; | |
1562 } | |
1563 else | |
1564 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1565 parentId = statement.ReadInteger64(0); |
0 | 1566 return true; |
1567 } | |
1568 } | |
1569 | |
1570 | |
1571 bool IndexBackend::LookupResource(int64_t& id /*out*/, | |
1572 OrthancPluginResourceType& type /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1573 DatabaseManager& manager, |
0 | 1574 const char* publicId) |
1575 { | |
1576 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1577 STATEMENT_FROM_HERE, manager, |
0 | 1578 "SELECT internalId, resourceType FROM Resources WHERE publicId=${id}"); |
1579 | |
1580 statement.SetReadOnly(true); | |
1581 statement.SetParameterType("id", ValueType_Utf8String); | |
1582 | |
1583 Dictionary args; | |
1584 args.SetUtf8Value("id", publicId); | |
1585 | |
1586 statement.Execute(args); | |
1587 | |
1588 if (statement.IsDone()) | |
1589 { | |
1590 return false; | |
1591 } | |
1592 else | |
1593 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1594 id = statement.ReadInteger64(0); |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1595 type = static_cast<OrthancPluginResourceType>(statement.ReadInteger32(1)); |
0 | 1596 return true; |
1597 } | |
1598 } | |
1599 | |
1600 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1601 bool IndexBackend::SelectPatientToRecycle(int64_t& internalId /*out*/, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1602 DatabaseManager& manager) |
0 | 1603 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1604 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1605 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1606 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1607 suffix = "OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1608 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1609 else |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1610 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1611 suffix = "LIMIT 1"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1612 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1613 |
0 | 1614 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1615 STATEMENT_FROM_HERE, manager, |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1616 "SELECT patientId FROM PatientRecyclingOrder ORDER BY seq ASC " + suffix); |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1617 |
0 | 1618 statement.SetReadOnly(true); |
1619 statement.Execute(); | |
1620 | |
1621 if (statement.IsDone()) | |
1622 { | |
1623 return false; | |
1624 } | |
1625 else | |
1626 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1627 internalId = statement.ReadInteger64(0); |
0 | 1628 return true; |
1629 } | |
1630 } | |
1631 | |
1632 | |
1633 bool IndexBackend::SelectPatientToRecycle(int64_t& internalId /*out*/, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1634 DatabaseManager& manager, |
0 | 1635 int64_t patientIdToAvoid) |
1636 { | |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1637 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1638 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1639 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1640 suffix = "OFFSET 0 ROWS FETCH FIRST 1 ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1641 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1642 else |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1643 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1644 suffix = "LIMIT 1"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1645 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1646 |
0 | 1647 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1648 STATEMENT_FROM_HERE, manager, |
0 | 1649 "SELECT patientId FROM PatientRecyclingOrder " |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
1650 "WHERE patientId != ${id} ORDER BY seq ASC " + suffix); |
0 | 1651 |
1652 statement.SetReadOnly(true); | |
1653 statement.SetParameterType("id", ValueType_Integer64); | |
1654 | |
1655 Dictionary args; | |
1656 args.SetIntegerValue("id", patientIdToAvoid); | |
1657 | |
1658 statement.Execute(args); | |
1659 | |
1660 if (statement.IsDone()) | |
1661 { | |
1662 return false; | |
1663 } | |
1664 else | |
1665 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
1666 internalId = statement.ReadInteger64(0); |
0 | 1667 return true; |
1668 } | |
1669 } | |
1670 | |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1671 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1672 static void RunSetGlobalPropertyStatement(DatabaseManager::CachedStatement& statement, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1673 bool hasServer, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1674 bool hasValue, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1675 const char* serverIdentifier, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1676 int32_t property, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1677 const char* utf8) |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1678 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1679 Dictionary args; |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1680 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1681 statement.SetParameterType("property", ValueType_Integer64); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1682 args.SetIntegerValue("property", static_cast<int>(property)); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1683 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1684 if (hasValue) |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1685 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1686 assert(utf8 != NULL); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1687 statement.SetParameterType("value", ValueType_Utf8String); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1688 args.SetUtf8Value("value", utf8); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1689 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1690 else |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1691 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1692 assert(utf8 == NULL); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1693 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1694 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1695 if (hasServer) |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1696 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1697 assert(serverIdentifier != NULL && strlen(serverIdentifier) > 0); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1698 statement.SetParameterType("server", ValueType_Utf8String); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1699 args.SetUtf8Value("server", serverIdentifier); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1700 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1701 else |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1702 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1703 assert(serverIdentifier == NULL); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1704 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1705 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1706 statement.Execute(args); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1707 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1708 |
0 | 1709 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1710 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1711 const char* serverIdentifier, |
221
73cc85f3d9c1
implementation of the "serverIdentifier" information for global properties
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
220
diff
changeset
|
1712 int32_t property, |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1713 const char* utf8) |
0 | 1714 { |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1715 if (serverIdentifier == NULL) |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1716 { |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1717 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1718 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1719 else if (manager.GetDialect() == Dialect_SQLite) |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1720 { |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1721 bool hasServer = (strlen(serverIdentifier) != 0); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1722 |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1723 if (hasServer) |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1724 { |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1725 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1726 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1727 "INSERT OR REPLACE INTO ServerProperties VALUES (${server}, ${property}, ${value})"); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1728 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1729 RunSetGlobalPropertyStatement(statement, true, true, serverIdentifier, property, utf8); |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1730 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1731 else |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1732 { |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1733 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1734 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1735 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})"); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1736 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1737 RunSetGlobalPropertyStatement(statement, false, true, NULL, property, utf8); |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1738 } |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1739 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1740 else |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1741 { |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1742 bool hasServer = (strlen(serverIdentifier) != 0); |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1743 |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1744 if (hasServer) |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1745 { |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1746 { |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1747 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1748 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1749 "DELETE FROM ServerProperties WHERE server=${server} AND property=${property}"); |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1750 |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1751 RunSetGlobalPropertyStatement(statement, true, false, serverIdentifier, property, NULL); |
238
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1752 } |
f033cc039264
new table: "ServerProperties"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
237
diff
changeset
|
1753 |
239
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1754 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1755 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1756 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1757 "INSERT INTO ServerProperties VALUES (${server}, ${property}, ${value})"); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1758 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1759 RunSetGlobalPropertyStatement(statement, true, true, serverIdentifier, property, utf8); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1760 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1761 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1762 else |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1763 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1764 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1765 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1766 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1767 "DELETE FROM GlobalProperties WHERE property=${property}"); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1768 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1769 RunSetGlobalPropertyStatement(statement, false, false, NULL, property, NULL); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1770 } |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1771 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1772 { |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1773 DatabaseManager::CachedStatement statement( |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1774 STATEMENT_FROM_HERE, manager, |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1775 "INSERT INTO GlobalProperties VALUES (${property}, ${value})"); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1776 |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1777 RunSetGlobalPropertyStatement(statement, false, true, NULL, property, utf8); |
e9ba888f371b
fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
238
diff
changeset
|
1778 } |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1779 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
1780 } |
0 | 1781 } |
1782 | |
1783 | |
1784 static void ExecuteSetTag(DatabaseManager::CachedStatement& statement, | |
1785 int64_t id, | |
1786 uint16_t group, | |
1787 uint16_t element, | |
1788 const char* value) | |
1789 { | |
1790 statement.SetParameterType("id", ValueType_Integer64); | |
1791 statement.SetParameterType("group", ValueType_Integer64); | |
1792 statement.SetParameterType("element", ValueType_Integer64); | |
1793 statement.SetParameterType("value", ValueType_Utf8String); | |
1794 | |
1795 Dictionary args; | |
1796 args.SetIntegerValue("id", id); | |
1797 args.SetIntegerValue("group", group); | |
1798 args.SetIntegerValue("element", element); | |
1799 args.SetUtf8Value("value", value); | |
1800 | |
1801 statement.Execute(args); | |
1802 } | |
1803 | |
1804 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1805 void IndexBackend::SetMainDicomTag(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1806 int64_t id, |
0 | 1807 uint16_t group, |
1808 uint16_t element, | |
1809 const char* value) | |
1810 { | |
1811 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1812 STATEMENT_FROM_HERE, manager, |
0 | 1813 "INSERT INTO MainDicomTags VALUES(${id}, ${group}, ${element}, ${value})"); |
1814 | |
1815 ExecuteSetTag(statement, id, group, element, value); | |
1816 } | |
1817 | |
1818 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1819 void IndexBackend::SetIdentifierTag(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1820 int64_t id, |
0 | 1821 uint16_t group, |
1822 uint16_t element, | |
1823 const char* value) | |
1824 { | |
1825 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1826 STATEMENT_FROM_HERE, manager, |
0 | 1827 "INSERT INTO DicomIdentifiers VALUES(${id}, ${group}, ${element}, ${value})"); |
1828 | |
1829 ExecuteSetTag(statement, id, group, element, value); | |
1830 } | |
1831 | |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1832 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1833 static void ExecuteSetMetadata(DatabaseManager::CachedStatement& statement, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1834 Dictionary& args, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1835 int64_t id, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1836 int32_t metadataType, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1837 const char* value) |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1838 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1839 statement.SetParameterType("id", ValueType_Integer64); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1840 statement.SetParameterType("type", ValueType_Integer64); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1841 statement.SetParameterType("value", ValueType_Utf8String); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1842 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1843 args.SetIntegerValue("id", id); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1844 args.SetIntegerValue("type", metadataType); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1845 args.SetUtf8Value("value", value); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1846 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1847 statement.Execute(args); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1848 } |
0 | 1849 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1850 void IndexBackend::SetMetadata(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1851 int64_t id, |
0 | 1852 int32_t metadataType, |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1853 const char* value, |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1854 int64_t revision) |
0 | 1855 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1856 if (manager.GetDialect() == Dialect_SQLite) |
0 | 1857 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1858 assert(HasRevisionsSupport()); |
0 | 1859 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1860 STATEMENT_FROM_HERE, manager, |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1861 "INSERT OR REPLACE INTO Metadata VALUES (${id}, ${type}, ${value}, ${revision})"); |
0 | 1862 |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1863 Dictionary args; |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1864 statement.SetParameterType("revision", ValueType_Integer64); |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
1865 args.SetIntegerValue("revision", revision); |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1866 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1867 ExecuteSetMetadata(statement, args, id, metadataType, value); |
0 | 1868 } |
1869 else | |
1870 { | |
1871 { | |
1872 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1873 STATEMENT_FROM_HERE, manager, |
0 | 1874 "DELETE FROM Metadata WHERE id=${id} AND type=${type}"); |
1875 | |
1876 statement.SetParameterType("id", ValueType_Integer64); | |
1877 statement.SetParameterType("type", ValueType_Integer64); | |
1878 | |
1879 Dictionary args; | |
1880 args.SetIntegerValue("id", id); | |
1881 args.SetIntegerValue("type", metadataType); | |
1882 | |
1883 statement.Execute(args); | |
1884 } | |
1885 | |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1886 if (HasRevisionsSupport()) |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1887 { |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1888 DatabaseManager::CachedStatement statement( |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1889 STATEMENT_FROM_HERE, manager, |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1890 "INSERT INTO Metadata VALUES (${id}, ${type}, ${value}, ${revision})"); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1891 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1892 Dictionary args; |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1893 statement.SetParameterType("revision", ValueType_Integer64); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1894 args.SetIntegerValue("revision", revision); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1895 |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1896 ExecuteSetMetadata(statement, args, id, metadataType, value); |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1897 } |
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1898 else |
0 | 1899 { |
1900 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1901 STATEMENT_FROM_HERE, manager, |
0 | 1902 "INSERT INTO Metadata VALUES (${id}, ${type}, ${value})"); |
1903 | |
1904 Dictionary args; | |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
1905 ExecuteSetMetadata(statement, args, id, metadataType, value); |
0 | 1906 } |
1907 } | |
1908 } | |
1909 | |
1910 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1911 void IndexBackend::SetProtectedPatient(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1912 int64_t internalId, |
0 | 1913 bool isProtected) |
1914 { | |
1915 if (isProtected) | |
1916 { | |
1917 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1918 STATEMENT_FROM_HERE, manager, |
0 | 1919 "DELETE FROM PatientRecyclingOrder WHERE patientId=${id}"); |
1920 | |
1921 statement.SetParameterType("id", ValueType_Integer64); | |
1922 | |
1923 Dictionary args; | |
1924 args.SetIntegerValue("id", internalId); | |
1925 | |
1926 statement.Execute(args); | |
1927 } | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1928 else if (IsProtectedPatient(manager, internalId)) |
0 | 1929 { |
1930 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1931 STATEMENT_FROM_HERE, manager, |
302
3a52e27a2d80
in GenericFormatter, replaced ${} by ${AUTOINCREMENT}
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
301
diff
changeset
|
1932 "INSERT INTO PatientRecyclingOrder VALUES(${AUTOINCREMENT} ${id})"); |
0 | 1933 |
1934 statement.SetParameterType("id", ValueType_Integer64); | |
1935 | |
1936 Dictionary args; | |
1937 args.SetIntegerValue("id", internalId); | |
1938 | |
1939 statement.Execute(args); | |
1940 } | |
1941 else | |
1942 { | |
1943 // Nothing to do: The patient is already unprotected | |
1944 } | |
1945 } | |
1946 | |
1947 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1948 uint32_t IndexBackend::GetDatabaseVersion(DatabaseManager& manager) |
0 | 1949 { |
220
492aa3edf572
use read-only, explicit transaction in IndexBackend::GetDatabaseVersion()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
219
diff
changeset
|
1950 // Create a read-only, explicit transaction to read the database |
492aa3edf572
use read-only, explicit transaction in IndexBackend::GetDatabaseVersion()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
219
diff
changeset
|
1951 // version (this was a read-write, implicit transaction in |
492aa3edf572
use read-only, explicit transaction in IndexBackend::GetDatabaseVersion()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
219
diff
changeset
|
1952 // PostgreSQL plugin <= 3.3 and MySQL plugin <= 3.0) |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1953 DatabaseManager::Transaction transaction(manager, TransactionType_ReadOnly); |
220
492aa3edf572
use read-only, explicit transaction in IndexBackend::GetDatabaseVersion()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
219
diff
changeset
|
1954 |
0 | 1955 std::string version = "unknown"; |
1956 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1957 if (LookupGlobalProperty(version, manager, MISSING_SERVER_IDENTIFIER, Orthanc::GlobalProperty_DatabaseSchemaVersion)) |
0 | 1958 { |
1959 try | |
1960 { | |
1961 return boost::lexical_cast<unsigned int>(version); | |
1962 } | |
1963 catch (boost::bad_lexical_cast&) | |
1964 { | |
1965 } | |
1966 } | |
1967 | |
1968 LOG(ERROR) << "The database is corrupted. Drop it manually for Orthanc to recreate it"; | |
1969 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | |
1970 } | |
1971 | |
1972 | |
1973 /** | |
1974 * Upgrade the database to the specified version of the database | |
1975 * schema. The upgrade script is allowed to make calls to | |
1976 * OrthancPluginReconstructMainDicomTags(). | |
1977 **/ | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1978 void IndexBackend::UpgradeDatabase(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1979 uint32_t targetVersion, |
0 | 1980 OrthancPluginStorageArea* storageArea) |
1981 { | |
1982 LOG(ERROR) << "Upgrading database is not implemented by this plugin"; | |
1983 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
1984 } | |
1985 | |
1986 | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1987 void IndexBackend::ClearMainDicomTags(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1988 int64_t internalId) |
0 | 1989 { |
1990 { | |
1991 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
1992 STATEMENT_FROM_HERE, manager, |
0 | 1993 "DELETE FROM MainDicomTags WHERE id=${id}"); |
1994 | |
1995 statement.SetParameterType("id", ValueType_Integer64); | |
1996 | |
1997 Dictionary args; | |
1998 args.SetIntegerValue("id", internalId); | |
1999 | |
2000 statement.Execute(args); | |
2001 } | |
2002 | |
2003 { | |
2004 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2005 STATEMENT_FROM_HERE, manager, |
0 | 2006 "DELETE FROM DicomIdentifiers WHERE id=${id}"); |
2007 | |
2008 statement.SetParameterType("id", ValueType_Integer64); | |
2009 | |
2010 Dictionary args; | |
2011 args.SetIntegerValue("id", internalId); | |
2012 | |
2013 statement.Execute(args); | |
2014 } | |
2015 } | |
2016 | |
2017 | |
2018 // For unit testing only! | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2019 uint64_t IndexBackend::GetAllResourcesCount(DatabaseManager& manager) |
0 | 2020 { |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
2021 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 2022 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2023 switch (manager.GetDialect()) |
0 | 2024 { |
2025 case Dialect_MySQL: | |
2026 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2027 STATEMENT_FROM_HERE, manager, |
0 | 2028 "SELECT CAST(COUNT(*) AS UNSIGNED INT) FROM Resources")); |
2029 break; | |
2030 | |
2031 case Dialect_PostgreSQL: | |
2032 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2033 STATEMENT_FROM_HERE, manager, |
0 | 2034 "SELECT CAST(COUNT(*) AS BIGINT) FROM Resources")); |
2035 break; | |
2036 | |
2037 case Dialect_SQLite: | |
301 | 2038 case Dialect_MSSQL: |
0 | 2039 statement.reset(new DatabaseManager::CachedStatement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2040 STATEMENT_FROM_HERE, manager, |
0 | 2041 "SELECT COUNT(*) FROM Resources")); |
2042 break; | |
2043 | |
2044 default: | |
2045 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
2046 } | |
2047 | |
2048 statement->SetReadOnly(true); | |
2049 statement->Execute(); | |
2050 | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2051 return static_cast<uint64_t>(statement->ReadInteger64(0)); |
0 | 2052 } |
2053 | |
2054 | |
2055 // For unit testing only! | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2056 uint64_t IndexBackend::GetUnprotectedPatientsCount(DatabaseManager& manager) |
0 | 2057 { |
157
275e14f57f1e
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
152
diff
changeset
|
2058 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
0 | 2059 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2060 switch (manager.GetDialect()) |
0 | 2061 { |
2062 case Dialect_MySQL: | |
2063 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2064 STATEMENT_FROM_HERE, manager, |
0 | 2065 "SELECT CAST(COUNT(*) AS UNSIGNED INT) FROM PatientRecyclingOrder")); |
2066 break; | |
2067 | |
2068 case Dialect_PostgreSQL: | |
2069 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2070 STATEMENT_FROM_HERE, manager, |
0 | 2071 "SELECT CAST(COUNT(*) AS BIGINT) FROM PatientRecyclingOrder")); |
2072 break; | |
2073 | |
304
dd4b0edd1661
GenericFormatter::GetDialect()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
302
diff
changeset
|
2074 case Dialect_MSSQL: |
0 | 2075 case Dialect_SQLite: |
2076 statement.reset(new DatabaseManager::CachedStatement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2077 STATEMENT_FROM_HERE, manager, |
0 | 2078 "SELECT COUNT(*) FROM PatientRecyclingOrder")); |
2079 break; | |
2080 | |
2081 default: | |
2082 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
2083 } | |
2084 | |
2085 statement->SetReadOnly(true); | |
2086 statement->Execute(); | |
2087 | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2088 return static_cast<uint64_t>(statement->ReadInteger64(0)); |
0 | 2089 } |
2090 | |
2091 | |
2092 // For unit testing only! | |
2093 bool IndexBackend::GetParentPublicId(std::string& target, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2094 DatabaseManager& manager, |
0 | 2095 int64_t id) |
2096 { | |
2097 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2098 STATEMENT_FROM_HERE, manager, |
0 | 2099 "SELECT a.publicId FROM Resources AS a, Resources AS b " |
2100 "WHERE a.internalId = b.parentId AND b.internalId = ${id}"); | |
2101 | |
2102 statement.SetReadOnly(true); | |
2103 statement.SetParameterType("id", ValueType_Integer64); | |
2104 | |
2105 Dictionary args; | |
2106 args.SetIntegerValue("id", id); | |
2107 | |
2108 statement.Execute(args); | |
2109 | |
2110 if (statement.IsDone()) | |
2111 { | |
2112 return false; | |
2113 } | |
2114 else | |
2115 { | |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2116 target = statement.ReadString(0); |
0 | 2117 return true; |
2118 } | |
2119 } | |
2120 | |
2121 | |
2122 // For unit tests only! | |
2123 void IndexBackend::GetChildren(std::list<std::string>& childrenPublicIds, | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2124 DatabaseManager& manager, |
0 | 2125 int64_t id) |
2126 { | |
2127 DatabaseManager::CachedStatement statement( | |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2128 STATEMENT_FROM_HERE, manager, |
0 | 2129 "SELECT publicId FROM Resources WHERE parentId=${id}"); |
2130 | |
2131 statement.SetReadOnly(true); | |
2132 statement.SetParameterType("id", ValueType_Integer64); | |
2133 | |
2134 Dictionary args; | |
2135 args.SetIntegerValue("id", id); | |
2136 | |
2137 ReadListOfStrings(childrenPublicIds, statement, args); | |
2138 } | |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2139 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2140 |
78 | 2141 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2142 class IndexBackend::LookupFormatter : public ISqlLookupFormatter |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2143 { |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2144 private: |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2145 Dialect dialect_; |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2146 size_t count_; |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2147 Dictionary dictionary_; |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2148 |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2149 static std::string FormatParameter(size_t index) |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2150 { |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2151 return "p" + boost::lexical_cast<std::string>(index); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2152 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2153 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2154 public: |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2155 LookupFormatter(Dialect dialect) : |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2156 dialect_(dialect), |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2157 count_(0) |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2158 { |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2159 } |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2160 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2161 virtual std::string GenerateParameter(const std::string& value) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2162 { |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2163 const std::string key = FormatParameter(count_); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2164 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2165 count_ ++; |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2166 dictionary_.SetUtf8Value(key, value); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2167 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2168 return "${" + key + "}"; |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2169 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2170 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2171 virtual std::string FormatResourceType(Orthanc::ResourceType level) |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2172 { |
554 | 2173 return boost::lexical_cast<std::string>(MessagesToolbox::ConvertToPlainC(level)); |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2174 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2175 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2176 virtual std::string FormatWildcardEscape() |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2177 { |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2178 switch (dialect_) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2179 { |
310
f3eac614b32e
fixed two DatabaseManager::CachedStatement in the same scope
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
307
diff
changeset
|
2180 case Dialect_MSSQL: |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2181 case Dialect_SQLite: |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2182 case Dialect_PostgreSQL: |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2183 return "ESCAPE '\\'"; |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2184 |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2185 case Dialect_MySQL: |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2186 return "ESCAPE '\\\\'"; |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2187 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2188 default: |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2189 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2190 } |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2191 } |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2192 |
536
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2193 virtual std::string FormatLimits(uint64_t since, uint64_t count) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2194 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2195 std::string sql; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2196 |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2197 switch (dialect_) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2198 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2199 case Dialect_MSSQL: |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2200 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2201 if (since > 0) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2202 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2203 sql += " OFFSET " + boost::lexical_cast<std::string>(since) + " ROWS "; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2204 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2205 if (count > 0) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2206 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2207 sql += " FETCH NEXT " + boost::lexical_cast<std::string>(count) + " ROWS ONLY "; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2208 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2209 }; break; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2210 case Dialect_SQLite: |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2211 case Dialect_PostgreSQL: |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2212 case Dialect_MySQL: |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2213 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2214 if (count > 0) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2215 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2216 sql += " LIMIT " + boost::lexical_cast<std::string>(count); |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2217 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2218 if (since > 0) |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2219 { |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2220 sql += " OFFSET " + boost::lexical_cast<std::string>(since); |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2221 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2222 }; break; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2223 default: |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2224 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2225 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2226 |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2227 return sql; |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2228 } |
4ecf50a4521c
sync ISqlLookupFormatter from Orthanc + fix bug 224: LIMIT shall not be used with MSSQL
Alain Mazy <am@orthanc.team>
parents:
532
diff
changeset
|
2229 |
354
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2230 virtual bool IsEscapeBrackets() const |
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2231 { |
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2232 // This was initially done at a bad location by the following changeset: |
426
d700c8f9fc24
migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
415
diff
changeset
|
2233 // https://orthanc.uclouvain.be/hg/orthanc-databases/rev/389c037387ea |
354
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2234 return (dialect_ == Dialect_MSSQL); |
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2235 } |
2a3bbb4104fa
fix changeset 389c037387ea
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
326
diff
changeset
|
2236 |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2237 void PrepareStatement(DatabaseManager::StandaloneStatement& statement) const |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2238 { |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2239 statement.SetReadOnly(true); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2240 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2241 for (size_t i = 0; i < count_; i++) |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2242 { |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2243 statement.SetParameterType(FormatParameter(i), ValueType_Utf8String); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2244 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2245 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2246 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2247 const Dictionary& GetDictionary() const |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2248 { |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2249 return dictionary_; |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2250 } |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2251 }; |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2252 #endif |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2253 |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2254 |
78 | 2255 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2256 // New primitive since Orthanc 1.5.2 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2257 void IndexBackend::LookupResources(IDatabaseBackendOutput& output, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2258 DatabaseManager& manager, |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2259 const DatabaseConstraints& lookup, |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2260 OrthancPluginResourceType queryLevel_, |
401
a8774581adfc
replaced "WithLabels" and "WithoutLabels", by "Labels" and "LabelsConstraint"
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
400
diff
changeset
|
2261 const std::set<std::string>& labels, |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2262 LabelsConstraint labelsConstraint, |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2263 uint32_t limit, |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2264 bool requestSomeInstance) |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2265 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2266 LookupFormatter formatter(manager.GetDialect()); |
554 | 2267 Orthanc::ResourceType queryLevel = MessagesToolbox::Convert(queryLevel_); |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2268 Orthanc::ResourceType lowerLevel, upperLevel; |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2269 ISqlLookupFormatter::GetLookupLevels(lowerLevel, upperLevel, queryLevel, lookup); |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2270 |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2271 std::string sql; |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2272 bool enableNewStudyCode = true; |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2273 |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2274 if (enableNewStudyCode && lowerLevel == queryLevel && upperLevel == queryLevel) |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2275 { |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2276 ISqlLookupFormatter::ApplySingleLevel(sql, formatter, lookup, queryLevel, labels, labelsConstraint, limit); |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2277 |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2278 if (requestSomeInstance) |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2279 { |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2280 // Composite query to find some instance if requested |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2281 switch (queryLevel) |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2282 { |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2283 case Orthanc::ResourceType_Patient: |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2284 sql = ("SELECT patients_studies.patients_public_id, MIN(instances.publicId) AS instances_public_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2285 "FROM (SELECT patients.publicId AS patients_public_id, MIN(studies.internalId) AS studies_internal_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2286 "FROM (" + sql + |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2287 ") AS patients " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2288 "INNER JOIN Resources studies ON studies.parentId = patients.internalId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2289 "GROUP BY patients.publicId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2290 ") AS patients_studies " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2291 "INNER JOIN Resources series ON series.parentId = patients_studies.studies_internal_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2292 "INNER JOIN Resources instances ON instances.parentId = series.internalId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2293 "GROUP BY patients_studies.patients_public_id"); |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2294 break; |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2295 case Orthanc::ResourceType_Study: |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2296 sql = ("SELECT studies_series.studies_public_id, MIN(instances.publicId) AS instances_public_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2297 "FROM (SELECT studies.publicId AS studies_public_id, MIN(series.internalId) AS series_internal_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2298 "FROM (" + sql + |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2299 ") AS studies " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2300 "INNER JOIN Resources series ON series.parentId = studies.internalId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2301 "GROUP BY studies.publicId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2302 ") AS studies_series " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2303 "INNER JOIN Resources instances ON instances.parentId = studies_series.series_internal_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2304 "GROUP BY studies_series.studies_public_id"); |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2305 break; |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2306 case Orthanc::ResourceType_Series: |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2307 sql = ("SELECT series.publicId AS series_public_id, MIN(instances.publicId) AS instances_public_id " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2308 "FROM (" + sql + |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2309 ") AS series " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2310 "INNER JOIN Resources instances ON instances.parentId = series.internalId " |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2311 "GROUP BY series.publicId "); |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2312 break; |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2313 |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2314 case Orthanc::ResourceType_Instance: |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2315 sql = ("SELECT instances.publicId, instances.publicId FROM (" + sql + ") instances"); |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2316 break; |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2317 |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2318 default: |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2319 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2320 } |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2321 } |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2322 } |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2323 else |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2324 { |
551
1a23f1ce3b98
move classes DatabaseConstraint and ISqlLookupFormatter into namespace OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
538
diff
changeset
|
2325 ISqlLookupFormatter::Apply(sql, formatter, lookup, queryLevel, labels, labelsConstraint, limit); |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2326 |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2327 if (requestSomeInstance) |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2328 { |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2329 // Composite query to find some instance if requested |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2330 switch (queryLevel) |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2331 { |
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2332 case Orthanc::ResourceType_Patient: |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2333 sql = ("SELECT patients.publicId, MIN(instances.publicId) FROM (" + sql + ") patients " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2334 "INNER JOIN Resources studies ON studies.parentId = patients.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2335 "INNER JOIN Resources series ON series.parentId = studies.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2336 "INNER JOIN Resources instances ON instances.parentId = series.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2337 "GROUP BY patients.publicId"); |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2338 break; |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2339 |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2340 case Orthanc::ResourceType_Study: |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2341 sql = ("SELECT studies.publicId, MIN(instances.publicId) FROM (" + sql + ") studies " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2342 "INNER JOIN Resources series ON series.parentId = studies.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2343 "INNER JOIN Resources instances ON instances.parentId = series.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2344 "GROUP BY studies.publicId"); |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2345 break; |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2346 case Orthanc::ResourceType_Series: |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2347 sql = ("SELECT series.publicId, MIN(instances.publicId) FROM (" + sql + ") series " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2348 "INNER JOIN Resources instances ON instances.parentId = series.internalId " |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2349 "GROUP BY series.publicId"); |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2350 break; |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2351 |
415
7e123f047771
LookupResources optimization continued
Alain Mazy <am@osimis.io>
parents:
414
diff
changeset
|
2352 case Orthanc::ResourceType_Instance: |
414
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2353 sql = ("SELECT instances.publicId, instances.publicId FROM (" + sql + ") instances"); |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2354 break; |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2355 |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2356 default: |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2357 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
f2d3b5c5a68d
Optimizing tools/find at studies level only. Integ Tests are ok with PG
Alain Mazy <am@osimis.io>
parents:
410
diff
changeset
|
2358 } |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2359 } |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2360 } |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2361 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2362 DatabaseManager::StandaloneStatement statement(manager, sql); |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2363 formatter.PrepareStatement(statement); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2364 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2365 statement.Execute(formatter.GetDictionary()); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2366 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2367 while (!statement.IsDone()) |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2368 { |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2369 if (requestSomeInstance) |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2370 { |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2371 output.AnswerMatchingResource(statement.ReadString(0), statement.ReadString(1)); |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2372 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2373 else |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2374 { |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2375 output.AnswerMatchingResource(statement.ReadString(0)); |
70
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2376 } |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2377 |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2378 statement.Next(); |
e6c13ddd26d9
all integration tests passing with LookupResources extension
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
69
diff
changeset
|
2379 } |
69
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2380 } |
19764fc60ade
compatibility with Orthanc SDDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
67
diff
changeset
|
2381 #endif |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2382 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2383 |
78 | 2384 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2385 static void ExecuteSetResourcesContentTags( |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2386 DatabaseManager& manager, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2387 const std::string& table, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2388 const std::string& variablePrefix, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2389 uint32_t count, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2390 const OrthancPluginResourcesContentTags* tags) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2391 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2392 std::string sql; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2393 Dictionary args; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2394 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2395 for (uint32_t i = 0; i < count; i++) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2396 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2397 std::string name = variablePrefix + boost::lexical_cast<std::string>(i); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2398 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2399 args.SetUtf8Value(name, tags[i].value); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2400 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2401 std::string insert = ("(" + boost::lexical_cast<std::string>(tags[i].resource) + ", " + |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2402 boost::lexical_cast<std::string>(tags[i].group) + ", " + |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2403 boost::lexical_cast<std::string>(tags[i].element) + ", " + |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2404 "${" + name + "})"); |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2405 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2406 if (sql.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2407 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2408 sql = "INSERT INTO " + table + " VALUES " + insert; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2409 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2410 else |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2411 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2412 sql += ", " + insert; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2413 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2414 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2415 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2416 if (!sql.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2417 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2418 DatabaseManager::StandaloneStatement statement(manager, sql); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2419 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2420 for (uint32_t i = 0; i < count; i++) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2421 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2422 statement.SetParameterType(variablePrefix + boost::lexical_cast<std::string>(i), |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2423 ValueType_Utf8String); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2424 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2425 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2426 statement.Execute(args); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2427 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2428 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2429 #endif |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2430 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2431 |
78 | 2432 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2433 static void ExecuteSetResourcesContentMetadata( |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2434 DatabaseManager& manager, |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
2435 bool hasRevisionsSupport, |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2436 uint32_t count, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2437 const OrthancPluginResourcesContentMetadata* metadata) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2438 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2439 std::string sqlRemove; // To overwrite |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2440 std::string sqlInsert; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2441 Dictionary args; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2442 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2443 for (uint32_t i = 0; i < count; i++) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2444 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2445 std::string name = "m" + boost::lexical_cast<std::string>(i); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2446 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2447 args.SetUtf8Value(name, metadata[i].value); |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2448 |
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2449 std::string revisionSuffix; |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
2450 if (hasRevisionsSupport) |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2451 { |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
2452 revisionSuffix = ", 0"; |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2453 } |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2454 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2455 std::string insert = ("(" + boost::lexical_cast<std::string>(metadata[i].resource) + ", " + |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2456 boost::lexical_cast<std::string>(metadata[i].metadata) + ", " + |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2457 "${" + name + "}" + revisionSuffix + ")"); |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2458 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2459 std::string remove = ("(id=" + boost::lexical_cast<std::string>(metadata[i].resource) + |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2460 " AND type=" + boost::lexical_cast<std::string>(metadata[i].metadata) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2461 + ")"); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2462 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2463 if (sqlInsert.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2464 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2465 sqlInsert = "INSERT INTO Metadata VALUES " + insert; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2466 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2467 else |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2468 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2469 sqlInsert += ", " + insert; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2470 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2471 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2472 if (sqlRemove.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2473 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2474 sqlRemove = "DELETE FROM Metadata WHERE " + remove; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2475 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2476 else |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2477 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2478 sqlRemove += " OR " + remove; |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2479 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2480 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2481 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2482 if (!sqlRemove.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2483 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2484 DatabaseManager::StandaloneStatement statement(manager, sqlRemove); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2485 statement.Execute(); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2486 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2487 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2488 if (!sqlInsert.empty()) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2489 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2490 DatabaseManager::StandaloneStatement statement(manager, sqlInsert); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2491 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2492 for (uint32_t i = 0; i < count; i++) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2493 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2494 statement.SetParameterType("m" + boost::lexical_cast<std::string>(i), |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2495 ValueType_Utf8String); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2496 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2497 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2498 statement.Execute(args); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2499 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2500 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2501 #endif |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2502 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2503 |
78 | 2504 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2505 // New primitive since Orthanc 1.5.2 |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2506 void IndexBackend::SetResourcesContent( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2507 DatabaseManager& manager, |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2508 uint32_t countIdentifierTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2509 const OrthancPluginResourcesContentTags* identifierTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2510 uint32_t countMainDicomTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2511 const OrthancPluginResourcesContentTags* mainDicomTags, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2512 uint32_t countMetadata, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2513 const OrthancPluginResourcesContentMetadata* metadata) |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2514 { |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2515 /** |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2516 * TODO - PostgreSQL doesn't allow multiple commands in a prepared |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2517 * statement, so we execute 3 separate commands (for identifiers, |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2518 * main tags and metadata). Maybe MySQL does not suffer from the |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2519 * same limitation, to check. |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2520 **/ |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2521 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2522 ExecuteSetResourcesContentTags(manager, "DicomIdentifiers", "i", |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2523 countIdentifierTags, identifierTags); |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2524 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2525 ExecuteSetResourcesContentTags(manager, "MainDicomTags", "t", |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2526 countMainDicomTags, mainDicomTags); |
256
e184dcadf163
handling of revisions in metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
255
diff
changeset
|
2527 |
266
cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
265
diff
changeset
|
2528 ExecuteSetResourcesContentMetadata(manager, HasRevisionsSupport(), countMetadata, metadata); |
75
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2529 } |
52c70007bb87
new extension implemented for PostgreSQL: SetResourcesContent
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
74
diff
changeset
|
2530 #endif |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2531 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2532 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2533 // New primitive since Orthanc 1.5.2 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2534 void IndexBackend::GetChildrenMetadata(std::list<std::string>& target, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2535 DatabaseManager& manager, |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2536 int64_t resourceId, |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2537 int32_t metadata) |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2538 { |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2539 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2540 STATEMENT_FROM_HERE, manager, |
76
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2541 "SELECT value FROM Metadata WHERE type=${metadata} AND " |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2542 "id IN (SELECT internalId FROM Resources WHERE parentId=${id})"); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2543 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2544 statement.SetReadOnly(true); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2545 statement.SetParameterType("id", ValueType_Integer64); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2546 statement.SetParameterType("metadata", ValueType_Integer64); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2547 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2548 Dictionary args; |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2549 args.SetIntegerValue("id", static_cast<int>(resourceId)); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2550 args.SetIntegerValue("metadata", static_cast<int>(metadata)); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2551 |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2552 ReadListOfStrings(target, statement, args); |
a1c6238b26f8
new extension implemented for PostgreSQL: GetChildrenMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
75
diff
changeset
|
2553 } |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2554 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2555 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2556 // New primitive since Orthanc 1.5.2 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2557 void IndexBackend::TagMostRecentPatient(DatabaseManager& manager, |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2558 int64_t patient) |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2559 { |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2560 std::string suffix; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2561 if (manager.GetDialect() == Dialect_MSSQL) |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2562 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2563 suffix = "OFFSET 0 ROWS FETCH FIRST 2 ROWS ONLY"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2564 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2565 else |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2566 { |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2567 suffix = "LIMIT 2"; |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2568 } |
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2569 |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2570 int64_t seq; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2571 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2572 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2573 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2574 STATEMENT_FROM_HERE, manager, |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2575 "SELECT * FROM PatientRecyclingOrder WHERE seq >= " |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2576 "(SELECT seq FROM PatientRecyclingOrder WHERE patientid=${id}) ORDER BY seq " + suffix); |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2577 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2578 statement.SetReadOnly(true); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2579 statement.SetParameterType("id", ValueType_Integer64); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2580 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2581 Dictionary args; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2582 args.SetIntegerValue("id", patient); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2583 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2584 statement.Execute(args); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2585 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2586 if (statement.IsDone()) |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2587 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2588 // The patient is protected, don't add it to the recycling order |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2589 return; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2590 } |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2591 |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2592 seq = statement.ReadInteger64(0); |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2593 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2594 statement.Next(); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2595 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2596 if (statement.IsDone()) |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2597 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2598 // The patient is already at the end of the recycling order |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2599 // (because of the "LIMIT 2" above), no need to modify the table |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2600 return; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2601 } |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2602 } |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2603 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2604 // Delete the old position of the patient in the recycling order |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2605 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2606 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2607 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2608 STATEMENT_FROM_HERE, manager, |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2609 "DELETE FROM PatientRecyclingOrder WHERE seq=${seq}"); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2610 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2611 statement.SetParameterType("seq", ValueType_Integer64); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2612 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2613 Dictionary args; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2614 args.SetIntegerValue("seq", seq); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2615 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2616 statement.Execute(args); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2617 } |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2618 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2619 // Add the patient to the end of the recycling order |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2620 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2621 { |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2622 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2623 STATEMENT_FROM_HERE, manager, |
306
544e0c943b40
added transact-sql dialect for LIMIT and OFFSET
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
304
diff
changeset
|
2624 "INSERT INTO PatientRecyclingOrder VALUES(${AUTOINCREMENT} ${id})"); |
88
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2625 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2626 statement.SetParameterType("id", ValueType_Integer64); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2627 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2628 Dictionary args; |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2629 args.SetIntegerValue("id", patient); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2630 |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2631 statement.Execute(args); |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2632 } |
eb08ec14fb04
new extension implemented: TagMostRecentPatient
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
85
diff
changeset
|
2633 } |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2634 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2635 |
410
614031f7a16d
OrthancPostgreSQL-5.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
406
diff
changeset
|
2636 // New primitive since Orthanc 1.5.4 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2637 bool IndexBackend::LookupResourceAndParent(int64_t& id, |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2638 OrthancPluginResourceType& type, |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2639 std::string& parentPublicId, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2640 DatabaseManager& manager, |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2641 const char* publicId) |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2642 { |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2643 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2644 STATEMENT_FROM_HERE, manager, |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2645 "SELECT resource.internalId, resource.resourceType, parent.publicId " |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2646 "FROM Resources AS resource LEFT JOIN Resources parent ON parent.internalId=resource.parentId " |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2647 "WHERE resource.publicId=${id}"); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2648 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2649 statement.SetParameterType("id", ValueType_Utf8String); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2650 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2651 Dictionary args; |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2652 args.SetUtf8Value("id", publicId); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2653 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2654 statement.Execute(args); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2655 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2656 if (statement.IsDone()) |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2657 { |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2658 return false; |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2659 } |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2660 else |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2661 { |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2662 if (statement.GetResultFieldsCount() != 3) |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2663 { |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2664 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2665 } |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2666 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2667 statement.SetResultFieldType(0, ValueType_Integer64); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2668 statement.SetResultFieldType(1, ValueType_Integer64); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2669 statement.SetResultFieldType(2, ValueType_Utf8String); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2670 |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2671 id = statement.ReadInteger64(0); |
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2672 type = static_cast<OrthancPluginResourceType>(statement.ReadInteger32(1)); |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2673 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2674 const IValue& value = statement.GetResultField(2); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2675 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2676 switch (value.GetType()) |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2677 { |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2678 case ValueType_Null: |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2679 parentPublicId.clear(); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2680 break; |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2681 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2682 case ValueType_Utf8String: |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2683 parentPublicId = dynamic_cast<const Utf8StringValue&>(value).GetContent(); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2684 break; |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2685 |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2686 default: |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2687 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2688 } |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2689 |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2690 assert((statement.Next(), statement.IsDone())); |
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2691 return true; |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2692 } |
203
2089d4071408
moving classes out of OrthancPlugins namespace, to OrthancDatabases
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
201
diff
changeset
|
2693 } |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2694 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2695 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2696 // New primitive since Orthanc 1.5.4 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2697 void IndexBackend::GetAllMetadata(std::map<int32_t, std::string>& result, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2698 DatabaseManager& manager, |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2699 int64_t id) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2700 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2701 DatabaseManager::CachedStatement statement( |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2702 STATEMENT_FROM_HERE, manager, |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2703 "SELECT type, value FROM Metadata WHERE id=${id}"); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2704 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2705 statement.SetReadOnly(true); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2706 statement.SetParameterType("id", ValueType_Integer64); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2707 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2708 Dictionary args; |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2709 args.SetIntegerValue("id", id); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2710 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2711 statement.Execute(args); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2712 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2713 result.clear(); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2714 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2715 if (!statement.IsDone()) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2716 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2717 if (statement.GetResultFieldsCount() != 2) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2718 { |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2719 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2720 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2721 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2722 statement.SetResultFieldType(0, ValueType_Integer64); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2723 statement.SetResultFieldType(1, ValueType_Utf8String); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2724 |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2725 while (!statement.IsDone()) |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2726 { |
263
29d2b76516f6
fix mysql and postgresql builds
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
262
diff
changeset
|
2727 result[statement.ReadInteger32(0)] = statement.ReadString(1); |
117
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2728 statement.Next(); |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2729 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2730 } |
ca0ecd412988
Implementation of new extensions: LookupResourceAndParent and GetAllMetadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
88
diff
changeset
|
2731 } |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2732 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2733 |
271
6b18d3fbee82
backward compatibility with Orthanc SDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
2734 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2735 void IndexBackend::CreateInstanceGeneric(OrthancPluginCreateInstanceResult& result, |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2736 DatabaseManager& manager, |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2737 const char* hashPatient, |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2738 const char* hashStudy, |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2739 const char* hashSeries, |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2740 const char* hashInstance) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2741 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2742 // Check out "OrthancServer/Sources/Database/Compatibility/ICreateInstance.cpp" |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2743 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2744 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2745 OrthancPluginResourceType type; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2746 int64_t tmp; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2747 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2748 if (LookupResource(tmp, type, manager, hashInstance)) |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2749 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2750 // The instance already exists |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2751 assert(type == OrthancPluginResourceType_Instance); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2752 result.instanceId = tmp; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2753 result.isNewInstance = false; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2754 return; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2755 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2756 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2757 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2758 result.instanceId = CreateResource(manager, hashInstance, OrthancPluginResourceType_Instance); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2759 result.isNewInstance = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2760 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2761 result.isNewPatient = false; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2762 result.isNewStudy = false; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2763 result.isNewSeries = false; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2764 result.patientId = -1; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2765 result.studyId = -1; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2766 result.seriesId = -1; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2767 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2768 // Detect up to which level the patient/study/series/instance |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2769 // hierarchy must be created |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2770 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2771 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2772 OrthancPluginResourceType dummy; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2773 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2774 if (LookupResource(result.seriesId, dummy, manager, hashSeries)) |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2775 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2776 assert(dummy == OrthancPluginResourceType_Series); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2777 // The patient, the study and the series already exist |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2778 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2779 bool ok = (LookupResource(result.patientId, dummy, manager, hashPatient) && |
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2780 LookupResource(result.studyId, dummy, manager, hashStudy)); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2781 (void) ok; // Remove warning about unused variable in release builds |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2782 assert(ok); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2783 } |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2784 else if (LookupResource(result.studyId, dummy, manager, hashStudy)) |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2785 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2786 assert(dummy == OrthancPluginResourceType_Study); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2787 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2788 // New series: The patient and the study already exist |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2789 result.isNewSeries = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2790 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2791 bool ok = LookupResource(result.patientId, dummy, manager, hashPatient); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2792 (void) ok; // Remove warning about unused variable in release builds |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2793 assert(ok); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2794 } |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2795 else if (LookupResource(result.patientId, dummy, manager, hashPatient)) |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2796 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2797 assert(dummy == OrthancPluginResourceType_Patient); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2798 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2799 // New study and series: The patient already exist |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2800 result.isNewStudy = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2801 result.isNewSeries = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2802 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2803 else |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2804 { |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2805 // New patient, study and series: Nothing exists |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2806 result.isNewPatient = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2807 result.isNewStudy = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2808 result.isNewSeries = true; |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2809 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2810 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2811 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2812 // Create the series if needed |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2813 if (result.isNewSeries) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2814 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2815 result.seriesId = CreateResource(manager, hashSeries, OrthancPluginResourceType_Series); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2816 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2817 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2818 // Create the study if needed |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2819 if (result.isNewStudy) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2820 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2821 result.studyId = CreateResource(manager, hashStudy, OrthancPluginResourceType_Study); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2822 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2823 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2824 // Create the patient if needed |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2825 if (result.isNewPatient) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2826 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2827 result.patientId = CreateResource(manager, hashPatient, OrthancPluginResourceType_Patient); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2828 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2829 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2830 // Create the parent-to-child links |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2831 AttachChild(manager, result.seriesId, result.instanceId); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2832 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2833 if (result.isNewSeries) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2834 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2835 AttachChild(manager, result.studyId, result.seriesId); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2836 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2837 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2838 if (result.isNewStudy) |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2839 { |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2840 AttachChild(manager, result.patientId, result.studyId); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2841 } |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2842 |
225
94c9908e6aca
removed DatabaseManager member out of class IndexBackend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
222
diff
changeset
|
2843 TagMostRecentPatient(manager, result.patientId); |
210
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2844 |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2845 // Sanity checks |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2846 assert(result.patientId != -1); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2847 assert(result.studyId != -1); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2848 assert(result.seriesId != -1); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2849 assert(result.instanceId != -1); |
a0c095a4ba7d
all the integration tests pass on SQLite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
209
diff
changeset
|
2850 } |
271
6b18d3fbee82
backward compatibility with Orthanc SDK 0.9.5
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
266
diff
changeset
|
2851 #endif |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2852 |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2853 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2854 void IndexBackend::AddLabel(DatabaseManager& manager, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2855 int64_t resource, |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2856 const std::string& label) |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2857 { |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2858 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2859 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2860 switch (manager.GetDialect()) |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2861 { |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2862 case Dialect_PostgreSQL: |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2863 statement.reset(new DatabaseManager::CachedStatement( |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2864 STATEMENT_FROM_HERE, manager, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2865 "INSERT INTO Labels VALUES(${id}, ${label}) ON CONFLICT DO NOTHING")); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2866 break; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2867 |
399
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2868 case Dialect_SQLite: |
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2869 statement.reset(new DatabaseManager::CachedStatement( |
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2870 STATEMENT_FROM_HERE, manager, |
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2871 "INSERT OR IGNORE INTO Labels VALUES(${id}, ${label})")); |
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2872 break; |
19bd3ee1f0b3
support for labels in sqlite
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
398
diff
changeset
|
2873 |
400
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2874 case Dialect_MySQL: |
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2875 statement.reset(new DatabaseManager::CachedStatement( |
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2876 STATEMENT_FROM_HERE, manager, |
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2877 "INSERT IGNORE INTO Labels VALUES(${id}, ${label})")); |
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2878 break; |
897253c21208
support for labels in mysql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
399
diff
changeset
|
2879 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2880 default: |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2881 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2882 } |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2883 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2884 statement->SetParameterType("id", ValueType_Integer64); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2885 statement->SetParameterType("label", ValueType_Utf8String); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2886 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2887 Dictionary args; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2888 args.SetIntegerValue("id", resource); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2889 args.SetUtf8Value("label", label); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2890 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2891 statement->Execute(args); |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2892 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2893 |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2894 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2895 void IndexBackend::RemoveLabel(DatabaseManager& manager, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2896 int64_t resource, |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2897 const std::string& label) |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2898 { |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2899 DatabaseManager::CachedStatement statement( |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2900 STATEMENT_FROM_HERE, manager, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2901 "DELETE FROM Labels WHERE id=${id} AND label=${label}"); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2902 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2903 statement.SetParameterType("id", ValueType_Integer64); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2904 statement.SetParameterType("label", ValueType_Utf8String); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2905 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2906 Dictionary args; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2907 args.SetIntegerValue("id", resource); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2908 args.SetUtf8Value("label", label); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2909 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2910 statement.Execute(args); |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2911 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2912 |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2913 |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2914 void IndexBackend::ListLabels(std::list<std::string>& target, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2915 DatabaseManager& manager, |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2916 int64_t resource) |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2917 { |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2918 DatabaseManager::CachedStatement statement( |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2919 STATEMENT_FROM_HERE, manager, |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2920 "SELECT label FROM Labels WHERE id=${id}"); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2921 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2922 statement.SetReadOnly(true); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2923 statement.SetParameterType("id", ValueType_Integer64); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2924 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2925 Dictionary args; |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2926 args.SetIntegerValue("id", resource); |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2927 |
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2928 ReadListOfStrings(target, statement, args); |
391
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2929 } |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2930 |
d14e6ff04a5c
added primitives to handle labels
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
389
diff
changeset
|
2931 |
402
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2932 void IndexBackend::ListAllLabels(std::list<std::string>& target, |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2933 DatabaseManager& manager) |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2934 { |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2935 DatabaseManager::CachedStatement statement( |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2936 STATEMENT_FROM_HERE, manager, |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2937 "SELECT DISTINCT label FROM Labels"); |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2938 |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2939 Dictionary args; |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2940 ReadListOfStrings(target, statement, args); |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2941 } |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2942 |
82921a29349a
implemented IDatabaseBackend::ListAllLabels()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
401
diff
changeset
|
2943 |
234
d1b124d116c1
PostgreSQL index plugin handles retries for collisions between multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
232
diff
changeset
|
2944 void IndexBackend::Register(IndexBackend* backend, |
d1b124d116c1
PostgreSQL index plugin handles retries for collisions between multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
232
diff
changeset
|
2945 size_t countConnections, |
d1b124d116c1
PostgreSQL index plugin handles retries for collisions between multiple writers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
232
diff
changeset
|
2946 unsigned int maxDatabaseRetries) |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2947 { |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2948 if (backend == NULL) |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2949 { |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2950 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2951 } |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2952 |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2953 LOG(WARNING) << "The index plugin will use " << countConnections << " connection(s) to the database, " |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2954 << "and will retry up to " << maxDatabaseRetries << " time(s) in the case of a collision"; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2955 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2956 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2957 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 0) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2958 if (OrthancPluginCheckVersionAdvanced(backend->GetContext(), 1, 12, 0) == 1) |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2959 { |
552 | 2960 DatabaseBackendAdapterV4::Register(backend, countConnections, maxDatabaseRetries); |
373
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2961 return; |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2962 } |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2963 # endif |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2964 #endif |
be7de633695c
started DatabaseBackendAdapterV4
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
372
diff
changeset
|
2965 |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2966 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2967 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2968 if (OrthancPluginCheckVersionAdvanced(backend->GetContext(), 1, 9, 2) == 1) |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2969 { |
552 | 2970 DatabaseBackendAdapterV3::Register(backend, countConnections, maxDatabaseRetries); |
372
b5e2c1e48828
created branch db-protobuf to take advantage of OrthancPluginRegisterDatabaseBackendV4()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
2971 return; |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2972 } |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2973 # endif |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2974 #endif |
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2975 |
372
b5e2c1e48828
created branch db-protobuf to take advantage of OrthancPluginRegisterDatabaseBackendV4()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
359
diff
changeset
|
2976 LOG(WARNING) << "Performance warning: Your version of the Orthanc core or SDK doesn't support multiple readers/writers"; |
552 | 2977 DatabaseBackendAdapterV2::Register(backend); |
213
c2e4a909de0e
added IndexBackend::Register() to be used in all the index plugins
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
210
diff
changeset
|
2978 } |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2979 |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
2980 |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2981 bool IndexBackend::LookupGlobalIntegerProperty(int& target, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2982 DatabaseManager& manager, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2983 const char* serverIdentifier, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2984 int32_t property) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2985 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2986 std::string value; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2987 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2988 if (LookupGlobalProperty(value, manager, serverIdentifier, property)) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2989 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2990 try |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2991 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2992 target = boost::lexical_cast<int>(value); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2993 return true; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2994 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2995 catch (boost::bad_lexical_cast&) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2996 { |
396
7b3acfa95bd8
implementation of list/add/remove labels in postgresql
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
391
diff
changeset
|
2997 LOG(ERROR) << "Corrupted database"; |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2998 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
2999 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3000 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3001 else |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3002 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3003 return false; |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3004 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3005 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3006 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3007 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3008 void IndexBackend::SetGlobalIntegerProperty(DatabaseManager& manager, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3009 const char* serverIdentifier, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3010 int32_t property, |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3011 int value) |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3012 { |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3013 std::string s = boost::lexical_cast<std::string>(value); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3014 SetGlobalProperty(manager, serverIdentifier, property, s.c_str()); |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3015 } |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3016 |
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3017 |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3018 void IndexBackend::Finalize() |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3019 { |
552 | 3020 DatabaseBackendAdapterV2::Finalize(); |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3021 |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3022 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3023 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) |
552 | 3024 DatabaseBackendAdapterV3::Finalize(); |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3025 # endif |
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3026 #endif |
381
9cde77ca9ad9
initializing and finalizing protobuf
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
3027 |
9cde77ca9ad9
initializing and finalizing protobuf
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
3028 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
9cde77ca9ad9
initializing and finalizing protobuf
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
3029 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 0) |
552 | 3030 DatabaseBackendAdapterV4::Finalize(); |
381
9cde77ca9ad9
initializing and finalizing protobuf
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
3031 # endif |
9cde77ca9ad9
initializing and finalizing protobuf
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
378
diff
changeset
|
3032 #endif |
222
c8e06b41feec
refactoring registration/finalization of index backend
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
221
diff
changeset
|
3033 } |
226
a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
225
diff
changeset
|
3034 |
a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
225
diff
changeset
|
3035 |
447 | 3036 uint64_t IndexBackend::MeasureLatency(DatabaseManager& manager) |
3037 { | |
3038 // execute 11x the simplest statement and return the median value | |
3039 std::vector<uint64_t> measures; | |
3040 | |
3041 for (int i = 0; i < 11; i++) | |
3042 { | |
452 | 3043 DatabaseManager::StandaloneStatement statement(manager, "SELECT 1"); |
447 | 3044 |
3045 Orthanc::Toolbox::ElapsedTimer timer; | |
3046 | |
452 | 3047 statement.ExecuteWithoutResult(); |
447 | 3048 |
3049 measures.push_back(timer.GetElapsedMicroseconds()); | |
3050 } | |
3051 | |
3052 std::sort(measures.begin(), measures.end()); | |
3053 | |
3054 return measures[measures.size() / 2]; | |
3055 } | |
3056 | |
3057 | |
403
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
3058 DatabaseManager* IndexBackend::CreateSingleDatabaseManager(IDatabaseBackend& backend, |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
3059 bool hasIdentifierTags, |
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
3060 const std::list<IdentifierTag>& identifierTags) |
226
a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
225
diff
changeset
|
3061 { |
255
d663d9e44f8d
reintroduction of IDatabaseFactory into DatabaseManager
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
253
diff
changeset
|
3062 std::unique_ptr<DatabaseManager> manager(new DatabaseManager(backend.CreateDatabaseFactory())); |
403
91124cc8a8c7
database plugins are informed about the identifier tags
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
402
diff
changeset
|
3063 backend.ConfigureDatabase(*manager, hasIdentifierTags, identifierTags); |
237
35598014f140
refactoring to remove GlobalProperties.cpp
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
234
diff
changeset
|
3064 return manager.release(); |
226
a4918d57435c
DatabaseManager doesn't IDatabaseFactory anymore
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
225
diff
changeset
|
3065 } |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3066 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3067 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3068 bool IndexBackend::HasFindSupport() const |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3069 { |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3070 // TODO-FIND move to child plugins ? |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3071 return true; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3072 } |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3073 #endif |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3074 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3075 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3076 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) |
558 | 3077 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* GetResourceContent( |
3078 Orthanc::DatabasePluginMessages::Find_Response* response, | |
3079 Orthanc::DatabasePluginMessages::ResourceType level) | |
3080 { | |
3081 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = NULL; // the protobuf response will be the owner | |
3082 | |
3083 switch (level) | |
3084 { | |
3085 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT: | |
3086 content = response->mutable_patient_content(); | |
3087 break; | |
3088 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: | |
3089 content = response->mutable_study_content(); | |
3090 break; | |
3091 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: | |
3092 content =response->mutable_series_content(); | |
3093 break; | |
3094 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE: | |
3095 content = response->mutable_instance_content(); | |
3096 break; | |
3097 default: | |
3098 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
3099 } | |
3100 return content; | |
3101 } | |
3102 | |
3103 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* GetChildrenContent( | |
3104 Orthanc::DatabasePluginMessages::Find_Response* response, | |
3105 Orthanc::DatabasePluginMessages::ResourceType childrenLevel) | |
3106 { | |
3107 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = NULL; // the protobuf response will be the owner | |
3108 | |
3109 switch (childrenLevel) | |
3110 { | |
3111 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: | |
3112 content = response->mutable_children_studies_content(); | |
3113 break; | |
3114 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: | |
3115 content =response->mutable_children_series_content(); | |
3116 break; | |
3117 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE: | |
3118 content = response->mutable_children_instances_content(); | |
3119 break; | |
3120 default: | |
3121 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
3122 } | |
3123 return content; | |
3124 } | |
3125 | |
560 | 3126 std::string JoinRequestedMetadata(const Orthanc::DatabasePluginMessages::Find_Request_ChildrenSpecification* childrenSpec) |
3127 { | |
3128 std::set<std::string> metadataTypes; | |
3129 for (int i = 0; i < childrenSpec->retrieve_metadata_size(); ++i) | |
3130 { | |
3131 metadataTypes.insert(boost::lexical_cast<std::string>(childrenSpec->retrieve_metadata(i))); | |
3132 } | |
3133 std::string joinedMetadataTypes; | |
3134 Orthanc::Toolbox::JoinStrings(joinedMetadataTypes, metadataTypes, ", "); | |
3135 | |
3136 return joinedMetadataTypes; | |
3137 } | |
3138 | |
3139 std::string JoinRequestedTags(const Orthanc::DatabasePluginMessages::Find_Request_ChildrenSpecification* childrenSpec) | |
3140 { | |
3141 std::set<std::string> tags; | |
3142 for (int i = 0; i < childrenSpec->retrieve_main_dicom_tags_size(); ++i) | |
3143 { | |
3144 tags.insert("(" + boost::lexical_cast<std::string>(childrenSpec->retrieve_main_dicom_tags(i).group()) | |
3145 + ", " + boost::lexical_cast<std::string>(childrenSpec->retrieve_main_dicom_tags(i).element()) + ")"); | |
3146 } | |
3147 std::string joinedTags; | |
3148 Orthanc::Toolbox::JoinStrings(joinedTags, tags, ", "); | |
3149 | |
3150 return joinedTags; | |
3151 } | |
3152 | |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3153 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3154 #define C0_QUERY_ID 0 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3155 #define C1_INTERNAL_ID 1 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3156 #define C2_ROW_NUMBER 2 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3157 #define C3_STRING_1 3 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3158 #define C4_STRING_2 4 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3159 #define C5_STRING_3 5 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3160 #define C6_INT_1 6 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3161 #define C7_INT_2 7 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3162 #define C8_BIG_INT_1 8 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3163 #define C9_BIG_INT_2 9 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3164 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3165 #define QUERY_LOOKUP 1 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3166 #define QUERY_MAIN_DICOM_TAGS 2 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3167 #define QUERY_ATTACHMENTS 3 |
558 | 3168 #define QUERY_METADATA 4 |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3169 #define QUERY_LABELS 5 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3170 #define QUERY_PARENT_MAIN_DICOM_TAGS 10 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3171 #define QUERY_PARENT_IDENTIFIER 11 |
561 | 3172 #define QUERY_PARENT_METADATA 12 |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3173 #define QUERY_GRAND_PARENT_MAIN_DICOM_TAGS 15 |
561 | 3174 #define QUERY_GRAND_PARENT_METADATA 16 |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3175 #define QUERY_CHILDREN_IDENTIFIERS 20 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3176 #define QUERY_CHILDREN_MAIN_DICOM_TAGS 21 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3177 #define QUERY_CHILDREN_METADATA 22 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3178 #define QUERY_GRAND_CHILDREN_IDENTIFIERS 30 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3179 #define QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS 31 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3180 #define QUERY_GRAND_CHILDREN_METADATA 32 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3181 #define QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS 40 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3182 #define QUERY_ONE_INSTANCE_IDENTIFIER 50 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3183 #define QUERY_ONE_INSTANCE_METADATA 51 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3184 #define QUERY_ONE_INSTANCE_ATTACHMENTS 52 |
558 | 3185 |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3186 #define STRINGIFY(x) #x |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3187 #define TOSTRING(x) STRINGIFY(x) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3188 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3189 void IndexBackend::ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3190 DatabaseManager& manager, |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3191 const Orthanc::DatabasePluginMessages::Find_Request& request) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3192 { |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3193 // TODO-FIND move to child plugins ? |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3194 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3195 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3196 // If we want the Find to use a read-only transaction, we can not create temporary tables with |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3197 // the lookup results. So we must use a CTE (Common Table Expression). |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3198 // However, a CTE can only be used in a single query -> we must unionize all the following |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3199 // queries to retrieve values from various tables. |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3200 // However, to use UNION, all tables must have the same columns (numbers and types). That's |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3201 // why we have generic column names. |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3202 // So, at the end we'll have only one very big query ! |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3203 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3204 std::string sql; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3205 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3206 // extract the resource id of interest by executing the lookup in a CTE |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3207 LookupFormatter formatter(manager.GetDialect()); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3208 std::string lookupSql; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3209 ISqlLookupFormatter::Apply(lookupSql, formatter, request); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3210 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3211 // base query, retrieve the ordered internalId and publicId of the selected resources |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3212 sql = "WITH Lookup AS (" + lookupSql + ") " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3213 "SELECT " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3214 " " TOSTRING(QUERY_LOOKUP) " AS c0_queryId, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3215 " Lookup.internalId AS c1_internalId, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3216 " Lookup.rowNumber AS c2_rowNumber, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3217 " Lookup.publicId AS c3_string1, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3218 " NULL::TEXT AS c4_string2, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3219 " NULL::TEXT AS c5_string3, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3220 " NULL::INT AS c6_int1, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3221 " NULL::INT AS c7_int2, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3222 " NULL::BIGINT AS c8_big_int1, " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3223 " NULL::BIGINT AS c9_big_int2 " |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3224 " FROM Lookup "; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3225 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3226 // need MainDicomTags from resource ? |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3227 if (request.retrieve_main_dicom_tags()) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3228 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3229 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3230 " " TOSTRING(QUERY_MAIN_DICOM_TAGS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3231 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3232 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3233 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3234 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3235 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3236 " tagGroup AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3237 " tagElement AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3238 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3239 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3240 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3241 "INNER JOIN MainDicomTags ON MainDicomTags.id = Lookup.internalId "; |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3242 } |
558 | 3243 |
3244 // need resource metadata ? | |
3245 if (request.retrieve_metadata()) | |
3246 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3247 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3248 " " TOSTRING(QUERY_METADATA) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3249 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3250 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3251 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3252 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3253 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3254 " type AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3255 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3256 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3257 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3258 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3259 "INNER JOIN Metadata ON Metadata.id = Lookup.internalId "; |
558 | 3260 } |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3261 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3262 // need resource attachments ? |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3263 if (request.retrieve_attachments()) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3264 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3265 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3266 " " TOSTRING(QUERY_ATTACHMENTS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3267 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3268 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3269 " uuid AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3270 " uncompressedHash AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3271 " compressedHash AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3272 " fileType AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3273 " compressionType AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3274 " compressedSize AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3275 " uncompressedSize AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3276 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3277 "INNER JOIN AttachedFiles ON AttachedFiles.id = Lookup.internalId "; |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3278 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3279 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3280 // need resource labels ? |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3281 if (request.retrieve_labels()) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3282 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3283 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3284 " " TOSTRING(QUERY_LABELS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3285 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3286 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3287 " label AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3288 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3289 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3290 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3291 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3292 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3293 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3294 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3295 "INNER JOIN Labels ON Labels.id = Lookup.internalId "; |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3296 } |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3297 |
558 | 3298 // need MainDicomTags from parent ? |
3299 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT) | |
3300 { | |
3301 const Orthanc::DatabasePluginMessages::Find_Request_ParentSpecification* parentSpec = NULL; | |
3302 switch (request.level()) | |
3303 { | |
3304 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: | |
3305 parentSpec = &(request.parent_patient()); | |
3306 break; | |
3307 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: | |
3308 parentSpec = &(request.parent_study()); | |
3309 break; | |
3310 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE: | |
3311 parentSpec = &(request.parent_series()); | |
3312 break; | |
3313 | |
3314 default: | |
3315 break; | |
3316 } | |
3317 | |
3318 if (parentSpec->retrieve_main_dicom_tags()) | |
3319 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3320 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3321 " " TOSTRING(QUERY_PARENT_MAIN_DICOM_TAGS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3322 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3323 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3324 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3325 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3326 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3327 " tagGroup AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3328 " tagElement AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3329 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3330 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3331 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3332 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3333 "INNER JOIN MainDicomTags ON MainDicomTags.id = currentLevel.parentId "; |
558 | 3334 } |
3335 | |
561 | 3336 if (parentSpec->retrieve_metadata()) |
3337 { | |
3338 sql += "UNION SELECT " | |
3339 " " TOSTRING(QUERY_PARENT_METADATA) " AS c0_queryId, " | |
3340 " Lookup.internalId AS c1_internalId, " | |
3341 " NULL::BIGINT AS c2_rowNumber, " | |
3342 " value AS c3_string1, " | |
3343 " NULL::TEXT AS c4_string2, " | |
3344 " NULL::TEXT AS c5_string3, " | |
3345 " type AS c6_int1, " | |
3346 " NULL::INT AS c7_int2, " | |
3347 " NULL::BIGINT AS c8_big_int1, " | |
3348 " NULL::BIGINT AS c9_big_int2 " | |
3349 "FROM Lookup " | |
3350 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " | |
3351 "INNER JOIN Metadata ON Metadata.id = currentLevel.parentId "; | |
3352 } | |
3353 | |
558 | 3354 // need MainDicomTags from grandparent ? |
3355 if (request.level() > Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY) | |
3356 { | |
3357 const Orthanc::DatabasePluginMessages::Find_Request_ParentSpecification* grandparentSpec = NULL; | |
3358 switch (request.level()) | |
3359 { | |
3360 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: | |
3361 grandparentSpec = &(request.parent_patient()); | |
3362 break; | |
3363 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE: | |
3364 grandparentSpec = &(request.parent_study()); | |
3365 break; | |
3366 | |
3367 default: | |
3368 break; | |
3369 } | |
3370 | |
3371 if (grandparentSpec->retrieve_main_dicom_tags()) | |
3372 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3373 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3374 " " TOSTRING(QUERY_GRAND_PARENT_MAIN_DICOM_TAGS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3375 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3376 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3377 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3378 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3379 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3380 " tagGroup AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3381 " tagElement AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3382 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3383 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3384 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3385 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3386 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3387 "INNER JOIN MainDicomTags ON MainDicomTags.id = parentLevel.parentId "; |
558 | 3388 } |
561 | 3389 |
3390 if (grandparentSpec->retrieve_metadata()) | |
3391 { | |
3392 sql += "UNION SELECT " | |
3393 " " TOSTRING(QUERY_GRAND_PARENT_METADATA) " AS c0_queryId, " | |
3394 " Lookup.internalId AS c1_internalId, " | |
3395 " NULL::BIGINT AS c2_rowNumber, " | |
3396 " value AS c3_string1, " | |
3397 " NULL::TEXT AS c4_string2, " | |
3398 " NULL::TEXT AS c5_string3, " | |
3399 " type AS c6_int1, " | |
3400 " NULL::INT AS c7_int2, " | |
3401 " NULL::BIGINT AS c8_big_int1, " | |
3402 " NULL::BIGINT AS c9_big_int2 " | |
3403 "FROM Lookup " | |
3404 "INNER JOIN Resources currentLevel ON Lookup.internalId = currentLevel.internalId " | |
3405 "INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId " | |
562 | 3406 "INNER JOIN Metadata ON Metadata.id = parentLevel.parentId "; |
561 | 3407 } |
558 | 3408 } |
3409 } | |
3410 | |
3411 // need MainDicomTags from children ? | |
3412 if (request.level() <= Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES) | |
3413 { | |
3414 const Orthanc::DatabasePluginMessages::Find_Request_ChildrenSpecification* childrenSpec = NULL; | |
3415 switch (request.level()) | |
3416 { | |
3417 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT: | |
3418 childrenSpec = &(request.children_studies()); | |
3419 break; | |
3420 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: | |
3421 childrenSpec = &(request.children_series()); | |
3422 break; | |
3423 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: | |
3424 childrenSpec = &(request.children_instances()); | |
3425 break; | |
3426 | |
3427 default: | |
3428 break; | |
3429 } | |
3430 | |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3431 if (childrenSpec->retrieve_main_dicom_tags_size() > 0) |
558 | 3432 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3433 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3434 " " TOSTRING(QUERY_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3435 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3436 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3437 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3438 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3439 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3440 " tagGroup AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3441 " tagElement AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3442 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3443 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3444 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3445 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " |
560 | 3446 " INNER JOIN MainDicomTags ON MainDicomTags.id = childLevel.internalId AND (tagGroup, tagElement) IN (" + JoinRequestedTags(childrenSpec) + ")"; |
558 | 3447 } |
3448 | |
3449 // need children identifiers ? | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3450 if (childrenSpec->retrieve_identifiers()) |
558 | 3451 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3452 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3453 " " TOSTRING(QUERY_CHILDREN_IDENTIFIERS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3454 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3455 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3456 " childLevel.publicId AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3457 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3458 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3459 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3460 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3461 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3462 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3463 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3464 " INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId "; |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3465 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3466 |
560 | 3467 if (childrenSpec->retrieve_metadata_size() > 0) |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3468 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3469 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3470 " " TOSTRING(QUERY_CHILDREN_METADATA) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3471 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3472 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3473 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3474 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3475 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3476 " type AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3477 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3478 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3479 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3480 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3481 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " |
560 | 3482 " INNER JOIN Metadata ON Metadata.id = childLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(childrenSpec) + ") "; |
558 | 3483 } |
3484 | |
3485 if (request.level() <= Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY) | |
3486 { | |
3487 const Orthanc::DatabasePluginMessages::Find_Request_ChildrenSpecification* grandchildrenSpec = NULL; | |
3488 switch (request.level()) | |
3489 { | |
3490 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT: | |
3491 grandchildrenSpec = &(request.children_series()); | |
3492 break; | |
3493 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: | |
3494 grandchildrenSpec = &(request.children_instances()); | |
3495 break; | |
3496 | |
3497 default: | |
3498 break; | |
3499 } | |
3500 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3501 // need grand children identifiers ? |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3502 if (grandchildrenSpec->retrieve_identifiers()) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3503 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3504 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3505 " " TOSTRING(QUERY_GRAND_CHILDREN_IDENTIFIERS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3506 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3507 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3508 " grandChildLevel.publicId AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3509 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3510 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3511 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3512 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3513 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3514 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3515 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3516 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId " |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3517 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3518 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3519 |
560 | 3520 if (grandchildrenSpec->retrieve_main_dicom_tags_size() > 0) |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3521 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3522 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3523 " " TOSTRING(QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3524 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3525 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3526 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3527 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3528 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3529 " tagGroup AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3530 " tagElement AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3531 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3532 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3533 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3534 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3535 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId " |
560 | 3536 " INNER JOIN MainDicomTags ON MainDicomTags.id = grandChildLevel.internalId AND (tagGroup, tagElement) IN (" + JoinRequestedTags(grandchildrenSpec) + ")"; |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3537 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3538 |
560 | 3539 if (grandchildrenSpec->retrieve_metadata_size() > 0) |
558 | 3540 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3541 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3542 " " TOSTRING(QUERY_GRAND_CHILDREN_METADATA) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3543 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3544 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3545 " value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3546 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3547 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3548 " type AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3549 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3550 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3551 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3552 "FROM Lookup " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3553 " INNER JOIN Resources childLevel ON childLevel.parentId = Lookup.internalId " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3554 " INNER JOIN Resources grandChildLevel ON grandChildLevel.parentId = childLevel.internalId " |
560 | 3555 " INNER JOIN Metadata ON Metadata.id = grandChildLevel.internalId AND Metadata.type IN (" + JoinRequestedMetadata(grandchildrenSpec) + ") "; |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3556 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3557 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3558 if (request.level() == Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3559 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3560 const Orthanc::DatabasePluginMessages::Find_Request_ChildrenSpecification* grandgrandchildrenSpec = &(request.children_instances()); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3561 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3562 // need grand children identifiers ? |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3563 if (grandgrandchildrenSpec->retrieve_identifiers()) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3564 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3565 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3566 " " TOSTRING(QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3567 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3568 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3569 " grandGrandChildLevel.publicId AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3570 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3571 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3572 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3573 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3574 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3575 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3576 "FROM Lookup " |
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3577 "INNER JOIN Resources childLevel ON Lookup.internalId = childLevel.parentId " |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3578 "INNER JOIN Resources grandChildLevel ON childLevel.internalId = grandChildLevel.parentId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3579 "INNER JOIN Resources grandGrandChildLevel ON grandChildLevel.internalId = grandGrandChildLevel.parentId "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3580 } |
558 | 3581 } |
3582 } | |
3583 } | |
3584 | |
3585 // need parent identifier ? | |
3586 if (request.retrieve_parent_identifier()) | |
3587 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3588 sql += "UNION SELECT " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3589 " " TOSTRING(QUERY_PARENT_IDENTIFIER) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3590 " Lookup.internalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3591 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3592 " parentLevel.publicId AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3593 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3594 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3595 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3596 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3597 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3598 " NULL::BIGINT AS c9_big_int2 " |
563
cf6aea0bf438
fix retrieval of grandchildren info + cleanup
Alain Mazy <am@orthanc.team>
parents:
562
diff
changeset
|
3599 "FROM Lookup " |
564 | 3600 " INNER JOIN Resources currentLevel ON currentLevel.internalId = Lookup.internalId " |
3601 " INNER JOIN Resources parentLevel ON currentLevel.parentId = parentLevel.internalId "; | |
558 | 3602 } |
3603 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3604 // need one instance info ? |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3605 if (request.level() != Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_INSTANCE && |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3606 request.retrieve_one_instance_metadata_and_attachments()) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3607 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3608 // Here, we create a nested CTE 'OneInstance' with one instance ID to join with metadata and main |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3609 sql += "UNION" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3610 " (WITH OneInstance AS"; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3611 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3612 switch (request.level()) |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3613 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3614 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_SERIES: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3615 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3616 sql+= " (SELECT DISTINCT ON (Lookup.internalId) Lookup.internalId AS parentInternalId, childLevel.publicId AS instancePublicId, childLevel.internalId AS instanceInternalId" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3617 " FROM Resources AS childLevel " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3618 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId) "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3619 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3620 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_STUDY: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3621 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3622 sql+= " (SELECT DISTINCT ON (Lookup.internalId) Lookup.internalId AS parentInternalId, grandChildLevel.publicId AS instancePublicId, grandChildLevel.internalId AS instanceInternalId" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3623 " FROM Resources AS grandChildLevel " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3624 " INNER JOIN Resources childLevel ON grandChildLevel.parentId = childLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3625 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId) "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3626 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3627 case Orthanc::DatabasePluginMessages::ResourceType::RESOURCE_PATIENT: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3628 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3629 sql+= " (SELECT DISTINCT ON (Lookup.internalId) Lookup.internalId AS parentInternalId, grandGrandChildLevel.publicId AS instancePublicId, grandGrandChildLevel.internalId AS instanceInternalId" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3630 " FROM Resources AS grandGrandChildLevel " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3631 " INNER JOIN Resources grandChildLevel ON grandGrandChildLevel.parentId = grandChildLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3632 " INNER JOIN Resources childLevel ON grandChildLevel.parentId = childLevel.internalId " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3633 " INNER JOIN Lookup ON childLevel.parentId = Lookup.internalId) "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3634 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3635 default: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3636 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3637 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3638 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3639 sql += " SELECT" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3640 " " TOSTRING(QUERY_ONE_INSTANCE_IDENTIFIER) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3641 " parentInternalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3642 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3643 " instancePublicId AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3644 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3645 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3646 " NULL::INT AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3647 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3648 " instanceInternalId AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3649 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3650 " FROM OneInstance "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3651 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3652 sql += " UNION SELECT" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3653 " " TOSTRING(QUERY_ONE_INSTANCE_METADATA) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3654 " parentInternalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3655 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3656 " Metadata.value AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3657 " NULL::TEXT AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3658 " NULL::TEXT AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3659 " Metadata.type AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3660 " NULL::INT AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3661 " NULL::BIGINT AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3662 " NULL::BIGINT AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3663 " FROM Metadata " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3664 " INNER JOIN OneInstance ON Metadata.id = OneInstance.instanceInternalId"; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3665 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3666 sql += " UNION SELECT" |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3667 " " TOSTRING(QUERY_ONE_INSTANCE_ATTACHMENTS) " AS c0_queryId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3668 " parentInternalId AS c1_internalId, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3669 " NULL::BIGINT AS c2_rowNumber, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3670 " uuid AS c3_string1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3671 " uncompressedHash AS c4_string2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3672 " compressedHash AS c5_string3, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3673 " fileType AS c6_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3674 " compressionType AS c7_int2, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3675 " compressedSize AS c8_big_int1, " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3676 " uncompressedSize AS c9_big_int2 " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3677 " FROM AttachedFiles " |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3678 " INNER JOIN OneInstance ON AttachedFiles.id = OneInstance.instanceInternalId"; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3679 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3680 sql += " ) "; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3681 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3682 } |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3683 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3684 sql += " ORDER BY c0_queryId, c2_rowNumber"; // this is really important to make sure that the Lookup query is the first one to provide results since we use it to create the responses element ! |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3685 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3686 DatabaseManager::StandaloneStatement statement(manager, sql); // TODO-FIND: cache dynamic statement ? Probably worth it since it can be very complex queries ! |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3687 formatter.PrepareStatement(statement); |
558 | 3688 statement.Execute(formatter.GetDictionary()); |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3689 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3690 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3691 std::map<int64_t, Orthanc::DatabasePluginMessages::Find_Response*> responses; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3692 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3693 while (!statement.IsDone()) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3694 { |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3695 int32_t queryId = statement.ReadInteger32(C0_QUERY_ID); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3696 int64_t internalId = statement.ReadInteger64(C1_INTERNAL_ID); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3697 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3698 assert(queryId == QUERY_LOOKUP || responses.find(internalId) != responses.end()); // the QUERY_LOOKUP must be read first and must create the response before any other query tries to populate the fields |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3699 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3700 switch (queryId) |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3701 { |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3702 case QUERY_LOOKUP: |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3703 responses[internalId] = response.add_find(); |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3704 responses[internalId]->set_public_id(statement.ReadString(C3_STRING_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3705 responses[internalId]->set_internal_id(internalId); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3706 break; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3707 |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3708 case QUERY_LABELS: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3709 responses[internalId]->add_labels(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3710 break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3711 |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3712 case QUERY_MAIN_DICOM_TAGS: |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3713 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3714 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], request.level()); |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3715 Orthanc::DatabasePluginMessages::Find_Response_Tag* tag = content->add_main_dicom_tags(); |
558 | 3716 |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3717 tag->set_value(statement.ReadString(C3_STRING_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3718 tag->set_group(statement.ReadInteger32(C6_INT_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3719 tag->set_element(statement.ReadInteger32(C7_INT_2)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3720 }; break; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3721 |
558 | 3722 case QUERY_PARENT_MAIN_DICOM_TAGS: |
3723 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3724 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3725 Orthanc::DatabasePluginMessages::Find_Response_Tag* tag = content->add_main_dicom_tags(); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3726 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3727 tag->set_value(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3728 tag->set_group(statement.ReadInteger32(C6_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3729 tag->set_element(statement.ReadInteger32(C7_INT_2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3730 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3731 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3732 case QUERY_GRAND_PARENT_MAIN_DICOM_TAGS: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3733 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3734 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 2)); |
558 | 3735 Orthanc::DatabasePluginMessages::Find_Response_Tag* tag = content->add_main_dicom_tags(); |
3736 | |
3737 tag->set_value(statement.ReadString(C3_STRING_1)); | |
3738 tag->set_group(statement.ReadInteger32(C6_INT_1)); | |
3739 tag->set_element(statement.ReadInteger32(C7_INT_2)); | |
3740 }; break; | |
3741 | |
3742 case QUERY_CHILDREN_IDENTIFIERS: | |
3743 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3744 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 1)); |
558 | 3745 content->add_identifiers(statement.ReadString(C3_STRING_1)); |
3746 }; break; | |
3747 | |
3748 case QUERY_CHILDREN_MAIN_DICOM_TAGS: | |
3749 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3750 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 1)); |
558 | 3751 Orthanc::DatabasePluginMessages::Find_Response_MultipleTags* tag = content->add_main_dicom_tags(); |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3752 tag->add_values(statement.ReadString(C3_STRING_1)); // TODO: handle sequences ?? |
558 | 3753 tag->set_group(statement.ReadInteger32(C6_INT_1)); |
3754 tag->set_element(statement.ReadInteger32(C7_INT_2)); | |
3755 }; break; | |
3756 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3757 case QUERY_CHILDREN_METADATA: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3758 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3759 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3760 Orthanc::DatabasePluginMessages::Find_Response_MultipleMetadata* metadata = content->add_metadata(); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3761 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3762 metadata->add_values(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3763 metadata->set_key(statement.ReadInteger32(C6_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3764 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3765 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3766 case QUERY_GRAND_CHILDREN_IDENTIFIERS: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3767 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3768 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3769 content->add_identifiers(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3770 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3771 |
558 | 3772 case QUERY_GRAND_CHILDREN_MAIN_DICOM_TAGS: |
3773 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3774 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 2)); |
558 | 3775 Orthanc::DatabasePluginMessages::Find_Response_MultipleTags* tag = content->add_main_dicom_tags(); |
3776 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3777 tag->add_values(statement.ReadString(C3_STRING_1)); // TODO: handle sequences ?? |
558 | 3778 tag->set_group(statement.ReadInteger32(C6_INT_1)); |
3779 tag->set_element(statement.ReadInteger32(C7_INT_2)); | |
3780 }; break; | |
3781 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3782 case QUERY_GRAND_CHILDREN_METADATA: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3783 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3784 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3785 Orthanc::DatabasePluginMessages::Find_Response_MultipleMetadata* metadata = content->add_metadata(); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3786 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3787 metadata->add_values(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3788 metadata->set_key(statement.ReadInteger32(C6_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3789 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3790 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3791 case QUERY_GRAND_GRAND_CHILDREN_IDENTIFIERS: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3792 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3793 Orthanc::DatabasePluginMessages::Find_Response_ChildrenContent* content = GetChildrenContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() + 3)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3794 content->add_identifiers(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3795 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3796 |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3797 case QUERY_ATTACHMENTS: |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3798 { |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3799 Orthanc::DatabasePluginMessages::FileInfo* attachment = responses[internalId]->add_attachments(); |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3800 |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3801 attachment->set_uuid(statement.ReadString(C3_STRING_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3802 attachment->set_uncompressed_hash(statement.ReadString(C4_STRING_2)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3803 attachment->set_compressed_hash(statement.ReadString(C5_STRING_3)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3804 attachment->set_content_type(statement.ReadInteger32(C6_INT_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3805 attachment->set_compression_type(statement.ReadInteger32(C7_INT_2)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3806 attachment->set_compressed_size(statement.ReadInteger64(C8_BIG_INT_1)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3807 attachment->set_uncompressed_size(statement.ReadInteger64(C9_BIG_INT_2)); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3808 }; break; |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3809 |
558 | 3810 case QUERY_METADATA: |
3811 { | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3812 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], request.level()); |
558 | 3813 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = content->add_metadata(); |
3814 | |
3815 metadata->set_value(statement.ReadString(C3_STRING_1)); | |
3816 metadata->set_key(statement.ReadInteger32(C6_INT_1)); | |
3817 }; break; | |
3818 | |
561 | 3819 case QUERY_PARENT_METADATA: |
3820 { | |
3821 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 1)); | |
3822 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = content->add_metadata(); | |
3823 | |
3824 metadata->set_value(statement.ReadString(C3_STRING_1)); | |
3825 metadata->set_key(statement.ReadInteger32(C6_INT_1)); | |
3826 }; break; | |
3827 | |
3828 case QUERY_GRAND_PARENT_METADATA: | |
3829 { | |
3830 Orthanc::DatabasePluginMessages::Find_Response_ResourceContent* content = GetResourceContent(responses[internalId], static_cast<Orthanc::DatabasePluginMessages::ResourceType>(request.level() - 2)); | |
3831 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = content->add_metadata(); | |
3832 | |
3833 metadata->set_value(statement.ReadString(C3_STRING_1)); | |
3834 metadata->set_key(statement.ReadInteger32(C6_INT_1)); | |
3835 }; break; | |
3836 | |
558 | 3837 case QUERY_PARENT_IDENTIFIER: |
3838 { | |
3839 responses[internalId]->set_parent_public_id(statement.ReadString(C3_STRING_1)); | |
3840 }; break; | |
3841 | |
559
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3842 case QUERY_ONE_INSTANCE_IDENTIFIER: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3843 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3844 responses[internalId]->set_one_instance_public_id(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3845 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3846 case QUERY_ONE_INSTANCE_METADATA: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3847 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3848 Orthanc::DatabasePluginMessages::Find_Response_Metadata* metadata = responses[internalId]->add_one_instance_metadata(); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3849 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3850 metadata->set_value(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3851 metadata->set_key(statement.ReadInteger32(C6_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3852 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3853 case QUERY_ONE_INSTANCE_ATTACHMENTS: |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3854 { |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3855 Orthanc::DatabasePluginMessages::FileInfo* attachment = responses[internalId]->add_one_instance_attachments(); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3856 |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3857 attachment->set_uuid(statement.ReadString(C3_STRING_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3858 attachment->set_uncompressed_hash(statement.ReadString(C4_STRING_2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3859 attachment->set_compressed_hash(statement.ReadString(C5_STRING_3)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3860 attachment->set_content_type(statement.ReadInteger32(C6_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3861 attachment->set_compression_type(statement.ReadInteger32(C7_INT_2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3862 attachment->set_compressed_size(statement.ReadInteger64(C8_BIG_INT_1)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3863 attachment->set_uncompressed_size(statement.ReadInteger64(C9_BIG_INT_2)); |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3864 }; break; |
e18ec71019fa
Find in PG continued: all basic integration tests ok
Alain Mazy <am@orthanc.team>
parents:
558
diff
changeset
|
3865 |
557
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3866 default: |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3867 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3868 } |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3869 statement.Next(); |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3870 } |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3871 } |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3872 #endif |
d8ee2f676a3c
wip: started implementing Find in PostgreSQL
Alain Mazy <am@orthanc.team>
parents:
555
diff
changeset
|
3873 |
0 | 3874 } |