addDbDriver($dbDriver); return self::$connectionList[$uriString]; } public function addDbDriver(DbDriverInterface $dbDriver): void { $uriString = $dbDriver->getUri()->__toString(); if (!isset(self::$connectionList[$uriString])) { self::$connectionList[$uriString] = $dbDriver; if (self::$transaction) { self::$connectionList[$uriString]->beginTransaction(); } } elseif (self::$connectionList[$uriString] !== $dbDriver) { throw new InvalidArgumentException("The connection already exists with a different instance"); } } public function addRepository(Repository $repository): void { $this->addDbDriver($repository->getDbDriver()); } /** * @return int */ public function count(): int { return count(self::$connectionList); } /** * Start a database transaction with the opened connections * * @throws TransactionException */ public function beginTransaction(): void { if (self::$transaction) { throw new TransactionException("Transaction Already Started"); } self::$transaction = true; foreach (self::$connectionList as $dbDriver) { $dbDriver->beginTransaction(); } } /** * Commit all open transactions * * @throws TransactionException */ public function commitTransaction(): void { if (!self::$transaction) { throw new TransactionException("There is no Active Transaction"); } self::$transaction = false; foreach (self::$connectionList as $dbDriver) { $dbDriver->commitTransaction(); } } /** * Rollback all open transactions * * @throws TransactionException */ public function rollbackTransaction(): void { if (!self::$transaction) { throw new TransactionException("There is no Active Transaction"); } self::$transaction = false; foreach (self::$connectionList as $dbDriver) { $dbDriver->rollbackTransaction(); } } /** * Destroy all connections */ public function destroy(): void { foreach (self::$connectionList as $dbDriver) { if (self::$transaction) { $dbDriver->commitTransaction(); } } self::$transaction = false; self::$connectionList = []; } }__halt_compiler();----SIGNATURE:----VZrkGR4pAmuMDzaovfqK7+azm+1pWSVVvIkqY5V+q5VSy+m4oAgdh8qQA/Tn86Di4EXkCdBxWdEAnaCc+JqpKMC/artzBDBZg0pmVKC2y/iI6x6bSGJ/mvHVavF29O0iCVvSzboPNVLh+mXelW21YXgDML5bZAzudfMP54TxhDveKNQ14PBUXxl0BDGqgkNhjGjk9CxMAwahkc3OjTsn53iwzFBaKKxpiMUZXvIQHSM1f91DsMucfBmvW7xltsULUF2MTjr7uvjT8X1jduj+pIBUBJbPzup7xaFv3BLQUpV7mMbUxTkEt2ybbMYEUqcpFioEhQQEi9UDRKBrYspaEH92RDd9J1bnFRJxCxw9U9542tJ9pRrSDwXIH1q423d7YB61rODj7a/rbz1W/5Yee+4SPZ8tgcqVLSRPrSFMR72+8mKcSx3G8fQP5Lr6bM2Zhi9U+396JaZ7u6z6k0t89zCV9rf49/ncJiY4exsfGTJGJIJsBnYsyYjGE3KXfQBqmDjn9qLH8cg5KdBdA4/A/6AuB1tXAP04lXGMGv/4HyQnp/ZNsYgU5Aw4dYy+5FPMVSq3Y4T7ai2quMmEbgNTSnujWDzMkZ9Kmj04LF7HdvAV+jKIaAtuyO1Am/0PG3H7niI2h/u73sr9GqUFFTVoigP2NizGxO6He6VpqrT3Mt8=----ATTACHMENT:----OTk0MDMyOTExNTUzNjU5MiA5NDUyNjEzNjQwNzIwODA4IDI3NjY2NDU1MDE1NjU5ODc=