Add a guard against overlapping transactions.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Mon, 11 Oct 2010 14:59:36 +0000 (16:59 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Mon, 11 Oct 2010 14:59:36 +0000 (16:59 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
classes/xdb.php

index c353f54..8df9495 100644 (file)
@@ -194,8 +194,13 @@ class XDB
         return self::run($query);
     }
 
+    private static $inTransaction = false;
     public static function startTransaction()
     {
+        if (self::$inTransaction) {
+            throw new XDBException('START TRANSACTION', 'Already in a transaction');
+        }
+        self::$inTransaction = true;
         self::rawExecute('SET AUTOCOMMIT = 0');
         self::rawExecute('START TRANSACTION');
     }
@@ -204,12 +209,14 @@ class XDB
     {
         self::rawExecute('COMMIT');
         self::rawExecute('SET AUTOCOMMIT = 1');
+        self::$inTransaction = false;
     }
 
     public static function rollback()
     {
         self::rawExecute('ROLLBACK');
         self::rawExecute('SET AUTOCOMMIT = 1');
+        self::$inTransaction = false;
     }
 
     public static function runTransactionV($callback, array $args)