Mercurial > hg > orthanc-databases
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()); + } }