This commit is contained in:
2023-04-06 22:58:43 +08:00
parent 84d1701ff7
commit 6fe699413d
+24 -11
View File
@@ -56,6 +56,9 @@ class Connection extends Component
public array $pool = ['max' => 10, 'min' => 1]; public array $pool = ['max' => 10, 'min' => 1];
private int $storey = 0;
/** /**
* @var bool * @var bool
* enable database cache * enable database cache
@@ -207,7 +210,10 @@ class Connection extends Component
public function beginTransaction(): static public function beginTransaction(): static
{ {
$pdo = $this->getTransactionClient(); $pdo = $this->getTransactionClient();
$pdo->beginTransaction(); if ($this->storey == 0) {
$pdo->beginTransaction();
}
$this->storey++;
return $this; return $this;
} }
@@ -223,6 +229,7 @@ class Connection extends Component
} }
$pdo = Context::get($this->cds); $pdo = Context::get($this->cds);
if ($pdo === null) { if ($pdo === null) {
/** @var PDO $pdo */
$pdo = Context::set($this->cds, $this->getConnection()); $pdo = Context::set($this->cds, $this->getConnection());
} }
return $pdo; return $pdo;
@@ -244,12 +251,15 @@ class Connection extends Component
*/ */
public function rollback() public function rollback()
{ {
$pdo = $this->getTransactionClient(); $this->storey--;
if ($pdo->inTransaction()) { if ($this->storey == 0) {
$pdo->rollback(); $pdo = $this->getTransactionClient();
if ($pdo->inTransaction()) {
$pdo->rollback();
}
$this->connections->push($this->cds, $pdo);
Context::remove($this->cds);
} }
$this->connections->push($this->cds, $pdo);
Context::remove($this->cds);
} }
/** /**
@@ -258,12 +268,15 @@ class Connection extends Component
*/ */
public function commit() public function commit()
{ {
$pdo = $this->getTransactionClient(); $this->storey--;
if ($pdo->inTransaction()) { if ($this->storey == 0) {
$pdo->commit(); $pdo = $this->getTransactionClient();
if ($pdo->inTransaction()) {
$pdo->commit();
}
$this->connections->push($this->cds, $pdo);
Context::remove($this->cds);
} }
$this->connections->push($this->cds, $pdo);
Context::remove($this->cds);
} }