diff Framework/PostgreSQL/PostgreSQLTransaction.cpp @ 216:fbb52129158a

TransactionType given to PostgreSQLTransaction constructor
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 26 Mar 2021 17:47:56 +0100
parents ab96698c73a3
children d1b124d116c1
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLTransaction.cpp	Fri Mar 26 17:32:29 2021 +0100
+++ b/Framework/PostgreSQL/PostgreSQLTransaction.cpp	Fri Mar 26 17:47:56 2021 +0100
@@ -29,11 +29,12 @@
 
 namespace OrthancDatabases
 {
-  PostgreSQLTransaction::PostgreSQLTransaction(PostgreSQLDatabase& database) :
+  PostgreSQLTransaction::PostgreSQLTransaction(PostgreSQLDatabase& database,
+                                               TransactionType type) :
     database_(database),
     isOpen_(false)
   {
-    Begin();
+    Begin(type);
   }
 
 
@@ -55,7 +56,7 @@
   }
 
 
-  void PostgreSQLTransaction::Begin()
+  void PostgreSQLTransaction::Begin(TransactionType type)
   {
     if (isOpen_) 
     {
@@ -64,7 +65,21 @@
     }
 
     database_.Execute("BEGIN");
-    database_.Execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE");
+
+    switch (type)
+    {
+      case TransactionType_ReadWrite:
+        database_.Execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE");
+        break;
+
+      case TransactionType_ReadOnly:
+        database_.Execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY");
+        break;
+
+      default:
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+    }
+        
     isOpen_ = true;
   }