diff Framework/Plugins/OrthancCppDatabasePlugin.h @ 71:d40c5fecd160 db-changes

new extension implemented for PostgreSQL: CreateInstance
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Jan 2019 13:51:52 +0100
parents e6c13ddd26d9
children a4e440e65c68
line wrap: on
line diff
--- a/Framework/Plugins/OrthancCppDatabasePlugin.h	Thu Jan 03 14:04:46 2019 +0100
+++ b/Framework/Plugins/OrthancCppDatabasePlugin.h	Fri Jan 04 13:51:52 2019 +0100
@@ -491,12 +491,25 @@
 
     virtual void ClearMainDicomTags(int64_t internalId) = 0;
 
+    virtual bool HasCreateInstance() const = 0;
+
 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
     virtual void LookupResources(const std::vector<Orthanc::DatabaseConstraint>& lookup,
                                  OrthancPluginResourceType queryLevel,
                                  uint32_t limit,
                                  bool requestSomeInstance) = 0;
 #endif
+
+#if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
+    virtual void CreateInstance(OrthancPluginCreateInstanceResult& result,
+                                const char* hashPatient,
+                                const char* hashStudy,
+                                const char* hashSeries,
+                                const char* hashInstance)
+    {
+      throw std::runtime_error("Not implemented");
+    }
+#endif
   };
 
 
@@ -1503,6 +1516,26 @@
     }
 #endif
 
+
+#if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
+    static OrthancPluginErrorCode CreateInstance(OrthancPluginCreateInstanceResult* output,
+                                                 void* payload,
+                                                 const char* hashPatient,
+                                                 const char* hashStudy,
+                                                 const char* hashSeries,
+                                                 const char* hashInstance)
+    {
+      IDatabaseBackend* backend = reinterpret_cast<IDatabaseBackend*>(payload);
+
+      try
+      {
+        backend->CreateInstance(*output, hashPatient, hashStudy, hashSeries, hashInstance);
+        return OrthancPluginErrorCode_Success;
+      }
+      ORTHANC_PLUGINS_DATABASE_CATCH      
+    }
+#endif
+
     
   public:
     /**
@@ -1585,6 +1618,12 @@
 
 #if ORTHANC_PLUGINS_HAS_DATABASE_CONSTRAINT == 1
       extensions.lookupResources = LookupResources;   // New in Orthanc 1.5.2 (fast lookup)
+
+      if (backend.HasCreateInstance())
+      {
+        extensions.createInstance = CreateInstance;   // New in Orthanc 1.5.2 (fast create)
+      }
+      
       performanceWarning = false;
 #endif