Mercurial > hg > orthanc-databases
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 } |