Mercurial > hg > orthanc-databases
comparison Framework/Plugins/IndexBackend.h @ 569:f18e46d7dbf8 attach-custom-data
merged find-refactoring -> attach-custom-data
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Tue, 24 Sep 2024 15:04:21 +0200 |
parents | cd9521e04249 77c8544bbd7d |
children |
comparison
equal
deleted
inserted
replaced
368:82f73188b58d | 569:f18e46d7dbf8 |
---|---|
1 /** | 1 /** |
2 * Orthanc - A Lightweight, RESTful DICOM Store | 2 * Orthanc - A Lightweight, RESTful DICOM Store |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
4 * Department, University Hospital of Liege, Belgium | 4 * Department, University Hospital of Liege, Belgium |
5 * Copyright (C) 2017-2021 Osimis S.A., Belgium | 5 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
6 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium | |
7 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium | |
6 * | 8 * |
7 * This program is free software: you can redistribute it and/or | 9 * This program is free software: you can redistribute it and/or |
8 * modify it under the terms of the GNU Affero General Public License | 10 * modify it under the terms of the GNU Affero General Public License |
9 * as published by the Free Software Foundation, either version 3 of | 11 * as published by the Free Software Foundation, either version 3 of |
10 * the License, or (at your option) any later version. | 12 * the License, or (at your option) any later version. |
43 | 45 |
44 boost::shared_mutex outputFactoryMutex_; | 46 boost::shared_mutex outputFactoryMutex_; |
45 std::unique_ptr<IDatabaseBackendOutput::IFactory> outputFactory_; | 47 std::unique_ptr<IDatabaseBackendOutput::IFactory> outputFactory_; |
46 | 48 |
47 protected: | 49 protected: |
48 void ClearDeletedFiles(DatabaseManager& manager); | 50 virtual void ClearDeletedFiles(DatabaseManager& manager); |
49 | 51 |
50 void ClearDeletedResources(DatabaseManager& manager); | 52 virtual void ClearDeletedResources(DatabaseManager& manager); |
53 | |
54 virtual void ClearRemainingAncestor(DatabaseManager& manager); | |
51 | 55 |
52 void SignalDeletedFiles(IDatabaseBackendOutput& output, | 56 void SignalDeletedFiles(IDatabaseBackendOutput& output, |
53 DatabaseManager& manager); | 57 DatabaseManager& manager); |
54 | 58 |
55 void SignalDeletedResources(IDatabaseBackendOutput& output, | 59 void SignalDeletedResources(IDatabaseBackendOutput& output, |
59 void ReadChangesInternal(IDatabaseBackendOutput& output, | 63 void ReadChangesInternal(IDatabaseBackendOutput& output, |
60 bool& done, | 64 bool& done, |
61 DatabaseManager& manager, | 65 DatabaseManager& manager, |
62 DatabaseManager::CachedStatement& statement, | 66 DatabaseManager::CachedStatement& statement, |
63 const Dictionary& args, | 67 const Dictionary& args, |
64 uint32_t maxResults); | 68 uint32_t limit, |
69 bool returnFirstResults); | |
65 | 70 |
66 void ReadExportedResourcesInternal(IDatabaseBackendOutput& output, | 71 void ReadExportedResourcesInternal(IDatabaseBackendOutput& output, |
67 bool& done, | 72 bool& done, |
68 DatabaseManager::CachedStatement& statement, | 73 DatabaseManager::CachedStatement& statement, |
69 const Dictionary& args, | 74 const Dictionary& args, |
70 uint32_t maxResults); | 75 uint32_t limit); |
71 | 76 |
72 public: | 77 public: |
73 explicit IndexBackend(OrthancPluginContext* context); | 78 explicit IndexBackend(OrthancPluginContext* context); |
74 | 79 |
75 virtual OrthancPluginContext* GetContext() ORTHANC_OVERRIDE | 80 virtual OrthancPluginContext* GetContext() ORTHANC_OVERRIDE |
125 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE; | 130 OrthancPluginResourceType resourceType) ORTHANC_OVERRIDE; |
126 | 131 |
127 virtual void GetAllPublicIds(std::list<std::string>& target, | 132 virtual void GetAllPublicIds(std::list<std::string>& target, |
128 DatabaseManager& manager, | 133 DatabaseManager& manager, |
129 OrthancPluginResourceType resourceType, | 134 OrthancPluginResourceType resourceType, |
130 uint64_t since, | 135 int64_t since, |
131 uint64_t limit) ORTHANC_OVERRIDE; | 136 uint32_t limit) ORTHANC_OVERRIDE; |
132 | 137 |
133 virtual void GetChanges(IDatabaseBackendOutput& output, | 138 virtual void GetChanges(IDatabaseBackendOutput& output, |
134 bool& done /*out*/, | 139 bool& done /*out*/, |
135 DatabaseManager& manager, | 140 DatabaseManager& manager, |
136 int64_t since, | 141 int64_t since, |
137 uint32_t maxResults) ORTHANC_OVERRIDE; | 142 uint32_t limit) ORTHANC_OVERRIDE; |
138 | 143 |
144 virtual void GetChangesExtended(IDatabaseBackendOutput& output, | |
145 bool& done /*out*/, | |
146 DatabaseManager& manager, | |
147 int64_t since, | |
148 int64_t to, | |
149 const std::set<uint32_t>& changeTypes, | |
150 uint32_t limit) ORTHANC_OVERRIDE; | |
151 | |
139 virtual void GetChildrenInternalId(std::list<int64_t>& target /*out*/, | 152 virtual void GetChildrenInternalId(std::list<int64_t>& target /*out*/, |
140 DatabaseManager& manager, | 153 DatabaseManager& manager, |
141 int64_t id) ORTHANC_OVERRIDE; | 154 int64_t id) ORTHANC_OVERRIDE; |
142 | 155 |
143 virtual void GetChildrenPublicId(std::list<std::string>& target /*out*/, | 156 virtual void GetChildrenPublicId(std::list<std::string>& target /*out*/, |
146 | 159 |
147 virtual void GetExportedResources(IDatabaseBackendOutput& output, | 160 virtual void GetExportedResources(IDatabaseBackendOutput& output, |
148 bool& done /*out*/, | 161 bool& done /*out*/, |
149 DatabaseManager& manager, | 162 DatabaseManager& manager, |
150 int64_t since, | 163 int64_t since, |
151 uint32_t maxResults) ORTHANC_OVERRIDE; | 164 uint32_t limit) ORTHANC_OVERRIDE; |
152 | 165 |
153 virtual void GetLastChange(IDatabaseBackendOutput& output, | 166 virtual void GetLastChange(IDatabaseBackendOutput& output, |
154 DatabaseManager& manager) ORTHANC_OVERRIDE; | 167 DatabaseManager& manager) ORTHANC_OVERRIDE; |
155 | 168 |
156 virtual void GetLastExportedResource(IDatabaseBackendOutput& output, | 169 virtual void GetLastExportedResource(IDatabaseBackendOutput& output, |
192 int64_t resourceId, | 205 int64_t resourceId, |
193 OrthancPluginResourceType resourceType, | 206 OrthancPluginResourceType resourceType, |
194 const char* date) ORTHANC_OVERRIDE; | 207 const char* date) ORTHANC_OVERRIDE; |
195 | 208 |
196 virtual void LogExportedResource(DatabaseManager& manager, | 209 virtual void LogExportedResource(DatabaseManager& manager, |
197 const OrthancPluginExportedResource& resource) ORTHANC_OVERRIDE; | 210 OrthancPluginResourceType resourceType, |
211 const char* publicId, | |
212 const char* modality, | |
213 const char* date, | |
214 const char* patientId, | |
215 const char* studyInstanceUid, | |
216 const char* seriesInstanceUid, | |
217 const char* sopInstanceUid) ORTHANC_OVERRIDE; | |
198 | 218 |
199 virtual bool LookupAttachment(IDatabaseBackendOutput& output, | 219 virtual bool LookupAttachment(IDatabaseBackendOutput& output, |
200 int64_t& revision /*out*/, | 220 int64_t& revision /*out*/, |
201 DatabaseManager& manager, | 221 DatabaseManager& manager, |
202 int64_t id, | 222 int64_t id, |
299 | 319 |
300 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 | 320 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
301 // New primitive since Orthanc 1.5.2 | 321 // New primitive since Orthanc 1.5.2 |
302 virtual void LookupResources(IDatabaseBackendOutput& output, | 322 virtual void LookupResources(IDatabaseBackendOutput& output, |
303 DatabaseManager& manager, | 323 DatabaseManager& manager, |
304 const std::vector<Orthanc::DatabaseConstraint>& lookup, | 324 const DatabaseConstraints& lookup, |
305 OrthancPluginResourceType queryLevel, | 325 OrthancPluginResourceType queryLevel, |
326 const std::set<std::string>& labels, | |
327 LabelsConstraint labelsConstraint, | |
306 uint32_t limit, | 328 uint32_t limit, |
307 bool requestSomeInstance) ORTHANC_OVERRIDE; | 329 bool requestSomeInstance) ORTHANC_OVERRIDE; |
308 #endif | 330 #endif |
309 | 331 |
310 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 | 332 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1 |
326 int32_t metadata) ORTHANC_OVERRIDE; | 348 int32_t metadata) ORTHANC_OVERRIDE; |
327 | 349 |
328 virtual void TagMostRecentPatient(DatabaseManager& manager, | 350 virtual void TagMostRecentPatient(DatabaseManager& manager, |
329 int64_t patient) ORTHANC_OVERRIDE; | 351 int64_t patient) ORTHANC_OVERRIDE; |
330 | 352 |
331 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 | |
332 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) | |
333 // New primitive since Orthanc 1.5.4 | 353 // New primitive since Orthanc 1.5.4 |
334 virtual bool LookupResourceAndParent(int64_t& id, | 354 virtual bool LookupResourceAndParent(int64_t& id, |
335 OrthancPluginResourceType& type, | 355 OrthancPluginResourceType& type, |
336 std::string& parentPublicId, | 356 std::string& parentPublicId, |
337 DatabaseManager& manager, | 357 DatabaseManager& manager, |
338 const char* publicId) ORTHANC_OVERRIDE; | 358 const char* publicId) ORTHANC_OVERRIDE; |
339 # endif | 359 |
340 #endif | |
341 | |
342 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in 1.3.1 | |
343 # if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 5, 4) | |
344 // New primitive since Orthanc 1.5.4 | 360 // New primitive since Orthanc 1.5.4 |
345 virtual void GetAllMetadata(std::map<int32_t, std::string>& result, | 361 virtual void GetAllMetadata(std::map<int32_t, std::string>& result, |
346 DatabaseManager& manager, | 362 DatabaseManager& manager, |
347 int64_t id) ORTHANC_OVERRIDE; | 363 int64_t id) ORTHANC_OVERRIDE; |
348 # endif | |
349 #endif | |
350 | 364 |
351 virtual bool HasCreateInstance() const ORTHANC_OVERRIDE | 365 virtual bool HasCreateInstance() const ORTHANC_OVERRIDE |
352 { | 366 { |
353 // This extension is available in PostgreSQL and MySQL, but is | 367 // This extension is available in PostgreSQL and MySQL, but is |
354 // emulated by "CreateInstanceGeneric()" in SQLite | 368 // emulated by "CreateInstanceGeneric()" in SQLite |
386 void SetGlobalIntegerProperty(DatabaseManager& manager, | 400 void SetGlobalIntegerProperty(DatabaseManager& manager, |
387 const char* serverIdentifier, | 401 const char* serverIdentifier, |
388 int32_t property, | 402 int32_t property, |
389 int value); | 403 int value); |
390 | 404 |
405 virtual void AddLabel(DatabaseManager& manager, | |
406 int64_t resource, | |
407 const std::string& label) ORTHANC_OVERRIDE; | |
408 | |
409 virtual void RemoveLabel(DatabaseManager& manager, | |
410 int64_t resource, | |
411 const std::string& label) ORTHANC_OVERRIDE; | |
412 | |
413 virtual void ListLabels(std::list<std::string>& target, | |
414 DatabaseManager& manager, | |
415 int64_t resource) ORTHANC_OVERRIDE; | |
416 | |
417 virtual void ListAllLabels(std::list<std::string>& target, | |
418 DatabaseManager& manager) ORTHANC_OVERRIDE; | |
419 | |
420 virtual bool HasAtomicIncrementGlobalProperty() ORTHANC_OVERRIDE; | |
421 | |
422 virtual int64_t IncrementGlobalProperty(DatabaseManager& manager, | |
423 const char* serverIdentifier, | |
424 int32_t property, | |
425 int64_t increment) ORTHANC_OVERRIDE; | |
426 | |
427 virtual bool HasUpdateAndGetStatistics() ORTHANC_OVERRIDE; | |
428 | |
429 virtual void UpdateAndGetStatistics(DatabaseManager& manager, | |
430 int64_t& patientsCount, | |
431 int64_t& studiesCount, | |
432 int64_t& seriesCount, | |
433 int64_t& instancesCount, | |
434 int64_t& compressedSize, | |
435 int64_t& uncompressedSize) ORTHANC_OVERRIDE; | |
436 | |
437 virtual bool HasMeasureLatency() ORTHANC_OVERRIDE; | |
438 | |
439 virtual uint64_t MeasureLatency(DatabaseManager& manager) ORTHANC_OVERRIDE; | |
440 | |
441 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) | |
442 // New primitive since Orthanc 1.12.5 | |
443 virtual bool HasExtendedChanges() const ORTHANC_OVERRIDE | |
444 { | |
445 return true; | |
446 } | |
447 #endif | |
448 | |
449 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) | |
450 virtual bool HasFindSupport() const ORTHANC_OVERRIDE; | |
451 #endif | |
452 | |
453 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 12, 5) | |
454 virtual void ExecuteFind(Orthanc::DatabasePluginMessages::TransactionResponse& response, | |
455 DatabaseManager& manager, | |
456 const Orthanc::DatabasePluginMessages::Find_Request& request) ORTHANC_OVERRIDE; | |
457 #endif | |
458 | |
459 | |
391 /** | 460 /** |
392 * "maxDatabaseRetries" is to handle | 461 * "maxDatabaseRetries" is to handle |
393 * "OrthancPluginErrorCode_DatabaseCannotSerialize" if there is a | 462 * "OrthancPluginErrorCode_DatabaseCannotSerialize" if there is a |
394 * collision multiple writers. "countConnections" and | 463 * collision multiple writers. "countConnections" and |
395 * "maxDatabaseRetries" are only used if Orthanc >= 1.9.2. | 464 * "maxDatabaseRetries" are only used if Orthanc >= 1.9.2. |
398 size_t countConnections, | 467 size_t countConnections, |
399 unsigned int maxDatabaseRetries); | 468 unsigned int maxDatabaseRetries); |
400 | 469 |
401 static void Finalize(); | 470 static void Finalize(); |
402 | 471 |
403 static DatabaseManager* CreateSingleDatabaseManager(IDatabaseBackend& backend); | 472 static DatabaseManager* CreateSingleDatabaseManager(IDatabaseBackend& backend, |
473 bool hasIdentifierTags, | |
474 const std::list<IdentifierTag>& identifierTags); | |
404 }; | 475 }; |
405 } | 476 } |