Improved transactions support (multilevel).
[fa-stable.git] / includes / db / sql_functions.inc
index 0fa479dc2b946754157a383025bd3ef93d70e234..2e5a28f4595abf9a2d3b236247930603c5fbba94 100644 (file)
 //
 //     General database functions common for all modules.
 //
-//-------------------------------------------------------------------  
+//-------------------------------------------------------------------
+// Multilevel transaction control.
+//
+
 function begin_transaction()
 {
-       db_query("BEGIN", "could not start a transaction");
+       global $transaction_level; // set in set_global_connection()
+
+       if (!$transaction_level) {
+               error_log('begin');
+               db_query("BEGIN", "could not start a transaction");
+       }
+       $transaction_level++;
+       error_log("level:$transaction_level");
 }
 
 function commit_transaction()
 {
-       db_query("COMMIT", "could not commit a transaction");
+       global $transaction_level;
+
+       $transaction_level--;
+
+       if (!$transaction_level) {
+               error_log('commit');
+               db_query("COMMIT", "could not commit a transaction");
+       }
+       error_log("level:$transaction_level");
 }
 
+/*
+       This function is called on end of script execution to cancel
+       all aborted transactions (if any)
+*/
 function cancel_transaction()
 {
-       db_query("ROLLBACK", "could not cancel a transaction"); 
+       global $transaction_level;
+
+       if ($transaction_level) {
+               error_log('rollback');
+               db_query("ROLLBACK", "could not cancel a transaction"); 
+       } else
+               error_log("no transactions");
+
 }
+
 //-----------------------------------------------------------------------------
 //     Update record activity status.
 //