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 }