comparison Resources/Orthanc/Sdk-1.12.4/orthanc/OrthancCDatabasePlugin.h @ 511:51a78b3f96bb OrthancMySQL-5.2

use Framework 1.12.4 by default
author Alain Mazy <am@orthanc.team>
date Thu, 06 Jun 2024 11:55:22 +0200
parents
children
comparison
equal deleted inserted replaced
510:51c61a2bb48a 511:51a78b3f96bb
1 /**
2 * @ingroup CInterface
3 **/
4
5 /**
6 * Orthanc - A Lightweight, RESTful DICOM Store
7 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
8 * Department, University Hospital of Liege, Belgium
9 * Copyright (C) 2017-2023 Osimis S.A., Belgium
10 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium
11 * Copyright (C) 2021-2024 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
12 *
13 * This program is free software: you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License as
15 * published by the Free Software Foundation, either version 3 of the
16 * License, or (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful, but
19 * WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 * General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 **/
26
27
28
29 #pragma once
30
31 #include "OrthancCPlugin.h"
32
33
34 /** @{ */
35
36 #ifdef __cplusplus
37 extern "C"
38 {
39 #endif
40
41
42 /**
43 * Opaque structure that represents the context of a custom database engine.
44 * @ingroup Callbacks
45 **/
46 typedef struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext;
47
48
49 /**
50 * Opaque structure that represents a transaction of a custom database engine.
51 * New in Orthanc 1.9.2.
52 * @ingroup Callbacks
53 **/
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 {
125 OrthancPluginResourceType level;
126 uint16_t tagGroup;
127 uint16_t tagElement;
128 uint8_t isIdentifierTag;
129 uint8_t isCaseSensitive;
130 uint8_t isMandatory;
131 OrthancPluginConstraintType type;
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 {
175 OrthancPluginDatabaseContext* database;
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,
186 OrthancPluginDatabaseContext* database,
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,
199 OrthancPluginDatabaseContext* database,
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,
215 OrthancPluginDatabaseContext* database)
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,
230 OrthancPluginDatabaseContext* database,
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,
243 OrthancPluginDatabaseContext* database,
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,
256 OrthancPluginDatabaseContext* database,
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,
271 OrthancPluginDatabaseContext* database)
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,
285 OrthancPluginDatabaseContext* database,
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,
298 OrthancPluginDatabaseContext* database,
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,
311 OrthancPluginDatabaseContext* database,
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,
326 OrthancPluginDatabaseContext* database,
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,
339 OrthancPluginDatabaseContext* database,
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,
358 OrthancPluginDatabaseContext* database,
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,
371 OrthancPluginDatabaseContext* database,
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,
386 OrthancPluginDatabaseContext* database,
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 */
453 OrthancPluginDatabaseContext* context,
454 /* inputs */
455 void* payload,
456 OrthancPluginResourceType resourceType);
457
458 /* Output: Use OrthancPluginDatabaseAnswerChange() and
459 * OrthancPluginDatabaseAnswerChangesDone() */
460 OrthancPluginErrorCode (*getChanges) (
461 /* outputs */
462 OrthancPluginDatabaseContext* context,
463 /* inputs */
464 void* payload,
465 int64_t since,
466 uint32_t maxResult);
467
468 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
469 OrthancPluginErrorCode (*getChildrenInternalId) (
470 /* outputs */
471 OrthancPluginDatabaseContext* context,
472 /* inputs */
473 void* payload,
474 int64_t id);
475
476 /* Output: Use OrthancPluginDatabaseAnswerString() */
477 OrthancPluginErrorCode (*getChildrenPublicId) (
478 /* outputs */
479 OrthancPluginDatabaseContext* context,
480 /* inputs */
481 void* payload,
482 int64_t id);
483
484 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() and
485 * OrthancPluginDatabaseAnswerExportedResourcesDone() */
486 OrthancPluginErrorCode (*getExportedResources) (
487 /* outputs */
488 OrthancPluginDatabaseContext* context,
489 /* inputs */
490 void* payload,
491 int64_t since,
492 uint32_t maxResult);
493
494 /* Output: Use OrthancPluginDatabaseAnswerChange() */
495 OrthancPluginErrorCode (*getLastChange) (
496 /* outputs */
497 OrthancPluginDatabaseContext* context,
498 /* inputs */
499 void* payload);
500
501 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() */
502 OrthancPluginErrorCode (*getLastExportedResource) (
503 /* outputs */
504 OrthancPluginDatabaseContext* context,
505 /* inputs */
506 void* payload);
507
508 /* Output: Use OrthancPluginDatabaseAnswerDicomTag() */
509 OrthancPluginErrorCode (*getMainDicomTags) (
510 /* outputs */
511 OrthancPluginDatabaseContext* context,
512 /* inputs */
513 void* payload,
514 int64_t id);
515
516 /* Output: Use OrthancPluginDatabaseAnswerString() */
517 OrthancPluginErrorCode (*getPublicId) (
518 /* outputs */
519 OrthancPluginDatabaseContext* context,
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 */
567 OrthancPluginDatabaseContext* context,
568 /* inputs */
569 void* payload,
570 int64_t id);
571
572 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
573 OrthancPluginErrorCode (*listAvailableAttachments) (
574 /* outputs */
575 OrthancPluginDatabaseContext* context,
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 */
593 OrthancPluginDatabaseContext* context,
594 /* inputs */
595 void* payload,
596 int64_t id,
597 int32_t contentType);
598
599 /* Output: Use OrthancPluginDatabaseAnswerString() */
600 OrthancPluginErrorCode (*lookupGlobalProperty) (
601 /* outputs */
602 OrthancPluginDatabaseContext* context,
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 */
612 OrthancPluginDatabaseContext* context,
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 */
621 OrthancPluginDatabaseContext* context,
622 /* inputs */
623 void* payload,
624 const char* value);
625
626 /* Output: Use OrthancPluginDatabaseAnswerString() */
627 OrthancPluginErrorCode (*lookupMetadata) (
628 /* outputs */
629 OrthancPluginDatabaseContext* context,
630 /* inputs */
631 void* payload,
632 int64_t id,
633 int32_t metadata);
634
635 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
636 OrthancPluginErrorCode (*lookupParent) (
637 /* outputs */
638 OrthancPluginDatabaseContext* context,
639 /* inputs */
640 void* payload,
641 int64_t id);
642
643 /* Output: Use OrthancPluginDatabaseAnswerResource() */
644 OrthancPluginErrorCode (*lookupResource) (
645 /* outputs */
646 OrthancPluginDatabaseContext* context,
647 /* inputs */
648 void* payload,
649 const char* publicId);
650
651 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
652 OrthancPluginErrorCode (*selectPatientToRecycle) (
653 /* outputs */
654 OrthancPluginDatabaseContext* context,
655 /* inputs */
656 void* payload);
657
658 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
659 OrthancPluginErrorCode (*selectPatientToRecycle2) (
660 /* outputs */
661 OrthancPluginDatabaseContext* context,
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 {
722 /**
723 * Base extensions since Orthanc 1.0.0
724 **/
725
726 /* Output: Use OrthancPluginDatabaseAnswerString() */
727 OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (
728 /* outputs */
729 OrthancPluginDatabaseContext* context,
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 */
756 OrthancPluginDatabaseContext* context,
757 /* inputs */
758 void* payload,
759 OrthancPluginResourceType resourceType);
760
761 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
762 OrthancPluginErrorCode (*lookupIdentifier3) (
763 /* outputs */
764 OrthancPluginDatabaseContext* context,
765 /* inputs */
766 void* payload,
767 OrthancPluginResourceType resourceType,
768 const OrthancPluginDicomTag* tag,
769 OrthancPluginIdentifierConstraint constraint);
770
771
772 /**
773 * Extensions since Orthanc 1.4.0
774 **/
775
776 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
777 OrthancPluginErrorCode (*lookupIdentifierRange) (
778 /* outputs */
779 OrthancPluginDatabaseContext* context,
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
789 /**
790 * Extensions since Orthanc 1.5.2
791 **/
792
793 /* Ouput: Use OrthancPluginDatabaseAnswerMatchingResource */
794 OrthancPluginErrorCode (*lookupResources) (
795 /* outputs */
796 OrthancPluginDatabaseContext* context,
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 */
828 OrthancPluginDatabaseContext* context,
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
846 /**
847 * Extensions since Orthanc 1.5.4
848 **/
849
850 /* Ouput: Use OrthancPluginDatabaseAnswerMetadata */
851 OrthancPluginErrorCode (*getAllMetadata) (
852 /* outputs */
853 OrthancPluginDatabaseContext* context,
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 */
862 OrthancPluginDatabaseContext* context,
863 uint8_t* isExisting,
864 int64_t* id,
865 OrthancPluginResourceType* type,
866
867 /* inputs */
868 void* payload,
869 const char* publicId);
870
871 } OrthancPluginDatabaseExtensions;
872
873 /*<! @endcond */
874
875
876 typedef struct
877 {
878 OrthancPluginDatabaseContext** result;
879 const OrthancPluginDatabaseBackend* backend;
880 void* payload;
881 } _OrthancPluginRegisterDatabaseBackend;
882
883 /**
884 * Register a custom database back-end (for legacy plugins).
885 *
886 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
887 * @param backend The callbacks of the custom database engine.
888 * @param payload Pointer containing private information for the database engine.
889 * @return The context of the database engine (it must not be manually freed).
890 * @ingroup Callbacks
891 * @deprecated
892 * @see OrthancPluginRegisterDatabaseBackendV2
893 **/
894 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackend(
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 {
927 OrthancPluginDatabaseContext** result;
928 const OrthancPluginDatabaseBackend* backend;
929 void* payload;
930 const OrthancPluginDatabaseExtensions* extensions;
931 uint32_t extensionsSize;
932 } _OrthancPluginRegisterDatabaseBackendV2;
933
934
935 /**
936 * Register a custom database back-end.
937 *
938 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
939 * @param backend The callbacks of the custom database engine.
940 * @param payload Pointer containing private information for the database engine.
941 * @param extensions Extensions to the base database SDK that was shipped until Orthanc 0.9.3.
942 * @return The context of the database engine (it must not be manually freed).
943 * @ingroup Callbacks
944 **/
945 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackendV2(
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
980 /**
981 * New interface starting with Orthanc 1.9.2
982 **/
983
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" */
1011 OrthancPluginResourceType level;
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 {
1025 /**
1026 * Functions to read the answers inside a transaction
1027 **/
1028
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
1080 /**
1081 * Functions to access the global database object
1082 * (cf. "IDatabaseWrapper" class in Orthanc)
1083 **/
1084
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
1108 /**
1109 * Functions to run operations within a database transaction
1110 * (cf. "IDatabaseWrapper::ITransaction" class in Orthanc)
1111 **/
1112
1113 OrthancPluginErrorCode (*rollback) (OrthancPluginDatabaseTransaction* transaction);
1114
1115 OrthancPluginErrorCode (*commit) (OrthancPluginDatabaseTransaction* transaction,
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 {
1353 return OrthancPluginErrorCode_Plugin;
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
1370 /** @} */
1371