From c32d23f5a043665b038e5ff52621f21d5d7ea94a Mon Sep 17 00:00:00 2001 From: AlexeyDsov Date: Fri, 18 May 2012 18:48:21 +0400 Subject: [PATCH 1/2] CarefulDatabaseRunner and UnifiedContainer will use InnerTransaction --- main/Flow/CarefulDatabaseRunner.class.php | 23 ++++++------- .../UnifiedContainer.class.php | 32 +++---------------- 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/main/Flow/CarefulDatabaseRunner.class.php b/main/Flow/CarefulDatabaseRunner.class.php index f9f43f410a..94478eac33 100644 --- a/main/Flow/CarefulDatabaseRunner.class.php +++ b/main/Flow/CarefulDatabaseRunner.class.php @@ -14,8 +14,11 @@ **/ final class CarefulDatabaseRunner implements CarefulCommand { - private $command = null; - private $db = null; + private $command = null; + /** + * @var InnerTransaction + */ + private $transaction = null; private $running = false; @@ -33,9 +36,7 @@ public function run(Prototyped $subject, Form $form, HttpRequest $request) Assert::isFalse($this->running, 'command already running'); Assert::isTrue($subject instanceof DAOConnected); - $this->db = DBPool::getByDao($subject->dao()); - - $this->db->begin(); + $this->transaction = InnerTransaction::begin($subject->dao()); try { $mav = $this->command->run($subject, $form, $request); @@ -44,7 +45,7 @@ public function run(Prototyped $subject, Form $form, HttpRequest $request) return $mav; } catch (BaseException $e) { - $this->db->rollback(); + $this->transaction->rollback(); throw $e; } @@ -58,7 +59,7 @@ public function run(Prototyped $subject, Form $form, HttpRequest $request) public function commit() { if ($this->running) { - $this->db->commit(); + $this->transaction->commit(); $this->running = false; } @@ -72,7 +73,7 @@ public function rollback() { if ($this->running) { try { - $this->db->rollback(); + $this->transaction->rollback(); } catch (DatabaseException $e) { // keep silence } @@ -86,11 +87,7 @@ public function rollback() public function __destruct() { if ($this->running) { - try { - $this->db->rollback(); - } catch (BaseException $e) { - // fear of fatal error's - } + $this->rollback(); } } } diff --git a/main/UnifiedContainer/UnifiedContainer.class.php b/main/UnifiedContainer/UnifiedContainer.class.php index ee7d33a5bd..c8483b972b 100644 --- a/main/UnifiedContainer/UnifiedContainer.class.php +++ b/main/UnifiedContainer/UnifiedContainer.class.php @@ -299,34 +299,10 @@ public function save() } } - $db = DBPool::getByDao($this->getDao()); - - if (!$db->inTransaction()) { - $outerQueue = $db->isQueueActive(); - - if (!$outerQueue) - $db->queueStart(); - - $db->begin(); - - try { - $this->worker->sync($insert, $update, $delete); - - $db->commit(); - - if (!$outerQueue) - $db->queueFlush(); - } catch (DatabaseException $e) { - if (!$outerQueue) - $db->queueDrop()->queueStop(); - - $db->rollback(); - - throw $e; - } - } else { - $this->worker->sync($insert, $update, $delete); - } + InnerTransactionWrapper::create()-> + setDao($this->getDao())-> + setFunction(array($this->worker, 'sync'))-> + run($insert, $update, $delete); $this->clones = array(); $this->syncClones(); From 37162c52446206714a7a7f7545e42d61e7e5a3b8 Mon Sep 17 00:00:00 2001 From: AlexeyDsov Date: Wed, 24 Oct 2012 11:17:04 +0400 Subject: [PATCH 2/2] update doc/ChangeLog --- doc/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/ChangeLog b/doc/ChangeLog index 374360d6b9..893da219ef 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2012-24-10 Alexey S. Denisov + * main/Flow/CarefulDatabaseRunner.class.php + main/UnifiedContainer/UnifiedContainer.class.php: + CarefulDatabaseRunner and UnifiedContainer will use InnerTransaction + 2012-24-10 Alexey S. Denisov * global.inc.php.tpl main/Autoloader/Autoloader.class.php