# HG changeset patch # User Sebastien Jodogne # Date 1616776349 -3600 # Node ID b40b30075c5121f7fb2293b4f02f1784a7b47c4f # Parent ab96698c73a3b5ed1980fed1523c3f87a2290b93 added TransactionType_Implicit diff -r ab96698c73a3 -r b40b30075c51 Framework/Common/DatabaseManager.cpp --- a/Framework/Common/DatabaseManager.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/Common/DatabaseManager.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -165,7 +165,7 @@ try { - transaction_.reset(GetDatabase().CreateTransaction(true)); + transaction_.reset(GetDatabase().CreateTransaction(TransactionType_Implicit)); } catch (Orthanc::OrthancException& e) { @@ -226,7 +226,7 @@ throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); } - transaction_.reset(GetDatabase().CreateTransaction(false)); + transaction_.reset(GetDatabase().CreateTransaction(type)); } catch (Orthanc::OrthancException& e) { diff -r ab96698c73a3 -r b40b30075c51 Framework/Common/DatabasesEnumerations.h --- a/Framework/Common/DatabasesEnumerations.h Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/Common/DatabasesEnumerations.h Fri Mar 26 17:32:29 2021 +0100 @@ -42,7 +42,8 @@ enum TransactionType { - TransactionType_ReadOnly, - TransactionType_ReadWrite + TransactionType_ReadWrite, + TransactionType_ReadOnly, // Should only arise with Orthanc SDK >= 1.9.2 in the index plugin + TransactionType_Implicit // Should only arise with Orthanc SDK <= 1.9.1 }; } diff -r ab96698c73a3 -r b40b30075c51 Framework/Common/IDatabase.h --- a/Framework/Common/IDatabase.h Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/Common/IDatabase.h Fri Mar 26 17:32:29 2021 +0100 @@ -38,6 +38,6 @@ virtual IPrecompiledStatement* Compile(const Query& query) = 0; - virtual ITransaction* CreateTransaction(bool isImplicit) = 0; + virtual ITransaction* CreateTransaction(TransactionType type) = 0; }; } diff -r ab96698c73a3 -r b40b30075c51 Framework/MySQL/MySQLDatabase.cpp --- a/Framework/MySQL/MySQLDatabase.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/MySQL/MySQLDatabase.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -518,9 +518,6 @@ { class MySQLImplicitTransaction : public ImplicitTransaction { - private: - MySQLDatabase& db_; - protected: virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, const Dictionary& parameters) @@ -533,30 +530,31 @@ { dynamic_cast(statement).ExecuteWithoutResult(*this, parameters); } - - public: - explicit MySQLImplicitTransaction(MySQLDatabase& db) : - db_(db) - { - } }; } - ITransaction* MySQLDatabase::CreateTransaction(bool isImplicit) + ITransaction* MySQLDatabase::CreateTransaction(TransactionType type) { if (mysql_ == NULL) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); } - if (isImplicit) + switch (type) { - return new MySQLImplicitTransaction(*this); - } - else - { - return new MySQLTransaction(*this); + case TransactionType_Implicit: + return new MySQLImplicitTransaction; + + case TransactionType_ReadOnly: + // TODO => READ-ONLY + return new MySQLTransaction(*this); + + case TransactionType_ReadWrite: + return new MySQLTransaction(*this); + + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); } } diff -r ab96698c73a3 -r b40b30075c51 Framework/MySQL/MySQLDatabase.h --- a/Framework/MySQL/MySQLDatabase.h Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/MySQL/MySQLDatabase.h Fri Mar 26 17:32:29 2021 +0100 @@ -98,7 +98,7 @@ virtual IPrecompiledStatement* Compile(const Query& query) ORTHANC_OVERRIDE; - virtual ITransaction* CreateTransaction(bool isImplicit) ORTHANC_OVERRIDE; + virtual ITransaction* CreateTransaction(TransactionType type) ORTHANC_OVERRIDE; static void GlobalFinalization(); diff -r ab96698c73a3 -r b40b30075c51 Framework/PostgreSQL/PostgreSQLDatabase.cpp --- a/Framework/PostgreSQL/PostgreSQLDatabase.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/PostgreSQL/PostgreSQLDatabase.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -232,9 +232,6 @@ { class PostgreSQLImplicitTransaction : public ImplicitTransaction { - private: - PostgreSQLDatabase& db_; - protected: virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, const Dictionary& parameters) @@ -247,25 +244,26 @@ { dynamic_cast(statement).ExecuteWithoutResult(*this, parameters); } - - public: - explicit PostgreSQLImplicitTransaction(PostgreSQLDatabase& db) : - db_(db) - { - } }; } - ITransaction* PostgreSQLDatabase::CreateTransaction(bool isImplicit) + ITransaction* PostgreSQLDatabase::CreateTransaction(TransactionType type) { - if (isImplicit) + switch (type) { - return new PostgreSQLImplicitTransaction(*this); - } - else - { - return new PostgreSQLTransaction(*this); + case TransactionType_Implicit: + return new PostgreSQLImplicitTransaction; + + case TransactionType_ReadOnly: + // TODO => READ-ONLY + return new PostgreSQLTransaction(*this); + + case TransactionType_ReadWrite: + return new PostgreSQLTransaction(*this); + + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); } } diff -r ab96698c73a3 -r b40b30075c51 Framework/PostgreSQL/PostgreSQLDatabase.h --- a/Framework/PostgreSQL/PostgreSQLDatabase.h Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/PostgreSQL/PostgreSQLDatabase.h Fri Mar 26 17:32:29 2021 +0100 @@ -75,7 +75,7 @@ virtual IPrecompiledStatement* Compile(const Query& query) ORTHANC_OVERRIDE; - virtual ITransaction* CreateTransaction(bool isImplicit) ORTHANC_OVERRIDE; + virtual ITransaction* CreateTransaction(TransactionType type) ORTHANC_OVERRIDE; class TransientAdvisoryLock { diff -r ab96698c73a3 -r b40b30075c51 Framework/SQLite/SQLiteDatabase.cpp --- a/Framework/SQLite/SQLiteDatabase.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/SQLite/SQLiteDatabase.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -48,9 +48,6 @@ { class SQLiteImplicitTransaction : public ImplicitTransaction { - private: - SQLiteDatabase& db_; - protected: virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, const Dictionary& parameters) ORTHANC_OVERRIDE @@ -63,24 +60,22 @@ { dynamic_cast(statement).ExecuteWithoutResult(*this, parameters); } - - public: - explicit SQLiteImplicitTransaction(SQLiteDatabase& db) : - db_(db) - { - } }; } - ITransaction* SQLiteDatabase::CreateTransaction(bool isImplicit) + ITransaction* SQLiteDatabase::CreateTransaction(TransactionType type) { - if (isImplicit) + switch (type) { - return new SQLiteImplicitTransaction(*this); - } - else - { - return new SQLiteTransaction(*this); + case TransactionType_Implicit: + return new SQLiteImplicitTransaction; + + case TransactionType_ReadOnly: + case TransactionType_ReadWrite: + return new SQLiteTransaction(*this); + + default: + throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); } } } diff -r ab96698c73a3 -r b40b30075c51 Framework/SQLite/SQLiteDatabase.h --- a/Framework/SQLite/SQLiteDatabase.h Thu Mar 25 13:56:26 2021 +0100 +++ b/Framework/SQLite/SQLiteDatabase.h Fri Mar 26 17:32:29 2021 +0100 @@ -71,6 +71,6 @@ virtual IPrecompiledStatement* Compile(const Query& query) ORTHANC_OVERRIDE; - virtual ITransaction* CreateTransaction(bool isImplicit) ORTHANC_OVERRIDE; + virtual ITransaction* CreateTransaction(TransactionType type) ORTHANC_OVERRIDE; }; } diff -r ab96698c73a3 -r b40b30075c51 MySQL/UnitTests/UnitTestsMain.cpp --- a/MySQL/UnitTests/UnitTestsMain.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/MySQL/UnitTests/UnitTestsMain.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -219,7 +219,7 @@ } { - std::unique_ptr t(db.CreateTransaction(false)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_ReadWrite)); ASSERT_FALSE(t->IsImplicit()); } @@ -227,7 +227,7 @@ OrthancDatabases::Query query("CREATE TABLE test(id INT)", false); std::unique_ptr s(db.Compile(query)); - std::unique_ptr t(db.CreateTransaction(true)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_Implicit)); ASSERT_TRUE(t->IsImplicit()); ASSERT_THROW(t->Commit(), Orthanc::OrthancException); ASSERT_THROW(t->Rollback(), Orthanc::OrthancException); @@ -245,7 +245,7 @@ OrthancDatabases::Query query("CREATE TABLE test2(id INT)", false); std::unique_ptr s(db.Compile(query)); - std::unique_ptr t(db.CreateTransaction(true)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_Implicit)); OrthancDatabases::Dictionary args; t->ExecuteWithoutResult(*s, args); diff -r ab96698c73a3 -r b40b30075c51 PostgreSQL/UnitTests/PostgreSQLTests.cpp --- a/PostgreSQL/UnitTests/PostgreSQLTests.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/PostgreSQL/UnitTests/PostgreSQLTests.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -406,7 +406,7 @@ ASSERT_FALSE(db->DoesTableExist("test2")); { - std::unique_ptr t(db->CreateTransaction(false)); + std::unique_ptr t(db->CreateTransaction(TransactionType_ReadWrite)); ASSERT_FALSE(t->IsImplicit()); } @@ -414,7 +414,7 @@ Query query("CREATE TABLE test(id INT)", false); std::unique_ptr s(db->Compile(query)); - std::unique_ptr t(db->CreateTransaction(true)); + std::unique_ptr t(db->CreateTransaction(TransactionType_Implicit)); ASSERT_TRUE(t->IsImplicit()); ASSERT_THROW(t->Commit(), Orthanc::OrthancException); ASSERT_THROW(t->Rollback(), Orthanc::OrthancException); @@ -432,7 +432,7 @@ Query query("CREATE TABLE test2(id INT)", false); std::unique_ptr s(db->Compile(query)); - std::unique_ptr t(db->CreateTransaction(true)); + std::unique_ptr t(db->CreateTransaction(TransactionType_Implicit)); Dictionary args; t->ExecuteWithoutResult(*s, args); diff -r ab96698c73a3 -r b40b30075c51 SQLite/UnitTests/UnitTestsMain.cpp --- a/SQLite/UnitTests/UnitTestsMain.cpp Thu Mar 25 13:56:26 2021 +0100 +++ b/SQLite/UnitTests/UnitTestsMain.cpp Fri Mar 26 17:32:29 2021 +0100 @@ -69,7 +69,7 @@ ASSERT_FALSE(db.DoesTableExist("test2")); { - std::unique_ptr t(db.CreateTransaction(false)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_ReadWrite)); ASSERT_FALSE(t->IsImplicit()); } @@ -77,7 +77,7 @@ OrthancDatabases::Query query("CREATE TABLE test(id INT)", false); std::unique_ptr s(db.Compile(query)); - std::unique_ptr t(db.CreateTransaction(true)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_Implicit)); ASSERT_TRUE(t->IsImplicit()); ASSERT_THROW(t->Commit(), Orthanc::OrthancException); ASSERT_THROW(t->Rollback(), Orthanc::OrthancException); @@ -95,7 +95,7 @@ OrthancDatabases::Query query("CREATE TABLE test2(id INT)", false); std::unique_ptr s(db.Compile(query)); - std::unique_ptr t(db.CreateTransaction(true)); + std::unique_ptr t(db.CreateTransaction(OrthancDatabases::TransactionType_Implicit)); OrthancDatabases::Dictionary args; t->ExecuteWithoutResult(*s, args);