From 2e11cb87effddefdaed6da3e1951c935096ab361 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Mon, 11 Oct 2010 16:59:36 +0200 Subject: [PATCH] Add a guard against overlapping transactions. Signed-off-by: Florent Bruneau --- classes/xdb.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/classes/xdb.php b/classes/xdb.php index c353f54..8df9495 100644 --- a/classes/xdb.php +++ b/classes/xdb.php @@ -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) -- 2.1.4