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];
private int $storey = 0;
/**
* @var bool
* enable database cache
@@ -207,7 +210,10 @@ class Connection extends Component
public function beginTransaction(): static
{
$pdo = $this->getTransactionClient();
$pdo->beginTransaction();
if ($this->storey == 0) {
$pdo->beginTransaction();
}
$this->storey++;
return $this;
}
@@ -223,6 +229,7 @@ class Connection extends Component
}
$pdo = Context::get($this->cds);
if ($pdo === null) {
/** @var PDO $pdo */
$pdo = Context::set($this->cds, $this->getConnection());
}
return $pdo;
@@ -244,12 +251,15 @@ class Connection extends Component
*/
public function rollback()
{
$pdo = $this->getTransactionClient();
if ($pdo->inTransaction()) {
$pdo->rollback();
$this->storey--;
if ($this->storey == 0) {
$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()
{
$pdo = $this->getTransactionClient();
if ($pdo->inTransaction()) {
$pdo->commit();
$this->storey--;
if ($this->storey == 0) {
$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);
}