Sha256: a7ba33466e4f07c415c674c3ef4a8f91729bdef630ec285214b16781839c8bc1

Contents?: true

Size: 1.7 KB

Versions: 11

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

require 'active_record/connection_adapters/abstract/transaction'

# MSSQL doe not restore the initial transaction isolation when the transaction
# isolation ends as opposed to PostgreSQL, This extension is to fix that.
module ActiveRecord
  module ConnectionAdapters
    module MSSQL
      module TransactionExt
        private

        # This is required when the app has two database connections to
        # different database vendors, e.g. one MSSQL and the other PostgreSQL
        # so we don't mess up postgres transactions
        def mssql?
          connection.respond_to?(:mssql?) && connection.mssql?
        end

        def current_transaction_isolation
          return unless mssql?

          connection.transaction_isolation
        end
      end

      module RealTransactionExt
        attr_reader :initial_transaction_isolation

        def initialize(connection, isolation: nil, joinable: true, run_commit_callbacks: false)
          @connection = connection

          if isolation
            @initial_transaction_isolation = current_transaction_isolation
          end

          super
        end

        def commit
          super
          restore_initial_isolation_level
        end

        def rollback
          super
          restore_initial_isolation_level
        end

        private

        def restore_initial_isolation_level
          return unless mssql?

          return unless initial_transaction_isolation

          connection.transaction_isolation = initial_transaction_isolation
        end
      end
    end

    class Transaction
      prepend MSSQL::TransactionExt
    end

    class RealTransaction
      prepend MSSQL::RealTransactionExt
    end

  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
activerecord-jdbc-alt-adapter-72.0.0.rc1-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-72.0.0.alpha1-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-71.0.0-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-61.3.0-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-71.0.0.alpha2-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-71.0.0.alpha1-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-70.2.0-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-70.1.0-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-70.0.0-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-70.0.0.rc2-java lib/arjdbc/mssql/transaction.rb
activerecord-jdbc-alt-adapter-70.0.0.rc1-java lib/arjdbc/mssql/transaction.rb