Orthanc Plugin SDK  1.12.7
Documentation of the plugin interface of Orthanc
OrthancCDatabasePlugin.h
1 
29 #pragma once
30 
31 #include "OrthancCPlugin.h"
32 
33 
36 #ifdef __cplusplus
37 extern "C"
38 {
39 #endif
40 
41 
46  typedef struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext;
47 
48 
54  typedef struct _OrthancPluginDatabaseTransaction_t OrthancPluginDatabaseTransaction;
55 
56 
57 /*<! @cond Doxygen_Suppress */
58  typedef enum
59  {
60  _OrthancPluginDatabaseAnswerType_None = 0,
61 
62  /* Events */
63  _OrthancPluginDatabaseAnswerType_DeletedAttachment = 1,
64  _OrthancPluginDatabaseAnswerType_DeletedResource = 2,
65  _OrthancPluginDatabaseAnswerType_RemainingAncestor = 3,
66 
67  /* Return value */
68  _OrthancPluginDatabaseAnswerType_Attachment = 10,
69  _OrthancPluginDatabaseAnswerType_Change = 11,
70  _OrthancPluginDatabaseAnswerType_DicomTag = 12,
71  _OrthancPluginDatabaseAnswerType_ExportedResource = 13,
72  _OrthancPluginDatabaseAnswerType_Int32 = 14,
73  _OrthancPluginDatabaseAnswerType_Int64 = 15,
74  _OrthancPluginDatabaseAnswerType_Resource = 16,
75  _OrthancPluginDatabaseAnswerType_String = 17,
76  _OrthancPluginDatabaseAnswerType_MatchingResource = 18, /* New in Orthanc 1.5.2 */
77  _OrthancPluginDatabaseAnswerType_Metadata = 19, /* New in Orthanc 1.5.4 */
78 
79  _OrthancPluginDatabaseAnswerType_INTERNAL = 0x7fffffff
80  } _OrthancPluginDatabaseAnswerType;
81 
82 
83  typedef struct
84  {
85  const char* uuid;
86  int32_t contentType;
87  uint64_t uncompressedSize;
88  const char* uncompressedHash;
89  int32_t compressionType;
90  uint64_t compressedSize;
91  const char* compressedHash;
92  } OrthancPluginAttachment;
93 
94  typedef struct
95  {
96  uint16_t group;
97  uint16_t element;
98  const char* value;
99  } OrthancPluginDicomTag;
100 
101  typedef struct
102  {
103  int64_t seq;
104  int32_t changeType;
105  OrthancPluginResourceType resourceType;
106  const char* publicId;
107  const char* date;
108  } OrthancPluginChange;
109 
110  typedef struct
111  {
112  int64_t seq;
113  OrthancPluginResourceType resourceType;
114  const char* publicId;
115  const char* modality;
116  const char* date;
117  const char* patientId;
118  const char* studyInstanceUid;
119  const char* seriesInstanceUid;
120  const char* sopInstanceUid;
121  } OrthancPluginExportedResource;
122 
123  typedef struct /* New in Orthanc 1.5.2 */
124  {
126  uint16_t tagGroup;
127  uint16_t tagElement;
128  uint8_t isIdentifierTag;
129  uint8_t isCaseSensitive;
130  uint8_t isMandatory;
132  uint32_t valuesCount;
133  const char* const* values;
134  } OrthancPluginDatabaseConstraint;
135 
136  typedef struct /* New in Orthanc 1.5.2 */
137  {
138  const char* resourceId;
139  const char* someInstanceId; /* Can be NULL if not requested */
140  } OrthancPluginMatchingResource;
141 
142  typedef struct /* New in Orthanc 1.5.2 */
143  {
144  /* Mandatory field */
145  uint8_t isNewInstance;
146  int64_t instanceId;
147 
148  /* The following fields must only be set if "isNewInstance" is "true" */
149  uint8_t isNewPatient;
150  uint8_t isNewStudy;
151  uint8_t isNewSeries;
152  int64_t patientId;
153  int64_t studyId;
154  int64_t seriesId;
155  } OrthancPluginCreateInstanceResult;
156 
157  typedef struct /* New in Orthanc 1.5.2 */
158  {
159  int64_t resource;
160  uint16_t group;
161  uint16_t element;
162  const char* value;
163  } OrthancPluginResourcesContentTags;
164 
165  typedef struct /* New in Orthanc 1.5.2 */
166  {
167  int64_t resource;
168  int32_t metadata;
169  const char* value;
170  } OrthancPluginResourcesContentMetadata;
171 
172 
173  typedef struct
174  {
176  _OrthancPluginDatabaseAnswerType type;
177  int32_t valueInt32;
178  uint32_t valueUint32;
179  int64_t valueInt64;
180  const char *valueString;
181  const void *valueGeneric;
182  } _OrthancPluginDatabaseAnswer;
183 
184  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerString(
185  OrthancPluginContext* context,
187  const char* value)
188  {
189  _OrthancPluginDatabaseAnswer params;
190  memset(&params, 0, sizeof(params));
191  params.database = database;
192  params.type = _OrthancPluginDatabaseAnswerType_String;
193  params.valueString = value;
194  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
195  }
196 
197  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChange(
198  OrthancPluginContext* context,
200  const OrthancPluginChange* change)
201  {
202  _OrthancPluginDatabaseAnswer params;
203  memset(&params, 0, sizeof(params));
204 
205  params.database = database;
206  params.type = _OrthancPluginDatabaseAnswerType_Change;
207  params.valueUint32 = 0;
208  params.valueGeneric = change;
209 
210  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
211  }
212 
213  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChangesDone(
214  OrthancPluginContext* context,
216  {
217  _OrthancPluginDatabaseAnswer params;
218  memset(&params, 0, sizeof(params));
219 
220  params.database = database;
221  params.type = _OrthancPluginDatabaseAnswerType_Change;
222  params.valueUint32 = 1;
223  params.valueGeneric = NULL;
224 
225  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
226  }
227 
228  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt32(
229  OrthancPluginContext* context,
231  int32_t value)
232  {
233  _OrthancPluginDatabaseAnswer params;
234  memset(&params, 0, sizeof(params));
235  params.database = database;
236  params.type = _OrthancPluginDatabaseAnswerType_Int32;
237  params.valueInt32 = value;
238  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
239  }
240 
241  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt64(
242  OrthancPluginContext* context,
244  int64_t value)
245  {
246  _OrthancPluginDatabaseAnswer params;
247  memset(&params, 0, sizeof(params));
248  params.database = database;
249  params.type = _OrthancPluginDatabaseAnswerType_Int64;
250  params.valueInt64 = value;
251  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
252  }
253 
254  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResource(
255  OrthancPluginContext* context,
257  const OrthancPluginExportedResource* exported)
258  {
259  _OrthancPluginDatabaseAnswer params;
260  memset(&params, 0, sizeof(params));
261 
262  params.database = database;
263  params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
264  params.valueUint32 = 0;
265  params.valueGeneric = exported;
266  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
267  }
268 
269  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResourcesDone(
270  OrthancPluginContext* context,
272  {
273  _OrthancPluginDatabaseAnswer params;
274  memset(&params, 0, sizeof(params));
275 
276  params.database = database;
277  params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
278  params.valueUint32 = 1;
279  params.valueGeneric = NULL;
280  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
281  }
282 
283  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerDicomTag(
284  OrthancPluginContext* context,
286  const OrthancPluginDicomTag* tag)
287  {
288  _OrthancPluginDatabaseAnswer params;
289  memset(&params, 0, sizeof(params));
290  params.database = database;
291  params.type = _OrthancPluginDatabaseAnswerType_DicomTag;
292  params.valueGeneric = tag;
293  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
294  }
295 
296  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerAttachment(
297  OrthancPluginContext* context,
299  const OrthancPluginAttachment* attachment)
300  {
301  _OrthancPluginDatabaseAnswer params;
302  memset(&params, 0, sizeof(params));
303  params.database = database;
304  params.type = _OrthancPluginDatabaseAnswerType_Attachment;
305  params.valueGeneric = attachment;
306  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
307  }
308 
309  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerResource(
310  OrthancPluginContext* context,
312  int64_t id,
313  OrthancPluginResourceType resourceType)
314  {
315  _OrthancPluginDatabaseAnswer params;
316  memset(&params, 0, sizeof(params));
317  params.database = database;
318  params.type = _OrthancPluginDatabaseAnswerType_Resource;
319  params.valueInt64 = id;
320  params.valueInt32 = (int32_t) resourceType;
321  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
322  }
323 
324  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerMatchingResource(
325  OrthancPluginContext* context,
327  const OrthancPluginMatchingResource* match)
328  {
329  _OrthancPluginDatabaseAnswer params;
330  memset(&params, 0, sizeof(params));
331  params.database = database;
332  params.type = _OrthancPluginDatabaseAnswerType_MatchingResource;
333  params.valueGeneric = match;
334  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
335  }
336 
337  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerMetadata(
338  OrthancPluginContext* context,
340  int64_t resourceId,
341  int32_t type,
342  const char* value)
343  {
344  OrthancPluginResourcesContentMetadata metadata;
345  _OrthancPluginDatabaseAnswer params;
346  metadata.resource = resourceId;
347  metadata.metadata = type;
348  metadata.value = value;
349  memset(&params, 0, sizeof(params));
350  params.database = database;
351  params.type = _OrthancPluginDatabaseAnswerType_Metadata;
352  params.valueGeneric = &metadata;
353  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
354  }
355 
356  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedAttachment(
357  OrthancPluginContext* context,
359  const OrthancPluginAttachment* attachment)
360  {
361  _OrthancPluginDatabaseAnswer params;
362  memset(&params, 0, sizeof(params));
363  params.database = database;
364  params.type = _OrthancPluginDatabaseAnswerType_DeletedAttachment;
365  params.valueGeneric = attachment;
366  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
367  }
368 
369  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedResource(
370  OrthancPluginContext* context,
372  const char* publicId,
373  OrthancPluginResourceType resourceType)
374  {
375  _OrthancPluginDatabaseAnswer params;
376  memset(&params, 0, sizeof(params));
377  params.database = database;
378  params.type = _OrthancPluginDatabaseAnswerType_DeletedResource;
379  params.valueString = publicId;
380  params.valueInt32 = (int32_t) resourceType;
381  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
382  }
383 
384  ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalRemainingAncestor(
385  OrthancPluginContext* context,
387  const char* ancestorId,
388  OrthancPluginResourceType ancestorType)
389  {
390  _OrthancPluginDatabaseAnswer params;
391  memset(&params, 0, sizeof(params));
392  params.database = database;
393  params.type = _OrthancPluginDatabaseAnswerType_RemainingAncestor;
394  params.valueString = ancestorId;
395  params.valueInt32 = (int32_t) ancestorType;
396  context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
397  }
398 
399 
400 
401 
402 
403  typedef struct
404  {
405  OrthancPluginErrorCode (*addAttachment) (
406  /* inputs */
407  void* payload,
408  int64_t id,
409  const OrthancPluginAttachment* attachment);
410 
411  OrthancPluginErrorCode (*attachChild) (
412  /* inputs */
413  void* payload,
414  int64_t parent,
415  int64_t child);
416 
417  OrthancPluginErrorCode (*clearChanges) (
418  /* inputs */
419  void* payload);
420 
421  OrthancPluginErrorCode (*clearExportedResources) (
422  /* inputs */
423  void* payload);
424 
425  OrthancPluginErrorCode (*createResource) (
426  /* outputs */
427  int64_t* id,
428  /* inputs */
429  void* payload,
430  const char* publicId,
431  OrthancPluginResourceType resourceType);
432 
433  OrthancPluginErrorCode (*deleteAttachment) (
434  /* inputs */
435  void* payload,
436  int64_t id,
437  int32_t contentType);
438 
439  OrthancPluginErrorCode (*deleteMetadata) (
440  /* inputs */
441  void* payload,
442  int64_t id,
443  int32_t metadataType);
444 
445  OrthancPluginErrorCode (*deleteResource) (
446  /* inputs */
447  void* payload,
448  int64_t id);
449 
450  /* Output: Use OrthancPluginDatabaseAnswerString() */
451  OrthancPluginErrorCode (*getAllPublicIds) (
452  /* outputs */
454  /* inputs */
455  void* payload,
456  OrthancPluginResourceType resourceType);
457 
458  /* Output: Use OrthancPluginDatabaseAnswerChange() and
459  * OrthancPluginDatabaseAnswerChangesDone() */
460  OrthancPluginErrorCode (*getChanges) (
461  /* outputs */
463  /* inputs */
464  void* payload,
465  int64_t since,
466  uint32_t maxResult);
467 
468  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
469  OrthancPluginErrorCode (*getChildrenInternalId) (
470  /* outputs */
472  /* inputs */
473  void* payload,
474  int64_t id);
475 
476  /* Output: Use OrthancPluginDatabaseAnswerString() */
477  OrthancPluginErrorCode (*getChildrenPublicId) (
478  /* outputs */
480  /* inputs */
481  void* payload,
482  int64_t id);
483 
484  /* Output: Use OrthancPluginDatabaseAnswerExportedResource() and
485  * OrthancPluginDatabaseAnswerExportedResourcesDone() */
486  OrthancPluginErrorCode (*getExportedResources) (
487  /* outputs */
489  /* inputs */
490  void* payload,
491  int64_t since,
492  uint32_t maxResult);
493 
494  /* Output: Use OrthancPluginDatabaseAnswerChange() */
495  OrthancPluginErrorCode (*getLastChange) (
496  /* outputs */
498  /* inputs */
499  void* payload);
500 
501  /* Output: Use OrthancPluginDatabaseAnswerExportedResource() */
502  OrthancPluginErrorCode (*getLastExportedResource) (
503  /* outputs */
505  /* inputs */
506  void* payload);
507 
508  /* Output: Use OrthancPluginDatabaseAnswerDicomTag() */
509  OrthancPluginErrorCode (*getMainDicomTags) (
510  /* outputs */
512  /* inputs */
513  void* payload,
514  int64_t id);
515 
516  /* Output: Use OrthancPluginDatabaseAnswerString() */
517  OrthancPluginErrorCode (*getPublicId) (
518  /* outputs */
520  /* inputs */
521  void* payload,
522  int64_t id);
523 
524  OrthancPluginErrorCode (*getResourceCount) (
525  /* outputs */
526  uint64_t* target,
527  /* inputs */
528  void* payload,
529  OrthancPluginResourceType resourceType);
530 
531  OrthancPluginErrorCode (*getResourceType) (
532  /* outputs */
533  OrthancPluginResourceType* resourceType,
534  /* inputs */
535  void* payload,
536  int64_t id);
537 
538  OrthancPluginErrorCode (*getTotalCompressedSize) (
539  /* outputs */
540  uint64_t* target,
541  /* inputs */
542  void* payload);
543 
544  OrthancPluginErrorCode (*getTotalUncompressedSize) (
545  /* outputs */
546  uint64_t* target,
547  /* inputs */
548  void* payload);
549 
550  OrthancPluginErrorCode (*isExistingResource) (
551  /* outputs */
552  int32_t* existing,
553  /* inputs */
554  void* payload,
555  int64_t id);
556 
557  OrthancPluginErrorCode (*isProtectedPatient) (
558  /* outputs */
559  int32_t* isProtected,
560  /* inputs */
561  void* payload,
562  int64_t id);
563 
564  /* Output: Use OrthancPluginDatabaseAnswerInt32() */
565  OrthancPluginErrorCode (*listAvailableMetadata) (
566  /* outputs */
568  /* inputs */
569  void* payload,
570  int64_t id);
571 
572  /* Output: Use OrthancPluginDatabaseAnswerInt32() */
573  OrthancPluginErrorCode (*listAvailableAttachments) (
574  /* outputs */
576  /* inputs */
577  void* payload,
578  int64_t id);
579 
580  OrthancPluginErrorCode (*logChange) (
581  /* inputs */
582  void* payload,
583  const OrthancPluginChange* change);
584 
585  OrthancPluginErrorCode (*logExportedResource) (
586  /* inputs */
587  void* payload,
588  const OrthancPluginExportedResource* exported);
589 
590  /* Output: Use OrthancPluginDatabaseAnswerAttachment() */
591  OrthancPluginErrorCode (*lookupAttachment) (
592  /* outputs */
594  /* inputs */
595  void* payload,
596  int64_t id,
597  int32_t contentType);
598 
599  /* Output: Use OrthancPluginDatabaseAnswerString() */
600  OrthancPluginErrorCode (*lookupGlobalProperty) (
601  /* outputs */
603  /* inputs */
604  void* payload,
605  int32_t property);
606 
607  /* Use "OrthancPluginDatabaseExtensions::lookupIdentifier3"
608  instead of this function as of Orthanc 0.9.5 (db v6), can be set to NULL.
609  Output: Use OrthancPluginDatabaseAnswerInt64() */
610  OrthancPluginErrorCode (*lookupIdentifier) (
611  /* outputs */
613  /* inputs */
614  void* payload,
615  const OrthancPluginDicomTag* tag);
616 
617  /* Unused starting with Orthanc 0.9.5 (db v6), can be set to NULL.
618  Output: Use OrthancPluginDatabaseAnswerInt64() */
619  OrthancPluginErrorCode (*lookupIdentifier2) (
620  /* outputs */
622  /* inputs */
623  void* payload,
624  const char* value);
625 
626  /* Output: Use OrthancPluginDatabaseAnswerString() */
627  OrthancPluginErrorCode (*lookupMetadata) (
628  /* outputs */
630  /* inputs */
631  void* payload,
632  int64_t id,
633  int32_t metadata);
634 
635  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
636  OrthancPluginErrorCode (*lookupParent) (
637  /* outputs */
639  /* inputs */
640  void* payload,
641  int64_t id);
642 
643  /* Output: Use OrthancPluginDatabaseAnswerResource() */
644  OrthancPluginErrorCode (*lookupResource) (
645  /* outputs */
647  /* inputs */
648  void* payload,
649  const char* publicId);
650 
651  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
652  OrthancPluginErrorCode (*selectPatientToRecycle) (
653  /* outputs */
655  /* inputs */
656  void* payload);
657 
658  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
659  OrthancPluginErrorCode (*selectPatientToRecycle2) (
660  /* outputs */
662  /* inputs */
663  void* payload,
664  int64_t patientIdToAvoid);
665 
666  OrthancPluginErrorCode (*setGlobalProperty) (
667  /* inputs */
668  void* payload,
669  int32_t property,
670  const char* value);
671 
672  OrthancPluginErrorCode (*setMainDicomTag) (
673  /* inputs */
674  void* payload,
675  int64_t id,
676  const OrthancPluginDicomTag* tag);
677 
678  OrthancPluginErrorCode (*setIdentifierTag) (
679  /* inputs */
680  void* payload,
681  int64_t id,
682  const OrthancPluginDicomTag* tag);
683 
684  OrthancPluginErrorCode (*setMetadata) (
685  /* inputs */
686  void* payload,
687  int64_t id,
688  int32_t metadata,
689  const char* value);
690 
691  OrthancPluginErrorCode (*setProtectedPatient) (
692  /* inputs */
693  void* payload,
694  int64_t id,
695  int32_t isProtected);
696 
697  OrthancPluginErrorCode (*startTransaction) (
698  /* inputs */
699  void* payload);
700 
701  OrthancPluginErrorCode (*rollbackTransaction) (
702  /* inputs */
703  void* payload);
704 
705  OrthancPluginErrorCode (*commitTransaction) (
706  /* inputs */
707  void* payload);
708 
709  OrthancPluginErrorCode (*open) (
710  /* inputs */
711  void* payload);
712 
713  OrthancPluginErrorCode (*close) (
714  /* inputs */
715  void* payload);
716 
717  } OrthancPluginDatabaseBackend;
718 
719 
720  typedef struct
721  {
726  /* Output: Use OrthancPluginDatabaseAnswerString() */
727  OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (
728  /* outputs */
730  /* inputs */
731  void* payload,
732  OrthancPluginResourceType resourceType,
733  uint64_t since,
734  uint64_t limit);
735 
736  OrthancPluginErrorCode (*getDatabaseVersion) (
737  /* outputs */
738  uint32_t* version,
739  /* inputs */
740  void* payload);
741 
742  OrthancPluginErrorCode (*upgradeDatabase) (
743  /* inputs */
744  void* payload,
745  uint32_t targetVersion,
746  OrthancPluginStorageArea* storageArea);
747 
748  OrthancPluginErrorCode (*clearMainDicomTags) (
749  /* inputs */
750  void* payload,
751  int64_t id);
752 
753  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
754  OrthancPluginErrorCode (*getAllInternalIds) (
755  /* outputs */
757  /* inputs */
758  void* payload,
759  OrthancPluginResourceType resourceType);
760 
761  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
762  OrthancPluginErrorCode (*lookupIdentifier3) (
763  /* outputs */
765  /* inputs */
766  void* payload,
767  OrthancPluginResourceType resourceType,
768  const OrthancPluginDicomTag* tag,
770 
771 
776  /* Output: Use OrthancPluginDatabaseAnswerInt64() */
777  OrthancPluginErrorCode (*lookupIdentifierRange) (
778  /* outputs */
780  /* inputs */
781  void* payload,
782  OrthancPluginResourceType resourceType,
783  uint16_t group,
784  uint16_t element,
785  const char* start,
786  const char* end);
787 
788 
793  /* Ouput: Use OrthancPluginDatabaseAnswerMatchingResource */
794  OrthancPluginErrorCode (*lookupResources) (
795  /* outputs */
797  /* inputs */
798  void* payload,
799  uint32_t constraintsCount,
800  const OrthancPluginDatabaseConstraint* constraints,
801  OrthancPluginResourceType queryLevel,
802  uint32_t limit,
803  uint8_t requestSomeInstance);
804 
805  OrthancPluginErrorCode (*createInstance) (
806  /* output */
807  OrthancPluginCreateInstanceResult* output,
808  /* inputs */
809  void* payload,
810  const char* hashPatient,
811  const char* hashStudy,
812  const char* hashSeries,
813  const char* hashInstance);
814 
815  OrthancPluginErrorCode (*setResourcesContent) (
816  /* inputs */
817  void* payload,
818  uint32_t countIdentifierTags,
819  const OrthancPluginResourcesContentTags* identifierTags,
820  uint32_t countMainDicomTags,
821  const OrthancPluginResourcesContentTags* mainDicomTags,
822  uint32_t countMetadata,
823  const OrthancPluginResourcesContentMetadata* metadata);
824 
825  /* Ouput: Use OrthancPluginDatabaseAnswerString */
826  OrthancPluginErrorCode (*getChildrenMetadata) (
827  /* outputs */
829  /* inputs */
830  void* payload,
831  int64_t resourceId,
832  int32_t metadata);
833 
834  OrthancPluginErrorCode (*getLastChangeIndex) (
835  /* outputs */
836  int64_t* target,
837  /* inputs */
838  void* payload);
839 
840  OrthancPluginErrorCode (*tagMostRecentPatient) (
841  /* inputs */
842  void* payload,
843  int64_t patientId);
844 
845 
850  /* Ouput: Use OrthancPluginDatabaseAnswerMetadata */
851  OrthancPluginErrorCode (*getAllMetadata) (
852  /* outputs */
854  /* inputs */
855  void* payload,
856  int64_t resourceId);
857 
858  /* Ouput: Use OrthancPluginDatabaseAnswerString to send
859  the public ID of the parent (if the resource is not a patient) */
860  OrthancPluginErrorCode (*lookupResourceAndParent) (
861  /* outputs */
863  uint8_t* isExisting,
864  int64_t* id,
866 
867  /* inputs */
868  void* payload,
869  const char* publicId);
870 
871  } OrthancPluginDatabaseExtensions;
872 
873 /*<! @endcond */
874 
875 
876  typedef struct
877  {
879  const OrthancPluginDatabaseBackend* backend;
880  void* payload;
881  } _OrthancPluginRegisterDatabaseBackend;
882 
895  OrthancPluginContext* context,
896  const OrthancPluginDatabaseBackend* backend,
897  void* payload)
898  {
899  OrthancPluginDatabaseContext* result = NULL;
900  _OrthancPluginRegisterDatabaseBackend params;
901 
902  if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
903  {
904  return NULL;
905  }
906 
907  memset(&params, 0, sizeof(params));
908  params.backend = backend;
909  params.result = &result;
910  params.payload = payload;
911 
912  if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackend, &params) ||
913  result == NULL)
914  {
915  /* Error */
916  return NULL;
917  }
918  else
919  {
920  return result;
921  }
922  }
923 
924 
925  typedef struct
926  {
928  const OrthancPluginDatabaseBackend* backend;
929  void* payload;
930  const OrthancPluginDatabaseExtensions* extensions;
931  uint32_t extensionsSize;
932  } _OrthancPluginRegisterDatabaseBackendV2;
933 
934 
946  OrthancPluginContext* context,
947  const OrthancPluginDatabaseBackend* backend,
948  const OrthancPluginDatabaseExtensions* extensions,
949  void* payload)
950  {
951  OrthancPluginDatabaseContext* result = NULL;
952  _OrthancPluginRegisterDatabaseBackendV2 params;
953 
954  if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
955  {
956  return NULL;
957  }
958 
959  memset(&params, 0, sizeof(params));
960  params.backend = backend;
961  params.result = &result;
962  params.payload = payload;
963  params.extensions = extensions;
964  params.extensionsSize = sizeof(OrthancPluginDatabaseExtensions);
965 
966  if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackendV2, &params) ||
967  result == NULL)
968  {
969  /* Error */
970  return NULL;
971  }
972  else
973  {
974  return result;
975  }
976  }
977 
978 
979 
984 /*<! @cond Doxygen_Suppress */
985  typedef enum
986  {
987  OrthancPluginDatabaseTransactionType_ReadOnly = 1,
988  OrthancPluginDatabaseTransactionType_ReadWrite = 2,
989  OrthancPluginDatabaseTransactionType_INTERNAL = 0x7fffffff
990  } OrthancPluginDatabaseTransactionType;
991 
992 
993  typedef enum
994  {
995  OrthancPluginDatabaseEventType_DeletedAttachment = 1,
996  OrthancPluginDatabaseEventType_DeletedResource = 2,
997  OrthancPluginDatabaseEventType_RemainingAncestor = 3,
998  OrthancPluginDatabaseEventType_INTERNAL = 0x7fffffff
999  } OrthancPluginDatabaseEventType;
1000 
1001 
1002  typedef struct
1003  {
1004  OrthancPluginDatabaseEventType type;
1005 
1006  union
1007  {
1008  struct
1009  {
1010  /* For ""DeletedResource" and "RemainingAncestor" */
1012  const char* publicId;
1013  } resource;
1014 
1015  /* For "DeletedAttachment" */
1016  OrthancPluginAttachment attachment;
1017 
1018  } content;
1019 
1020  } OrthancPluginDatabaseEvent;
1021 
1022 
1023  typedef struct
1024  {
1029  OrthancPluginErrorCode (*readAnswersCount) (OrthancPluginDatabaseTransaction* transaction,
1030  uint32_t* target /* out */);
1031 
1032  OrthancPluginErrorCode (*readAnswerAttachment) (OrthancPluginDatabaseTransaction* transaction,
1033  OrthancPluginAttachment* target /* out */,
1034  uint32_t index);
1035 
1036  OrthancPluginErrorCode (*readAnswerChange) (OrthancPluginDatabaseTransaction* transaction,
1037  OrthancPluginChange* target /* out */,
1038  uint32_t index);
1039 
1040  OrthancPluginErrorCode (*readAnswerDicomTag) (OrthancPluginDatabaseTransaction* transaction,
1041  uint16_t* group,
1042  uint16_t* element,
1043  const char** value,
1044  uint32_t index);
1045 
1046  OrthancPluginErrorCode (*readAnswerExportedResource) (OrthancPluginDatabaseTransaction* transaction,
1047  OrthancPluginExportedResource* target /* out */,
1048  uint32_t index);
1049 
1050  OrthancPluginErrorCode (*readAnswerInt32) (OrthancPluginDatabaseTransaction* transaction,
1051  int32_t* target /* out */,
1052  uint32_t index);
1053 
1054  OrthancPluginErrorCode (*readAnswerInt64) (OrthancPluginDatabaseTransaction* transaction,
1055  int64_t* target /* out */,
1056  uint32_t index);
1057 
1058  OrthancPluginErrorCode (*readAnswerMatchingResource) (OrthancPluginDatabaseTransaction* transaction,
1059  OrthancPluginMatchingResource* target /* out */,
1060  uint32_t index);
1061 
1062  OrthancPluginErrorCode (*readAnswerMetadata) (OrthancPluginDatabaseTransaction* transaction,
1063  int32_t* metadata /* out */,
1064  const char** value /* out */,
1065  uint32_t index);
1066 
1067  OrthancPluginErrorCode (*readAnswerString) (OrthancPluginDatabaseTransaction* transaction,
1068  const char** target /* out */,
1069  uint32_t index);
1070 
1071  OrthancPluginErrorCode (*readEventsCount) (OrthancPluginDatabaseTransaction* transaction,
1072  uint32_t* target /* out */);
1073 
1074  OrthancPluginErrorCode (*readEvent) (OrthancPluginDatabaseTransaction* transaction,
1075  OrthancPluginDatabaseEvent* event /* out */,
1076  uint32_t index);
1077 
1078 
1079 
1085  OrthancPluginErrorCode (*open) (void* database);
1086 
1087  OrthancPluginErrorCode (*close) (void* database);
1088 
1089  OrthancPluginErrorCode (*destructDatabase) (void* database);
1090 
1091  OrthancPluginErrorCode (*getDatabaseVersion) (void* database,
1092  uint32_t* target /* out */);
1093 
1094  OrthancPluginErrorCode (*hasRevisionsSupport) (void* database,
1095  uint8_t* target /* out */);
1096 
1097  OrthancPluginErrorCode (*upgradeDatabase) (void* database,
1098  OrthancPluginStorageArea* storageArea,
1099  uint32_t targetVersion);
1100 
1101  OrthancPluginErrorCode (*startTransaction) (void* database,
1102  OrthancPluginDatabaseTransaction** target /* out */,
1103  OrthancPluginDatabaseTransactionType type);
1104 
1105  OrthancPluginErrorCode (*destructTransaction) (OrthancPluginDatabaseTransaction* transaction);
1106 
1107 
1113  OrthancPluginErrorCode (*rollback) (OrthancPluginDatabaseTransaction* transaction);
1114 
1116  int64_t fileSizeDelta);
1117 
1118  /* A call to "addAttachment()" guarantees that this attachment is not already existing ("INSERT") */
1119  OrthancPluginErrorCode (*addAttachment) (OrthancPluginDatabaseTransaction* transaction,
1120  int64_t id,
1121  const OrthancPluginAttachment* attachment,
1122  int64_t revision);
1123 
1124  OrthancPluginErrorCode (*clearChanges) (OrthancPluginDatabaseTransaction* transaction);
1125 
1126  OrthancPluginErrorCode (*clearExportedResources) (OrthancPluginDatabaseTransaction* transaction);
1127 
1128  OrthancPluginErrorCode (*clearMainDicomTags) (OrthancPluginDatabaseTransaction* transaction,
1129  int64_t resourceId);
1130 
1131  OrthancPluginErrorCode (*createInstance) (OrthancPluginDatabaseTransaction* transaction,
1132  OrthancPluginCreateInstanceResult* target /* out */,
1133  const char* hashPatient,
1134  const char* hashStudy,
1135  const char* hashSeries,
1136  const char* hashInstance);
1137 
1138  OrthancPluginErrorCode (*deleteAttachment) (OrthancPluginDatabaseTransaction* transaction,
1139  int64_t id,
1140  int32_t contentType);
1141 
1142  OrthancPluginErrorCode (*deleteMetadata) (OrthancPluginDatabaseTransaction* transaction,
1143  int64_t id,
1144  int32_t metadataType);
1145 
1146  OrthancPluginErrorCode (*deleteResource) (OrthancPluginDatabaseTransaction* transaction,
1147  int64_t id);
1148 
1149  /* Answers are read using "readAnswerMetadata()" */
1150  OrthancPluginErrorCode (*getAllMetadata) (OrthancPluginDatabaseTransaction* transaction,
1151  int64_t id);
1152 
1153  /* Answers are read using "readAnswerString()" */
1154  OrthancPluginErrorCode (*getAllPublicIds) (OrthancPluginDatabaseTransaction* transaction,
1155  OrthancPluginResourceType resourceType);
1156 
1157  /* Answers are read using "readAnswerString()" */
1158  OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (OrthancPluginDatabaseTransaction* transaction,
1159  OrthancPluginResourceType resourceType,
1160  uint64_t since,
1161  uint64_t limit);
1162 
1163  /* Answers are read using "readAnswerChange()" */
1164  OrthancPluginErrorCode (*getChanges) (OrthancPluginDatabaseTransaction* transaction,
1165  uint8_t* targetDone /* out */,
1166  int64_t since,
1167  uint32_t maxResults);
1168 
1169  /* Answers are read using "readAnswerInt64()" */
1170  OrthancPluginErrorCode (*getChildrenInternalId) (OrthancPluginDatabaseTransaction* transaction,
1171  int64_t id);
1172 
1173  /* Answers are read using "readAnswerString()" */
1174  OrthancPluginErrorCode (*getChildrenMetadata) (OrthancPluginDatabaseTransaction* transaction,
1175  int64_t resourceId,
1176  int32_t metadata);
1177 
1178  /* Answers are read using "readAnswerString()" */
1179  OrthancPluginErrorCode (*getChildrenPublicId) (OrthancPluginDatabaseTransaction* transaction,
1180  int64_t id);
1181 
1182  /* Answers are read using "readAnswerExportedResource()" */
1183  OrthancPluginErrorCode (*getExportedResources) (OrthancPluginDatabaseTransaction* transaction,
1184  uint8_t* targetDone /* out */,
1185  int64_t since,
1186  uint32_t maxResults);
1187 
1188  /* Answer is read using "readAnswerChange()" */
1189  OrthancPluginErrorCode (*getLastChange) (OrthancPluginDatabaseTransaction* transaction);
1190 
1191  OrthancPluginErrorCode (*getLastChangeIndex) (OrthancPluginDatabaseTransaction* transaction,
1192  int64_t* target /* out */);
1193 
1194  /* Answer is read using "readAnswerExportedResource()" */
1195  OrthancPluginErrorCode (*getLastExportedResource) (OrthancPluginDatabaseTransaction* transaction);
1196 
1197  /* Answers are read using "readAnswerDicomTag()" */
1198  OrthancPluginErrorCode (*getMainDicomTags) (OrthancPluginDatabaseTransaction* transaction,
1199  int64_t id);
1200 
1201  /* Answer is read using "readAnswerString()" */
1202  OrthancPluginErrorCode (*getPublicId) (OrthancPluginDatabaseTransaction* transaction,
1203  int64_t internalId);
1204 
1205  OrthancPluginErrorCode (*getResourcesCount) (OrthancPluginDatabaseTransaction* transaction,
1206  uint64_t* target /* out */,
1207  OrthancPluginResourceType resourceType);
1208 
1209  OrthancPluginErrorCode (*getResourceType) (OrthancPluginDatabaseTransaction* transaction,
1210  OrthancPluginResourceType* target /* out */,
1211  uint64_t resourceId);
1212 
1213  OrthancPluginErrorCode (*getTotalCompressedSize) (OrthancPluginDatabaseTransaction* transaction,
1214  uint64_t* target /* out */);
1215 
1216  OrthancPluginErrorCode (*getTotalUncompressedSize) (OrthancPluginDatabaseTransaction* transaction,
1217  uint64_t* target /* out */);
1218 
1219  OrthancPluginErrorCode (*isDiskSizeAbove) (OrthancPluginDatabaseTransaction* transaction,
1220  uint8_t* target /* out */,
1221  uint64_t threshold);
1222 
1223  OrthancPluginErrorCode (*isExistingResource) (OrthancPluginDatabaseTransaction* transaction,
1224  uint8_t* target /* out */,
1225  int64_t resourceId);
1226 
1227  OrthancPluginErrorCode (*isProtectedPatient) (OrthancPluginDatabaseTransaction* transaction,
1228  uint8_t* target /* out */,
1229  int64_t resourceId);
1230 
1231  /* Answers are read using "readAnswerInt32()" */
1232  OrthancPluginErrorCode (*listAvailableAttachments) (OrthancPluginDatabaseTransaction* transaction,
1233  int64_t internalId);
1234 
1235  OrthancPluginErrorCode (*logChange) (OrthancPluginDatabaseTransaction* transaction,
1236  int32_t changeType,
1237  int64_t resourceId,
1238  OrthancPluginResourceType resourceType,
1239  const char* date);
1240 
1241  OrthancPluginErrorCode (*logExportedResource) (OrthancPluginDatabaseTransaction* transaction,
1242  OrthancPluginResourceType resourceType,
1243  const char* publicId,
1244  const char* modality,
1245  const char* date,
1246  const char* patientId,
1247  const char* studyInstanceUid,
1248  const char* seriesInstanceUid,
1249  const char* sopInstanceUid);
1250 
1251  /* Answer is read using "readAnswerAttachment()" */
1252  OrthancPluginErrorCode (*lookupAttachment) (OrthancPluginDatabaseTransaction* transaction,
1253  int64_t* revision /* out */,
1254  int64_t resourceId,
1255  int32_t contentType);
1256 
1257  /* Answer is read using "readAnswerString()" */
1258  OrthancPluginErrorCode (*lookupGlobalProperty) (OrthancPluginDatabaseTransaction* transaction,
1259  const char* serverIdentifier,
1260  int32_t property);
1261 
1262  /* Answer is read using "readAnswerString()" */
1263  OrthancPluginErrorCode (*lookupMetadata) (OrthancPluginDatabaseTransaction* transaction,
1264  int64_t* revision /* out */,
1265  int64_t id,
1266  int32_t metadata);
1267 
1268  OrthancPluginErrorCode (*lookupParent) (OrthancPluginDatabaseTransaction* transaction,
1269  uint8_t* isExisting /* out */,
1270  int64_t* parentId /* out */,
1271  int64_t id);
1272 
1273  OrthancPluginErrorCode (*lookupResource) (OrthancPluginDatabaseTransaction* transaction,
1274  uint8_t* isExisting /* out */,
1275  int64_t* id /* out */,
1276  OrthancPluginResourceType* type /* out */,
1277  const char* publicId);
1278 
1279  /* Answers are read using "readAnswerMatchingResource()" */
1280  OrthancPluginErrorCode (*lookupResources) (OrthancPluginDatabaseTransaction* transaction,
1281  uint32_t constraintsCount,
1282  const OrthancPluginDatabaseConstraint* constraints,
1283  OrthancPluginResourceType queryLevel,
1284  uint32_t limit,
1285  uint8_t requestSomeInstanceId);
1286 
1287  /* The public ID of the parent resource is read using "readAnswerString()" */
1288  OrthancPluginErrorCode (*lookupResourceAndParent) (OrthancPluginDatabaseTransaction* transaction,
1289  uint8_t* isExisting /* out */,
1290  int64_t* id /* out */,
1291  OrthancPluginResourceType* type /* out */,
1292  const char* publicId);
1293 
1294  OrthancPluginErrorCode (*selectPatientToRecycle) (OrthancPluginDatabaseTransaction* transaction,
1295  uint8_t* patientAvailable /* out */,
1296  int64_t* patientId /* out */);
1297 
1298  OrthancPluginErrorCode (*selectPatientToRecycle2) (OrthancPluginDatabaseTransaction* transaction,
1299  uint8_t* patientAvailable /* out */,
1300  int64_t* patientId /* out */,
1301  int64_t patientIdToAvoid);
1302 
1303  OrthancPluginErrorCode (*setGlobalProperty) (OrthancPluginDatabaseTransaction* transaction,
1304  const char* serverIdentifier,
1305  int32_t property,
1306  const char* value);
1307 
1308  /* In "setMetadata()", the metadata might already be existing ("INSERT OR REPLACE") */
1309  OrthancPluginErrorCode (*setMetadata) (OrthancPluginDatabaseTransaction* transaction,
1310  int64_t id,
1311  int32_t metadata,
1312  const char* value,
1313  int64_t revision);
1314 
1315  OrthancPluginErrorCode (*setProtectedPatient) (OrthancPluginDatabaseTransaction* transaction,
1316  int64_t id,
1317  uint8_t isProtected);
1318 
1319  OrthancPluginErrorCode (*setResourcesContent) (OrthancPluginDatabaseTransaction* transaction,
1320  uint32_t countIdentifierTags,
1321  const OrthancPluginResourcesContentTags* identifierTags,
1322  uint32_t countMainDicomTags,
1323  const OrthancPluginResourcesContentTags* mainDicomTags,
1324  uint32_t countMetadata,
1325  const OrthancPluginResourcesContentMetadata* metadata);
1326 
1327 
1328  } OrthancPluginDatabaseBackendV3;
1329 
1330 /*<! @endcond */
1331 
1332 
1333  typedef struct
1334  {
1335  const OrthancPluginDatabaseBackendV3* backend;
1336  uint32_t backendSize;
1337  uint32_t maxDatabaseRetries;
1338  void* database;
1339  } _OrthancPluginRegisterDatabaseBackendV3;
1340 
1341 
1342  ORTHANC_PLUGIN_INLINE OrthancPluginErrorCode OrthancPluginRegisterDatabaseBackendV3(
1343  OrthancPluginContext* context,
1344  const OrthancPluginDatabaseBackendV3* backend,
1345  uint32_t backendSize,
1346  uint32_t maxDatabaseRetries, /* To handle "OrthancPluginErrorCode_DatabaseCannotSerialize" */
1347  void* database)
1348  {
1349  _OrthancPluginRegisterDatabaseBackendV3 params;
1350 
1351  if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
1352  {
1354  }
1355 
1356  memset(&params, 0, sizeof(params));
1357  params.backend = backend;
1358  params.backendSize = sizeof(OrthancPluginDatabaseBackendV3);
1359  params.maxDatabaseRetries = maxDatabaseRetries;
1360  params.database = database;
1361 
1362  return context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackendV3, &params);
1363  }
1364 
1365 #ifdef __cplusplus
1366 }
1367 #endif
1368 
1369 
struct _OrthancPluginDatabaseTransaction_t OrthancPluginDatabaseTransaction
Definition: OrthancCDatabasePlugin.h:54
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackend(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, void *payload)
Definition: OrthancCDatabasePlugin.h:894
struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext
Definition: OrthancCDatabasePlugin.h:46
OrthancPluginDatabaseContext * OrthancPluginRegisterDatabaseBackendV2(OrthancPluginContext *context, const OrthancPluginDatabaseBackend *backend, const OrthancPluginDatabaseExtensions *extensions, void *payload)
Definition: OrthancCDatabasePlugin.h:945
struct _OrthancPluginStorageArea_t OrthancPluginStorageArea
Opaque structure that represents the storage area that is actually used by Orthanc.
Definition: OrthancCPlugin.h:1205
OrthancPluginIdentifierConstraint
Definition: OrthancCPlugin.h:908
OrthancPluginResourceType
Definition: OrthancCPlugin.h:741
OrthancPluginErrorCode
Definition: OrthancCPlugin.h:216
OrthancPluginConstraintType
Definition: OrthancCPlugin.h:923
struct _OrthancPluginContext_t OrthancPluginContext
Data structure that contains information about the Orthanc core.
@ OrthancPluginErrorCode_Plugin
Definition: OrthancCPlugin.h:219