Mercurial > hg > orthanc-databases
diff Framework/MySQL/MySQLDatabase.cpp @ 237:35598014f140
refactoring to remove GlobalProperties.cpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 08 Apr 2021 19:09:04 +0200 |
parents | d1d2edbbe6fb |
children | c82c2cf84ae8 |
line wrap: on
line diff
--- a/Framework/MySQL/MySQLDatabase.cpp Thu Apr 08 12:00:01 2021 +0200 +++ b/Framework/MySQL/MySQLDatabase.cpp Thu Apr 08 19:09:04 2021 +0200 @@ -224,8 +224,8 @@ throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); } - db.Execute("DROP DATABASE " + database, false); - db.Execute("CREATE DATABASE " + database, false); + db.ExecuteMultiLines("DROP DATABASE " + database, false); + db.ExecuteMultiLines("CREATE DATABASE " + database, false); t.Commit(); } } @@ -478,8 +478,8 @@ } - void MySQLDatabase::Execute(const std::string& sql, - bool arobaseSeparator) + void MySQLDatabase::ExecuteMultiLines(const std::string& sql, + bool arobaseSeparator) { if (mysql_ == NULL) { @@ -527,6 +527,9 @@ { class MySQLImplicitTransaction : public ImplicitTransaction { + private: + MySQLDatabase& db_; + protected: virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, const Dictionary& parameters) @@ -539,6 +542,27 @@ { dynamic_cast<MySQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); } + + public: + MySQLImplicitTransaction(MySQLDatabase& db) : + db_(db) + { + } + + virtual bool DoesTableExist(const std::string& name) ORTHANC_OVERRIDE + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "An explicit transaction is needed"); + } + + virtual bool DoesTriggerExist(const std::string& name) ORTHANC_OVERRIDE + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "An explicit transaction is needed"); + } + + virtual void ExecuteMultiLines(const std::string& query) ORTHANC_OVERRIDE + { + db_.ExecuteMultiLines(query, false /* don't deal with arobases */); + } }; } @@ -553,7 +577,7 @@ switch (type) { case TransactionType_Implicit: - return new MySQLImplicitTransaction; + return new MySQLImplicitTransaction(*this); case TransactionType_ReadOnly: case TransactionType_ReadWrite: @@ -635,7 +659,7 @@ { std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); db->Open(); - db->Execute("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false); + db->ExecuteMultiLines("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false); return db.release(); }