Mercurial > hg > orthanc-databases
diff MySQL/Plugins/MySQLStorageArea.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 | ee5858d438dc |
children | 35598014f140 |
line wrap: on
line diff
--- a/MySQL/Plugins/MySQLStorageArea.cpp Thu Apr 01 19:18:19 2021 +0200 +++ b/MySQL/Plugins/MySQLStorageArea.cpp Fri Apr 02 19:23:36 2021 +0200 @@ -33,18 +33,16 @@ namespace OrthancDatabases { - IDatabase* MySQLStorageArea::OpenInternal() + void MySQLStorageArea::ConfigureDatabase(MySQLDatabase& db, + const MySQLParameters& parameters, + bool clearAll) { - std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); - - db->Open(); - { - MySQLDatabase::TransientAdvisoryLock lock(*db, MYSQL_LOCK_DATABASE_SETUP); - MySQLTransaction t(*db, TransactionType_ReadWrite); + MySQLDatabase::TransientAdvisoryLock lock(db, MYSQL_LOCK_DATABASE_SETUP); + MySQLTransaction t(db, TransactionType_ReadWrite); int64_t size; - if (db->LookupGlobalIntegerVariable(size, "max_allowed_packet")) + if (db.LookupGlobalIntegerVariable(size, "max_allowed_packet")) { int mb = boost::math::iround(static_cast<double>(size) / static_cast<double>(1024 * 1024)); @@ -59,15 +57,15 @@ << "files that can be stored in this MySQL server"; } - if (clearAll_) + if (clearAll) { - db->Execute("DROP TABLE IF EXISTS StorageArea", false); + db.Execute("DROP TABLE IF EXISTS StorageArea", false); } - db->Execute("CREATE TABLE IF NOT EXISTS StorageArea(" - "uuid VARCHAR(64) NOT NULL PRIMARY KEY," - "content LONGBLOB NOT NULL," - "type INTEGER NOT NULL)", false); + db.Execute("CREATE TABLE IF NOT EXISTS StorageArea(" + "uuid VARCHAR(64) NOT NULL PRIMARY KEY," + "content LONGBLOB NOT NULL," + "type INTEGER NOT NULL)", false); t.Commit(); } @@ -80,19 +78,24 @@ * previously-acquired locks. * https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html **/ - if (parameters_.HasLock()) + if (parameters.HasLock()) { - db->AdvisoryLock(MYSQL_LOCK_STORAGE); + db.AdvisoryLock(MYSQL_LOCK_STORAGE); } - - return db.release(); } - MySQLStorageArea::MySQLStorageArea(const MySQLParameters& parameters) : - StorageBackend(new Factory(*this)), - parameters_(parameters), - clearAll_(false) + MySQLStorageArea::MySQLStorageArea(const MySQLParameters& parameters, + bool clearAll) { + std::unique_ptr<MySQLDatabase> database(MySQLDatabase::OpenDatabaseConnection(parameters)); + + if (database.get() == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); + } + + ConfigureDatabase(*database, parameters, clearAll); + SetDatabase(database.release()); } }