diff Framework/PostgreSQL/PostgreSQLDatabase.h @ 134:cc3dc759c989

Added an advisory lock to avoid race conditions during database setup
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 08 May 2019 20:21:13 +0200
parents 714c5d2bee76
children 4cd7e45b671e
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLDatabase.h	Fri Mar 01 12:56:13 2019 +0100
+++ b/Framework/PostgreSQL/PostgreSQLDatabase.h	Wed May 08 20:21:13 2019 +0200
@@ -43,6 +43,8 @@
 
     void Close();
 
+    bool RunAdvisoryLockStatement(const std::string& statement);
+
   public:
     PostgreSQLDatabase(const PostgreSQLParameters& parameters) :
     parameters_(parameters),
@@ -54,6 +56,10 @@
 
     void Open();
 
+    bool AcquireAdvisoryLock(int32_t lock);
+
+    bool ReleaseAdvisoryLock(int32_t lock);
+
     void AdvisoryLock(int32_t lock);
 
     void Execute(const std::string& sql);
@@ -70,5 +76,18 @@
     virtual IPrecompiledStatement* Compile(const Query& query);
 
     virtual ITransaction* CreateTransaction(bool isImplicit);
+
+    class TransientAdvisoryLock
+    {
+    private:
+      PostgreSQLDatabase&  database_;
+      int32_t              lock_;
+
+    public:
+      TransientAdvisoryLock(PostgreSQLDatabase&  database,
+                            int32_t lock);
+
+      ~TransientAdvisoryLock();
+    };
   };
 }