Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 final class DBTransaction extends BaseTransaction
00018 {
00019 private $started = false;
00020
00021 public function __destruct()
00022 {
00023 if ($this->isStarted())
00024 $this->db->queryRaw("rollback;\n");
00025 }
00026
00030 public function setDB(DB $db)
00031 {
00032 if ($this->isStarted())
00033 throw new WrongStateException(
00034 'transaction already started, can not switch to another db'
00035 );
00036
00037 return parent::setDB($db);
00038 }
00039
00040 public function isStarted()
00041 {
00042 return $this->started;
00043 }
00044
00048 public function add(Query $query)
00049 {
00050 if (!$this->isStarted()) {
00051 $this->db->queryRaw($this->getBeginString());
00052 $this->started = true;
00053 }
00054
00055 $this->db->queryNull($query);
00056
00057 return $this;
00058 }
00059
00063 public function flush()
00064 {
00065 $this->started = false;
00066
00067 try {
00068 $this->db->queryRaw("commit;\n");
00069 } catch (DatabaseException $e) {
00070 $this->db->queryRaw("rollback;\n");
00071 throw $e;
00072 }
00073
00074 return $this;
00075 }
00076 }
00077 ?>