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