diff Framework/MySQL/MySQLDatabase.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 ee5858d438dc
children d1b124d116c1
line wrap: on
line diff
--- a/Framework/MySQL/MySQLDatabase.cpp	Thu Apr 01 19:18:19 2021 +0200
+++ b/Framework/MySQL/MySQLDatabase.cpp	Fri Apr 02 19:23:36 2021 +0200
@@ -21,11 +21,12 @@
 
 #include "MySQLDatabase.h"
 
+#include "../Common/ImplicitTransaction.h"
+#include "../Common/Integer64Value.h"
+#include "../Common/RetryDatabaseFactory.h"
 #include "MySQLResult.h"
 #include "MySQLStatement.h"
 #include "MySQLTransaction.h"
-#include "../Common/ImplicitTransaction.h"
-#include "../Common/Integer64Value.h"
 
 #include <Compatibility.h>  // For std::unique_ptr<>
 #include <Logging.h>
@@ -612,4 +613,33 @@
   {
     database_.ReleaseAdvisoryLock(lock_);
   }
+
+  
+  MySQLDatabase* MySQLDatabase::OpenDatabaseConnection(const MySQLParameters& parameters)
+  {
+    class Factory : public RetryDatabaseFactory
+    {
+    private:
+      const MySQLParameters&  parameters_;
+
+    protected:
+      virtual IDatabase* TryOpen()
+      {
+        std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_));
+        db->Open();
+        return db.release();
+      }
+      
+    public:
+      Factory(const MySQLParameters& parameters) :
+        RetryDatabaseFactory(parameters.GetMaxConnectionRetries(),
+                             parameters.GetConnectionRetryInterval()),
+        parameters_(parameters)
+      {
+      }
+    };
+
+    Factory factory(parameters);
+    return dynamic_cast<MySQLDatabase*>(factory.Open());
+  }
 }