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();
       }