szurubooru/src/Dao/TransactionManager.php

43 lines
760 B
PHP
Raw Normal View History

2014-09-14 18:41:14 +02:00
<?php
namespace Szurubooru\Dao;
class TransactionManager
{
private $databaseConnection;
public function __construct(\Szurubooru\DatabaseConnection $databaseConnection)
{
$this->databaseConnection = $databaseConnection;
}
public function commit($callback)
{
return $this->doInTransaction($callback, 'commit');
}
public function rollback($callback)
{
return $this->doInTransaction($callback, 'rollBack');
}
public function doInTransaction($callback, $operation)
{
$pdo = $this->databaseConnection->getPDO();
if ($pdo->inTransaction())
return $callback();
try
{
$pdo->beginTransaction();
$ret = $callback();
$pdo->$operation();
return $ret;
}
catch (\Exception $e)
{
$pdo->rollBack();
throw $e;
}
}
}