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