comparison Framework/MySQL/MySQLDatabase.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 b8ba198a8df3
comparison
equal deleted inserted replaced
254:8a4ce70f456a 255:d663d9e44f8d
659 { 659 {
660 database_.ReleaseAdvisoryLock(lock_); 660 database_.ReleaseAdvisoryLock(lock_);
661 } 661 }
662 662
663 663
664 MySQLDatabase* MySQLDatabase::OpenDatabaseConnection(const MySQLParameters& parameters) 664 class MySQLDatabase::Factory : public RetryDatabaseFactory
665 { 665 {
666 class Factory : public RetryDatabaseFactory 666 private:
667 { 667 MySQLParameters parameters_;
668 private: 668
669 const MySQLParameters& parameters_; 669 protected:
670 670 virtual IDatabase* TryOpen()
671 protected: 671 {
672 virtual IDatabase* TryOpen() 672 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_));
673 { 673 db->Open();
674 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); 674 db->ExecuteMultiLines("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false);
675 db->Open(); 675 return db.release();
676 db->ExecuteMultiLines("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false); 676 }
677 return db.release();
678 }
679 677
680 public: 678 public:
681 explicit Factory(const MySQLParameters& parameters) : 679 explicit Factory(const MySQLParameters& parameters) :
682 RetryDatabaseFactory(parameters.GetMaxConnectionRetries(), 680 RetryDatabaseFactory(parameters.GetMaxConnectionRetries(),
683 parameters.GetConnectionRetryInterval()), 681 parameters.GetConnectionRetryInterval()),
684 parameters_(parameters) 682 parameters_(parameters)
685 { 683 {
686 } 684 }
687 }; 685 };
688 686
687
688 IDatabaseFactory* MySQLDatabase::CreateDatabaseFactory(const MySQLParameters& parameters)
689 {
690 return new Factory(parameters);
691 }
692
693
694 MySQLDatabase* MySQLDatabase::CreateDatabaseConnection(const MySQLParameters& parameters)
695 {
689 Factory factory(parameters); 696 Factory factory(parameters);
690 return dynamic_cast<MySQLDatabase*>(factory.Open()); 697 return dynamic_cast<MySQLDatabase*>(factory.Open());
691 } 698 }
692 } 699 }