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