diff Framework/MySQL/MySQLDatabase.h @ 135:e26690365c25

MySQL: Added an advisory lock to avoid race conditions during database setup
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 08 May 2019 21:09:18 +0200
parents 714c5d2bee76
children 52b3859ee0b7
line wrap: on
line diff
--- a/Framework/MySQL/MySQLDatabase.h	Wed May 08 20:21:13 2019 +0200
+++ b/Framework/MySQL/MySQLDatabase.h	Wed May 08 21:09:18 2019 +0200
@@ -44,6 +44,8 @@
     
     void Close();
 
+    bool RunAdvisoryLockStatement(const std::string& statement);
+
   public:
     MySQLDatabase(const MySQLParameters& parameters);
 
@@ -70,6 +72,10 @@
     bool LookupGlobalIntegerVariable(int64_t& value,
                                      const std::string& variable);
 
+    bool AcquireAdvisoryLock(int32_t lock);
+
+    bool ReleaseAdvisoryLock(int32_t lock);
+
     void AdvisoryLock(int32_t lock);
 
     void Execute(const std::string& sql,
@@ -93,5 +99,18 @@
     static void GlobalFinalization();
 
     static bool IsValidDatabaseIdentifier(const std::string& s);
+
+    class TransientAdvisoryLock
+    {
+    private:
+      MySQLDatabase&  database_;
+      int32_t         lock_;
+
+    public:
+      TransientAdvisoryLock(MySQLDatabase&  database,
+                            int32_t lock);
+
+      ~TransientAdvisoryLock();
+    };
   };
 }