diff Framework/PostgreSQL/PostgreSQLParameters.cpp @ 432:8b7c1c423367 pg-transactions

new 'TransactionMode' config + rewrote ResourceDeletedFunc to avoid IF/THEN/ELSE pattern
author Alain Mazy <am@osimis.io>
date Mon, 11 Dec 2023 14:39:27 +0100
parents dbf811b1bb43
children 2f3b0688548e
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLParameters.cpp	Thu Dec 07 12:13:43 2023 +0100
+++ b/Framework/PostgreSQL/PostgreSQLParameters.cpp	Mon Dec 11 14:39:27 2023 +0100
@@ -42,8 +42,6 @@
     lock_ = true;
     maxConnectionRetries_ = 10;
     connectionRetryInterval_ = 5;
-    readWriteTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ WRITE";
-    readOnlyTransactionStatement_ = "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE READ ONLY";
     isVerboseEnabled_ = false;
   }
 
@@ -102,16 +100,23 @@
     maxConnectionRetries_ = configuration.GetUnsignedIntegerValue("MaximumConnectionRetries", 10);
     connectionRetryInterval_ = configuration.GetUnsignedIntegerValue("ConnectionRetryInterval", 5);
 
-    if (configuration.LookupStringValue(s, "ReadWriteTransactionStatement"))
+    std::string transactionMode = configuration.GetStringValue("TransactionMode", "SERIALIZABLE");
+    if (transactionMode == "DEFAULT")
     {
-      SetReadWriteTransactionStatement(s);
+      SetIsolationMode(IsolationMode_DbDefault);
+    }
+    else if (transactionMode == "READ COMMITTED")
+    {
+      SetIsolationMode(IsolationMode_ReadCommited);
     }
-
-    if (configuration.LookupStringValue(s, "ReadOnlyTransactionStatement"))
+    else if (transactionMode == "SERIALIZABLE")
     {
-      SetReadOnlyTransactionStatement(s);
+      SetIsolationMode(IsolationMode_Serializable);
     }
-
+    else
+    {
+      throw Orthanc::OrthancException(Orthanc::ErrorCode_BadParameterType, std::string("Invalid value for 'TransactionMode': ") + transactionMode);
+    }
   }