diff OrthancServer/Sources/Database/IDatabaseWrapper.h @ 5455:176bc05f85f4 pg-transactions

DB: new Capabilities class to manage future new methods from DB plugins + Added IncrementGlobalProperty
author Alain Mazy <am@osimis.io>
date Thu, 07 Dec 2023 12:04:11 +0100
parents f22c8fac764b
children dceed5e3d6a9
line wrap: on
line diff
--- a/OrthancServer/Sources/Database/IDatabaseWrapper.h	Wed Dec 06 14:20:33 2023 +0100
+++ b/OrthancServer/Sources/Database/IDatabaseWrapper.h	Thu Dec 07 12:04:11 2023 +0100
@@ -39,10 +39,57 @@
   class DatabaseConstraint;
   class ResourcesContent;
 
+  class OrthancPluginDatabaseV3;
+  class OrthancPluginDatabaseV4;
   
   class IDatabaseWrapper : public boost::noncopyable
   {
   public:
+
+    struct Capabilities
+    {
+      friend OrthancPluginDatabaseV3;
+      friend OrthancPluginDatabaseV4;
+
+    protected:
+      bool hasFlushToDisk_;
+      bool hasRevisionsSupport_;
+      bool hasLabelsSupport_;
+      bool hasAtomicIncrementGlobalProperty_;
+
+    public:
+      Capabilities(bool hasFlushToDisk,
+                   bool hasRevisionsSupport,
+                   bool hasLabelsSupport,
+                   bool hasAtomicIncrementGlobalProperty)
+      : hasFlushToDisk_(hasFlushToDisk),
+        hasRevisionsSupport_(hasRevisionsSupport),
+        hasLabelsSupport_(hasLabelsSupport),
+        hasAtomicIncrementGlobalProperty_(hasAtomicIncrementGlobalProperty)
+      {
+      }
+
+      bool HasFlushToDisk() const
+      {
+        return hasFlushToDisk_;
+      }
+
+      bool HasRevisionsSupport() const
+      {
+        return hasRevisionsSupport_;
+      }
+
+      bool HasLabelsSupport() const
+      {
+        return hasLabelsSupport_;
+      }
+
+      bool HasAtomicIncrementGlobalProperty() const
+      {
+        return hasAtomicIncrementGlobalProperty_;
+      }
+    };
+
     struct CreateInstanceResult : public boost::noncopyable
     {
       bool     isNewPatient_;
@@ -257,6 +304,12 @@
 
       // List all the labels that are present in any resource
       virtual void ListAllLabels(std::set<std::string>& target) = 0;
+    
+      virtual const IDatabaseWrapper::Capabilities& GetDatabaseCapabilities() const = 0;
+
+      virtual int64_t IncrementGlobalProperty(GlobalProperty property,
+                                              int64_t increment,
+                                              bool shared) = 0;
     };
 
 
@@ -270,8 +323,6 @@
 
     virtual void FlushToDisk() = 0;
 
-    virtual bool HasFlushToDisk() const = 0;
-
     virtual ITransaction* StartTransaction(TransactionType type,
                                            IDatabaseListener& listener) = 0;
 
@@ -280,8 +331,6 @@
     virtual void Upgrade(unsigned int targetVersion,
                          IStorageArea& storageArea) = 0;
 
-    virtual bool HasRevisionsSupport() const = 0;
-
-    virtual bool HasLabelsSupport() const = 0;
+    virtual const IDatabaseWrapper::Capabilities& GetDatabaseCapabilities() const = 0;
   };
 }