diff Framework/PostgreSQL/PostgreSQLDatabase.cpp @ 226:a4918d57435c

DatabaseManager doesn't IDatabaseFactory anymore
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 02 Apr 2021 19:23:36 +0200
parents fbb52129158a
children 35598014f140
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLDatabase.cpp	Thu Apr 01 19:18:19 2021 +0200
+++ b/Framework/PostgreSQL/PostgreSQLDatabase.cpp	Fri Apr 02 19:23:36 2021 +0200
@@ -22,10 +22,11 @@
 #include "PostgreSQLIncludes.h"  // Must be the first
 #include "PostgreSQLDatabase.h"
 
+#include "../Common/ImplicitTransaction.h"
+#include "../Common/RetryDatabaseFactory.h"
 #include "PostgreSQLResult.h"
 #include "PostgreSQLStatement.h"
 #include "PostgreSQLTransaction.h"
-#include "../Common/ImplicitTransaction.h"
 
 #include <Logging.h>
 #include <OrthancException.h>
@@ -298,4 +299,33 @@
   {
     database_.ReleaseAdvisoryLock(lock_);
   }
+
+
+  PostgreSQLDatabase* PostgreSQLDatabase::OpenDatabaseConnection(const PostgreSQLParameters& parameters)
+  {
+    class Factory : public RetryDatabaseFactory
+    {
+    private:
+      const PostgreSQLParameters&  parameters_;
+
+    protected:
+      virtual IDatabase* TryOpen()
+      {
+        std::unique_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_));
+        db->Open();
+        return db.release();
+      }
+      
+    public:
+      Factory(const PostgreSQLParameters& parameters) :
+        RetryDatabaseFactory(parameters.GetMaxConnectionRetries(),
+                             parameters.GetConnectionRetryInterval()),
+        parameters_(parameters)
+      {
+      }
+    };
+
+    Factory factory(parameters);
+    return dynamic_cast<PostgreSQLDatabase*>(factory.Open());
+  }
 }