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