diff --git a/src/TableManager.php b/src/TableManager.php index e17e9ad2af5f6a2f74bd418dc2806989f430e9ec..98ab1507ca5da928bcaac803836844b60636481a 100644 --- a/src/TableManager.php +++ b/src/TableManager.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace Grifart\Tables; -use Dibi\Connection; +use Dibi\IConnection; use Dibi\UniqueConstraintViolationException; use Grifart\Tables\Conditions\Composite; use Grifart\Tables\Conditions\Condition; @@ -21,7 +21,7 @@ final class TableManager { public function __construct( - private Connection $connection, + private IConnection $connection, ) {} /** @@ -242,4 +242,24 @@ final class TableManager // UPDATE: $this->update($table, $changes); } + + /** + * @template T + * @param \Closure(): T $block + * @return T + */ + public function withConnection( + IConnection $connection, + \Closure $block, + ): mixed + { + $previousConnection = $this->connection; + $this->connection = $connection; + + try { + return $block(); + } finally { + $this->connection = $previousConnection; + } + } }