Mercurial > hg > orthanc-databases
comparison Framework/PostgreSQL/PostgreSQLDatabase.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 | a4918d57435c |
children | 33fa478c119a |
comparison
equal
deleted
inserted
replaced
236:d1d2edbbe6fb | 237:35598014f140 |
---|---|
153 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | 153 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); |
154 } | 154 } |
155 } | 155 } |
156 | 156 |
157 | 157 |
158 void PostgreSQLDatabase::Execute(const std::string& sql) | 158 void PostgreSQLDatabase::ExecuteMultiLines(const std::string& sql) |
159 { | 159 { |
160 LOG(TRACE) << "PostgreSQL: " << sql; | 160 LOG(TRACE) << "PostgreSQL: " << sql; |
161 Open(); | 161 Open(); |
162 | 162 |
163 PGresult* result = PQexec(reinterpret_cast<PGconn*>(pg_), sql.c_str()); | 163 PGresult* result = PQexec(reinterpret_cast<PGconn*>(pg_), sql.c_str()); |
208 void PostgreSQLDatabase::ClearAll() | 208 void PostgreSQLDatabase::ClearAll() |
209 { | 209 { |
210 PostgreSQLTransaction transaction(*this, TransactionType_ReadWrite); | 210 PostgreSQLTransaction transaction(*this, TransactionType_ReadWrite); |
211 | 211 |
212 // Remove all the large objects | 212 // Remove all the large objects |
213 Execute("SELECT lo_unlink(loid) FROM (SELECT DISTINCT loid FROM pg_catalog.pg_largeobject) as loids;"); | 213 ExecuteMultiLines("SELECT lo_unlink(loid) FROM (SELECT DISTINCT loid FROM pg_catalog.pg_largeobject) as loids;"); |
214 | 214 |
215 // http://stackoverflow.com/a/21247009/881731 | 215 // http://stackoverflow.com/a/21247009/881731 |
216 Execute("DROP SCHEMA public CASCADE;"); | 216 ExecuteMultiLines("DROP SCHEMA public CASCADE;"); |
217 Execute("CREATE SCHEMA public;"); | 217 ExecuteMultiLines("CREATE SCHEMA public;"); |
218 Execute("GRANT ALL ON SCHEMA public TO postgres;"); | 218 ExecuteMultiLines("GRANT ALL ON SCHEMA public TO postgres;"); |
219 Execute("GRANT ALL ON SCHEMA public TO public;"); | 219 ExecuteMultiLines("GRANT ALL ON SCHEMA public TO public;"); |
220 Execute("COMMENT ON SCHEMA public IS 'standard public schema';"); | 220 ExecuteMultiLines("COMMENT ON SCHEMA public IS 'standard public schema';"); |
221 | 221 |
222 transaction.Commit(); | 222 transaction.Commit(); |
223 } | 223 } |
224 | 224 |
225 | 225 |
231 | 231 |
232 namespace | 232 namespace |
233 { | 233 { |
234 class PostgreSQLImplicitTransaction : public ImplicitTransaction | 234 class PostgreSQLImplicitTransaction : public ImplicitTransaction |
235 { | 235 { |
236 private: | |
237 PostgreSQLDatabase& db_; | |
238 | |
236 protected: | 239 protected: |
237 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, | 240 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, |
238 const Dictionary& parameters) | 241 const Dictionary& parameters) |
239 { | 242 { |
240 return dynamic_cast<PostgreSQLStatement&>(statement).Execute(*this, parameters); | 243 return dynamic_cast<PostgreSQLStatement&>(statement).Execute(*this, parameters); |
243 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, | 246 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, |
244 const Dictionary& parameters) | 247 const Dictionary& parameters) |
245 { | 248 { |
246 dynamic_cast<PostgreSQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); | 249 dynamic_cast<PostgreSQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); |
247 } | 250 } |
251 | |
252 public: | |
253 PostgreSQLImplicitTransaction(PostgreSQLDatabase& db) : | |
254 db_(db) | |
255 { | |
256 } | |
257 | |
258 virtual bool DoesTableExist(const std::string& name) ORTHANC_OVERRIDE | |
259 { | |
260 return db_.DoesTableExist(name.c_str()); | |
261 } | |
262 | |
263 virtual bool DoesTriggerExist(const std::string& name) ORTHANC_OVERRIDE | |
264 { | |
265 return false; | |
266 } | |
267 | |
268 virtual void ExecuteMultiLines(const std::string& query) ORTHANC_OVERRIDE | |
269 { | |
270 db_.ExecuteMultiLines(query); | |
271 } | |
248 }; | 272 }; |
249 } | 273 } |
250 | 274 |
251 | 275 |
252 ITransaction* PostgreSQLDatabase::CreateTransaction(TransactionType type) | 276 ITransaction* PostgreSQLDatabase::CreateTransaction(TransactionType type) |
253 { | 277 { |
254 switch (type) | 278 switch (type) |
255 { | 279 { |
256 case TransactionType_Implicit: | 280 case TransactionType_Implicit: |
257 return new PostgreSQLImplicitTransaction; | 281 return new PostgreSQLImplicitTransaction(*this); |
258 | 282 |
259 case TransactionType_ReadWrite: | 283 case TransactionType_ReadWrite: |
260 case TransactionType_ReadOnly: | 284 case TransactionType_ReadOnly: |
261 return new PostgreSQLTransaction(*this, type); | 285 return new PostgreSQLTransaction(*this, type); |
262 | 286 |