43 lines
1.0 KiB
PHP
43 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace Ulmus\Common\PdoObject;
|
|
|
|
class SqlPdoObject extends \Ulmus\Common\PdoObject
|
|
{
|
|
protected int $openedTransaction = 0;
|
|
|
|
public function beginTransaction(): bool
|
|
{
|
|
if ( 0 === $this->openedTransaction++ ) {
|
|
return $this->openTransaction();
|
|
}
|
|
|
|
return $this->exec("SAVEPOINT transaction_{$this->openedTransaction}") !== false;
|
|
}
|
|
|
|
public function commit() : bool
|
|
{
|
|
if ( 0 === --$this->openedTransaction) {
|
|
return parent::commit();
|
|
}
|
|
|
|
return $this->exec("RELEASE SAVEPOINT transaction_{$this->openedTransaction}") !== false;
|
|
}
|
|
|
|
public function rollback() : bool
|
|
{
|
|
if ($this->openedTransaction > 1) {
|
|
return $this->exec('ROLLBACK TO transaction_' . $this->openedTransaction--) !== false;
|
|
}
|
|
elseif ($this->openedTransaction-- === 1) {
|
|
return parent::rollback();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected function openTransaction() : bool
|
|
{
|
|
return parent::beginTransaction();
|
|
}
|
|
} |