Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class CarefulDatabaseRunner implements CarefulCommand
00016 {
00017 private $command = null;
00018 private $db = null;
00019
00020 private $running = false;
00021
00022 final public function __construct(EditorCommand $command)
00023 {
00024 $this->command = $command;
00025 }
00026
00031 public function run(Prototyped $subject, Form $form, HttpRequest $request)
00032 {
00033 Assert::isFalse($this->running, 'command already running');
00034 Assert::isTrue($subject instanceof DAOConnected);
00035
00036 $this->db = DBPool::getByDao($subject->dao());
00037
00038 $this->db->begin();
00039
00040 try {
00041 $mav = $this->command->run($subject, $form, $request);
00042
00043 $this->running = true;
00044
00045 return $mav;
00046 } catch (BaseException $e) {
00047 $this->db->rollback();
00048
00049 throw $e;
00050 }
00051
00052 Assert::isUnreachable();
00053 }
00054
00058 public function commit()
00059 {
00060 if ($this->running) {
00061 $this->db->commit();
00062 $this->running = false;
00063 }
00064
00065 return $this;
00066 }
00067
00071 public function rollback()
00072 {
00073 if ($this->running) {
00074 try {
00075 $this->db->rollback();
00076 } catch (DatabaseException $e) {
00077
00078 }
00079
00080 $this->running = false;
00081 }
00082
00083 return $this;
00084 }
00085
00086 public function __destruct()
00087 {
00088 if ($this->running) {
00089 try {
00090 $this->db->rollback();
00091 } catch (BaseException $e) {
00092
00093 }
00094 }
00095 }
00096 }
00097 ?>