comparison 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
comparison
equal deleted inserted replaced
133:b1d7d255fb73 134:cc3dc759c989
41 41
42 void ThrowException(bool log); 42 void ThrowException(bool log);
43 43
44 void Close(); 44 void Close();
45 45
46 bool RunAdvisoryLockStatement(const std::string& statement);
47
46 public: 48 public:
47 PostgreSQLDatabase(const PostgreSQLParameters& parameters) : 49 PostgreSQLDatabase(const PostgreSQLParameters& parameters) :
48 parameters_(parameters), 50 parameters_(parameters),
49 pg_(NULL) 51 pg_(NULL)
50 { 52 {
51 } 53 }
52 54
53 ~PostgreSQLDatabase(); 55 ~PostgreSQLDatabase();
54 56
55 void Open(); 57 void Open();
58
59 bool AcquireAdvisoryLock(int32_t lock);
60
61 bool ReleaseAdvisoryLock(int32_t lock);
56 62
57 void AdvisoryLock(int32_t lock); 63 void AdvisoryLock(int32_t lock);
58 64
59 void Execute(const std::string& sql); 65 void Execute(const std::string& sql);
60 66
68 } 74 }
69 75
70 virtual IPrecompiledStatement* Compile(const Query& query); 76 virtual IPrecompiledStatement* Compile(const Query& query);
71 77
72 virtual ITransaction* CreateTransaction(bool isImplicit); 78 virtual ITransaction* CreateTransaction(bool isImplicit);
79
80 class TransientAdvisoryLock
81 {
82 private:
83 PostgreSQLDatabase& database_;
84 int32_t lock_;
85
86 public:
87 TransientAdvisoryLock(PostgreSQLDatabase& database,
88 int32_t lock);
89
90 ~TransientAdvisoryLock();
91 };
73 }; 92 };
74 } 93 }