diff PostgreSQL/Plugins/PostgreSQLStorageArea.cpp @ 226:a4918d57435c

DatabaseManager doesn't IDatabaseFactory anymore
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 02 Apr 2021 19:23:36 +0200
parents fbb52129158a
children 35598014f140
line wrap: on
line diff
--- a/PostgreSQL/Plugins/PostgreSQLStorageArea.cpp	Thu Apr 01 19:18:19 2021 +0200
+++ b/PostgreSQL/Plugins/PostgreSQLStorageArea.cpp	Fri Apr 02 19:23:36 2021 +0200
@@ -31,52 +31,55 @@
 
 namespace OrthancDatabases
 {
-  IDatabase* PostgreSQLStorageArea::OpenInternal()
+  void PostgreSQLStorageArea::ConfigureDatabase(PostgreSQLDatabase& db,
+                                                const PostgreSQLParameters& parameters,
+                                                bool clearAll)
   {
-    std::unique_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_));
-
-    db->Open();
-
-    if (parameters_.HasLock())
+    if (parameters.HasLock())
     {
-      db->AdvisoryLock(POSTGRESQL_LOCK_STORAGE);
+      db.AdvisoryLock(POSTGRESQL_LOCK_STORAGE);
     }
 
     {
-      PostgreSQLDatabase::TransientAdvisoryLock lock(*db, POSTGRESQL_LOCK_DATABASE_SETUP);
+      PostgreSQLDatabase::TransientAdvisoryLock lock(db, POSTGRESQL_LOCK_DATABASE_SETUP);
 
-      if (clearAll_)
+      if (clearAll)
       {
-        db->ClearAll();
+        db.ClearAll();
       }
 
       {
-        PostgreSQLTransaction t(*db, TransactionType_ReadWrite);
+        PostgreSQLTransaction t(db, TransactionType_ReadWrite);
 
-        if (!db->DoesTableExist("StorageArea"))
+        if (!db.DoesTableExist("StorageArea"))
         {
-          db->Execute("CREATE TABLE IF NOT EXISTS StorageArea("
-                      "uuid VARCHAR NOT NULL PRIMARY KEY,"
-                      "content OID NOT NULL,"
-                      "type INTEGER NOT NULL)");
-
+          db.Execute("CREATE TABLE IF NOT EXISTS StorageArea("
+                     "uuid VARCHAR NOT NULL PRIMARY KEY,"
+                     "content OID NOT NULL,"
+                     "type INTEGER NOT NULL)");
+          
           // Automatically remove the large objects associated with the table
-          db->Execute("CREATE OR REPLACE RULE StorageAreaDelete AS ON DELETE "
-                      "TO StorageArea DO SELECT lo_unlink(old.content);");
+          db.Execute("CREATE OR REPLACE RULE StorageAreaDelete AS ON DELETE "
+                     "TO StorageArea DO SELECT lo_unlink(old.content);");
         }
-
+        
         t.Commit();
       }
     }
-
-    return db.release();
   }
 
 
-  PostgreSQLStorageArea::PostgreSQLStorageArea(const PostgreSQLParameters& parameters) :
-    StorageBackend(new Factory(*this)),
-    parameters_(parameters),
-    clearAll_(false)
+  PostgreSQLStorageArea::PostgreSQLStorageArea(const PostgreSQLParameters& parameters,
+                                               bool clearAll)
   {
+    std::unique_ptr<PostgreSQLDatabase> database(PostgreSQLDatabase::OpenDatabaseConnection(parameters));
+    
+    if (database.get() == NULL)
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
+    }
+    
+    ConfigureDatabase(*database, parameters, clearAll);
+    SetDatabase(database.release());
   }
 }