comparison 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
comparison
equal deleted inserted replaced
225:94c9908e6aca 226:a4918d57435c
29 #include <Logging.h> 29 #include <Logging.h>
30 30
31 31
32 namespace OrthancDatabases 32 namespace OrthancDatabases
33 { 33 {
34 IDatabase* PostgreSQLStorageArea::OpenInternal() 34 void PostgreSQLStorageArea::ConfigureDatabase(PostgreSQLDatabase& db,
35 const PostgreSQLParameters& parameters,
36 bool clearAll)
35 { 37 {
36 std::unique_ptr<PostgreSQLDatabase> db(new PostgreSQLDatabase(parameters_)); 38 if (parameters.HasLock())
37
38 db->Open();
39
40 if (parameters_.HasLock())
41 { 39 {
42 db->AdvisoryLock(POSTGRESQL_LOCK_STORAGE); 40 db.AdvisoryLock(POSTGRESQL_LOCK_STORAGE);
43 } 41 }
44 42
45 { 43 {
46 PostgreSQLDatabase::TransientAdvisoryLock lock(*db, POSTGRESQL_LOCK_DATABASE_SETUP); 44 PostgreSQLDatabase::TransientAdvisoryLock lock(db, POSTGRESQL_LOCK_DATABASE_SETUP);
47 45
48 if (clearAll_) 46 if (clearAll)
49 { 47 {
50 db->ClearAll(); 48 db.ClearAll();
51 } 49 }
52 50
53 { 51 {
54 PostgreSQLTransaction t(*db, TransactionType_ReadWrite); 52 PostgreSQLTransaction t(db, TransactionType_ReadWrite);
55 53
56 if (!db->DoesTableExist("StorageArea")) 54 if (!db.DoesTableExist("StorageArea"))
57 { 55 {
58 db->Execute("CREATE TABLE IF NOT EXISTS StorageArea(" 56 db.Execute("CREATE TABLE IF NOT EXISTS StorageArea("
59 "uuid VARCHAR NOT NULL PRIMARY KEY," 57 "uuid VARCHAR NOT NULL PRIMARY KEY,"
60 "content OID NOT NULL," 58 "content OID NOT NULL,"
61 "type INTEGER NOT NULL)"); 59 "type INTEGER NOT NULL)");
62 60
63 // Automatically remove the large objects associated with the table 61 // Automatically remove the large objects associated with the table
64 db->Execute("CREATE OR REPLACE RULE StorageAreaDelete AS ON DELETE " 62 db.Execute("CREATE OR REPLACE RULE StorageAreaDelete AS ON DELETE "
65 "TO StorageArea DO SELECT lo_unlink(old.content);"); 63 "TO StorageArea DO SELECT lo_unlink(old.content);");
66 } 64 }
67 65
68 t.Commit(); 66 t.Commit();
69 } 67 }
70 } 68 }
71
72 return db.release();
73 } 69 }
74 70
75 71
76 PostgreSQLStorageArea::PostgreSQLStorageArea(const PostgreSQLParameters& parameters) : 72 PostgreSQLStorageArea::PostgreSQLStorageArea(const PostgreSQLParameters& parameters,
77 StorageBackend(new Factory(*this)), 73 bool clearAll)
78 parameters_(parameters),
79 clearAll_(false)
80 { 74 {
75 std::unique_ptr<PostgreSQLDatabase> database(PostgreSQLDatabase::OpenDatabaseConnection(parameters));
76
77 if (database.get() == NULL)
78 {
79 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError);
80 }
81
82 ConfigureDatabase(*database, parameters, clearAll);
83 SetDatabase(database.release());
81 } 84 }
82 } 85 }