Module: AdvancedConnection::ActiveRecordExt::AbstractAdapter::StatementPooling::ExecuteWrapper

Defined in:
lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb

Instance Method Summary collapse

Instance Method Details

#__wrap_adapter_exec_methods(*methods) ⇒ Object Also known as: __wrap_adapter_exec_method



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb', line 30

def __wrap_adapter_exec_methods(*methods)
  Array(methods).flat_map(&:to_sym).each do |exec_method|
    class_eval(<<-EOS, __FILE__, __LINE__ + 1)
      def #{exec_method}_with_callback(sql, *args, &block)
        if Thread.current[:without_callbacks] || sql =~ /^BEGIN/i || transaction_open? || pool.nil?
          #{exec_method}_without_callback(sql, *args, &block)
        else
          run_callbacks(:statement_pooling_connection_checkin) do
            #{exec_method}_without_callback(sql, *args, &block).tap {
              reset!
              pool.release_connection
            }
          end
        end
      end
    EOS
    alias_method_chain exec_method, :callback
  end
end

#__wrap_without_callbacks(*methods) ⇒ Object Also known as: __wrap_without_callback



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/advanced_connection/active_record_ext/abstract_adapter/statement_pooling.rb', line 51

def __wrap_without_callbacks(*methods)
  Array(methods).flat_map(&:to_sym).each do |exec_method|
    target, punctuation = exec_method.to_s.sub(/([?!=])$/, ''), $1
    class_eval(<<-EOS, __FILE__, __LINE__ + 1)
      def #{target}_with_no_callbacks#{punctuation}(*args, &block)
        Thread.current[:without_callbacks] = true
        #{target}_without_no_callbacks#{punctuation}(*args, &block)
      ensure
        Thread.current[:without_callbacks] = nil
      end
    EOS
    alias_method_chain exec_method, :no_callbacks
  end
end