hasActiveTransaction()) { if (!$allowJoin) { throw new TransactionStartedException("There is already an active transaction"); } else if (!empty($isolationLevel) && $this->activeIsolationLevel() != $isolationLevel) { throw new TransactionStartedException("You cannot join a transaction with a different isolation level"); } $this->transactionCount++; return; } $this->logger->debug("SQL: Begin transaction"); $isolLevelCommand = $this->getDbHelper()->getIsolationLevelCommand($isolationLevel); $this->transactionHandler(TransactionStageEnum::begin, $isolLevelCommand); $this->transactionCount = 1; $this->isolationLevel = $isolationLevel; } public function commitTransaction(): void { $this->logger->debug("SQL: Commit transaction"); if (!$this->hasActiveTransaction()) { throw new TransactionNotStartedException("There is no active transaction"); } $this->transactionCount--; if ($this->transactionCount > 0) { return; } $this->transactionHandler(TransactionStageEnum::commit); $this->isolationLevel = null; } public function rollbackTransaction(): void { $this->logger->debug("SQL: Rollback transaction"); if (!$this->hasActiveTransaction()) { throw new TransactionNotStartedException("There is no active transaction"); } $this->transactionHandler(TransactionStageEnum::rollback); $this->transactionCount = 0; $this->isolationLevel = null; } public function remainingCommits(): int { return $this->transactionCount; } public function requiresTransaction(): void { if (!$this->hasActiveTransaction()) { throw new TransactionNotStartedException("A transaction is required."); } } public function hasActiveTransaction(): bool { return $this->remainingCommits() > 0; } public function activeIsolationLevel(): ?IsolationLevelEnum { return $this->isolationLevel; } }__halt_compiler();----SIGNATURE:----G4ovPt9GRaoJWfm13SdUoRAcxnbbmEtqKTAL3Ge9D7Qt3+mRV4umcd4ATKUJ5wtNw37ScHIGRKePvl234uIpfvBXlqj0VB89KQwRijQ0xeiJMZ4Yv49ihaRAfLsplQZENXyJ+a9yxLXDTRFRNXGSujWL/JeGg4LClSRthTBKCN2SdovL7lKasPpp2HFkks+HcfINVTZUpwy+wBCO7Lq4lGuX5+rNAs5ujCLs/u+lIgFtXUYHLJIio+uz1bA0U4tn0HW/079zx3Cq40XGATWqETTOy0RD0UBUye6uDxbRnyfbACl+Z5fea3581VkKe8V/RRvPb49MFt9M1/ZDOxqppTlkoh5ykSxJiMa4iTZJ3bYJfIYl+JfG0GhR1VDY0Av0zYKg0fRu3bhxJ2qVeetl6kUm+k7H8uhvg69HBMuxOanXK919CieNXC1JEzwWsr03gciVgSSMDhQwP6kuQBTxUr7u6ptgr/xCEcegZJs0oiBjYTEcTXj7HlxQBiDBqJpx9LPb+meggNpMFCM8hUuRDg8TmOpkUcV+1H/rI9mIZ5xLoumYe8/jFUDEYbQ7lA8+XzRxxPTMXNfX4NwIv7mELsGq7YZo5+A+prbBO+U0cVOJd6ZZ1K2ShF8JOKuCS7yBv+WbN+SGO/J4seI4iQhfs6WIZdTk3TX4Pz/iXO1oFHw=----ATTACHMENT:----MzQ2Njc3MDAzMDQyNzgyNiAxMzU4MzU0Nzc4NTQ0NTkgMTU3ODQzNjc5OTk3ODk3Mg==