getCode()) { 1, 2299, 38911 => new UniqueConstraintViolationException($exception, $query), 904 => new InvalidFieldNameException($exception, $query), 918, 960 => new NonUniqueFieldNameException($exception, $query), 923 => new SyntaxErrorException($exception, $query), 942 => new TableNotFoundException($exception, $query), 955 => new TableExistsException($exception, $query), 1017, 12545 => new ConnectionException($exception, $query), 1400 => new NotNullConstraintViolationException($exception, $query), 1918 => new DatabaseDoesNotExist($exception, $query), 2091 => (function () use ($exception, $query) { //SQLSTATE[HY000]: General error: 2091 OCITransCommit: ORA-02091: transaction rolled back //ORA-00001: unique constraint (DOCTRINE.GH3423_UNIQUE) violated $lines = explode("\n", $exception->getMessage(), 2); assert(count($lines) >= 2); [, $causeError] = $lines; [$causeCode] = explode(': ', $causeError, 2); $code = (int) str_replace('ORA-', '', $causeCode); $sqlState = $exception->getSQLState(); if ($exception instanceof DriverPDOException) { $why = $this->convert(new DriverPDOException($causeError, $sqlState, $code, $exception), $query); } else { $why = $this->convert(new Error($causeError, $sqlState, $code, $exception), $query); } return new TransactionRolledBack($why, $query); })(), 2289, 2443, 4080 => new DatabaseObjectNotFoundException($exception, $query), 2266, 2291, 2292 => new ForeignKeyConstraintViolationException($exception, $query), default => new DriverException($exception, $query), }; } }