method

translate_exception

Importance_0
translate_exception(exception, message:, sql:, binds:) private

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb, line 779
        def translate_exception(exception, message,, sql,, binds))
          case error_number(exception)
          when nil
            if exception.message.match?(/MySQL client is not connected/)
              ConnectionNotEstablished.new(exception, connection_pool: @pool)
            else
              super
            end
          when ER_CONNECTION_KILLED, CR_SERVER_GONE_ERROR, CR_SERVER_LOST, ER_CLIENT_INTERACTION_TIMEOUT
            ConnectionFailed.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_DB_CREATE_EXISTS
            DatabaseAlreadyExists.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_DUP_ENTRY
            RecordNotUnique.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_NO_REFERENCED_ROW, ER_ROW_IS_REFERENCED, ER_ROW_IS_REFERENCED_2, ER_NO_REFERENCED_ROW_2
            InvalidForeignKey.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_CANNOT_ADD_FOREIGN, ER_FK_INCOMPATIBLE_COLUMNS
            mismatched_foreign_key(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_CANNOT_CREATE_TABLE
            if message.include?("errno: 150")
              mismatched_foreign_key(message, sql: sql, binds: binds, connection_pool: @pool)
            else
              super
            end
          when ER_DATA_TOO_LONG
            ValueTooLong.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_OUT_OF_RANGE
            RangeError.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_NOT_NULL_VIOLATION, ER_DO_NOT_HAVE_DEFAULT
            NotNullViolation.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_LOCK_DEADLOCK
            Deadlocked.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_LOCK_WAIT_TIMEOUT
            LockWaitTimeout.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_QUERY_TIMEOUT, ER_FILSORT_ABORT
            StatementTimeout.new(message, sql: sql, binds: binds, connection_pool: @pool)
          when ER_QUERY_INTERRUPTED
            QueryCanceled.new(message, sql: sql, binds: binds, connection_pool: @pool)
          else
            super
          end
        end
Register or log in to add new notes.