comparison Framework/PostgreSQL/PostgreSQLDatabase.cpp @ 255:d663d9e44f8d

reintroduction of IDatabaseFactory into DatabaseManager
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 14 Apr 2021 17:57:08 +0200
parents 33fa478c119a
children cc7af42d4f23
comparison
equal deleted inserted replaced
254:8a4ce70f456a 255:d663d9e44f8d
323 { 323 {
324 database_.ReleaseAdvisoryLock(lock_); 324 database_.ReleaseAdvisoryLock(lock_);
325 } 325 }
326 326
327 327
328 PostgreSQLDatabase* PostgreSQLDatabase::OpenDatabaseConnection(const PostgreSQLParameters& parameters) 328 class PostgreSQLDatabase::Factory : public RetryDatabaseFactory
329 { 329 {
330 class Factory : public RetryDatabaseFactory 330 private:
331 { 331 PostgreSQLParameters parameters_;
332 private: 332
333 const PostgreSQLParameters& parameters_; 333 protected:
334 334 virtual IDatabase* TryOpen()
335 protected: 335 {
336 virtual IDatabase* TryOpen() 336 std::unique_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_));
337 { 337 db->Open();
338 std::unique_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_)); 338 return db.release();
339 db->Open(); 339 }
340 return db.release(); 340
341 } 341 public:
342 342 explicit Factory(const PostgreSQLParameters& parameters) :
343 public: 343 RetryDatabaseFactory(parameters.GetMaxConnectionRetries(),
344 explicit Factory(const PostgreSQLParameters& parameters) : 344 parameters.GetConnectionRetryInterval()),
345 RetryDatabaseFactory(parameters.GetMaxConnectionRetries(), 345 parameters_(parameters)
346 parameters.GetConnectionRetryInterval()), 346 {
347 parameters_(parameters) 347 }
348 { 348 };
349 } 349
350 }; 350
351 351 IDatabaseFactory* PostgreSQLDatabase::CreateDatabaseFactory(const PostgreSQLParameters& parameters)
352 {
353 return new Factory(parameters);
354 }
355
356
357 PostgreSQLDatabase* PostgreSQLDatabase::CreateDatabaseConnection(const PostgreSQLParameters& parameters)
358 {
352 Factory factory(parameters); 359 Factory factory(parameters);
353 return dynamic_cast<PostgreSQLDatabase*>(factory.Open()); 360 return dynamic_cast<PostgreSQLDatabase*>(factory.Open());
354 } 361 }
355 } 362 }