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:----B/6eHOGdKNKcAiruRq1zJEUZrL+9qPlEPtfNVT1V5zkoaYEf5d40t5mpRq095Gn9TrBRq2Iw/VL03/P58t+HLpVwLLAz94NShF0U6N3d7fYqtGzqpQ/LiS0cLlb1SF0gQQiOBFXPE79MhLuS/MSpSzJlPvYRyQEIFYW2vRVbg+QIfT8PlPc2AhUx7BKrtQ4fo458A9i1aPOOkS8usaffqcrbowp/7FiXW7074+DfS3JetVQOTzV7+4cR4w+diwgp/mVhsghCA9ARKmI18IzX7HVT9Ketl/w6maAEuRqXfbM0plt8NWXh95TV194t7+6YUkOZ3xCALLI7E8Mu9AeP+dkKZSV14utdB/Ui70BvYj+vJ8mvlKDEhUgvbTDyo+183xEuvVGZ8JHUwYaudsPKmFe/cAtI42aPZPv0S5SdLD/rlBQArYx41CmP1koUSIMzelOHfttc/BSZnPN04ldimGYqqOtDVpw++a+y8+GG5Yk6Rb2dlwVXHDIEoCd+ObA5nc1RqnjxSGKvsMXJUTa4BWKYT0y5bZ5D4wXn1yN6/lUuRBjkqlXqM+zQsEpBuTiFvaW4o2yEamnXph4KwGNQbDO/IGuBmcNzIM9FAK0595Ek0OrSW5J0Gz8E8amkp72ohbyNTIVn90g06gwZRNdtcSNW9l3UqBRFOq7+JI/rJEQ=----ATTACHMENT:----MTY2NDkzNjQ1NDc3OTkxMCA0NzcyMTk4MDc5NzA3NTYxIDE4NjAwNzMzMjYwNjg5NzI=