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