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("      def \#{exec_method}_with_callback(sql, *args, &block)\n        if Thread.current[:without_callbacks] || sql =~ /^BEGIN/i || transaction_open? || pool.nil?\n          \#{exec_method}_without_callback(sql, *args, &block)\n        else\n          run_callbacks(:statement_pooling_connection_checkin) do\n            \#{exec_method}_without_callback(sql, *args, &block).tap {\n              reset!\n              pool.release_connection\n            }\n          end\n        end\n      end\n    EOS\n    alias_method_chain exec_method, :callback\n  end\nend\n", __FILE__, __LINE__ + 1)

#__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("      def \#{target}_with_no_callbacks\#{punctuation}(*args, &block)\n        Thread.current[:without_callbacks] = true\n        \#{target}_without_no_callbacks\#{punctuation}(*args, &block)\n      ensure\n        Thread.current[:without_callbacks] = nil\n      end\n    EOS\n    alias_method_chain exec_method, :no_callbacks\n  end\nend\n", __FILE__, __LINE__ + 1)