Mercurial > hg > orthanc-databases
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 } |