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