PostgreSQL猴子修补查询执行

时间:2015-04-05 10:15:22

标签: ruby-on-rails ruby-on-rails-3 postgresql ruby-on-rails-4

我正在尝试做一些简单的事情。我想在执行之前打印纯sql,然后在查询完成时打印响应。我认为我应该修补这两种方法中的一种,但应用程序的sql查询不使用它们。

知道我该怎么做?

我知道这听起来很愚蠢,但我会扩展这个逻辑。

require 'active_record/connection_adapters/postgresql_adapter'

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  def query(sql, name = nil) #:nodoc:
    File.open("file1", "a") { |f| f.write sql  + "\n\n" }
    log(sql, name) do
      result_as_array @connection.async_exec(sql)
      File.open("file1", "a") { |f| f.write "RESPONSE \n\n" }
    end
  end

  def execute(sql, name = nil)
    File.open("file2", "a") { |f| f.write sql + "\n\n" }
    log(sql, name) do
      @connection.async_exec(sql)
      File.open("file2", "a") { |f| f.write "RESPONSE \n\n" }
    end
  end
end

我的主要想法是至少为MySQL和PostgreSQL处理执行方法。我发现我可以通过这种方式为MySQL做到这一点:

require 'active_record/connection_adapters/mysql2_adapter'
module ActiveRecord
  module ConnectionAdapters
    class Mysql2Adapter < AbstractMysqlAdapter

      def exec_query(sql, name = 'SQL', binds = [])
        File.open("path2", "a") { |f| f.write sql + "\n"  }
        result = execute(sql, name)
        ActiveRecord::Result.new(result.fields, result.to_a)
      end
    end
  end
end

也许有办法在一个地方为所有DB-s处理这个问题?

0 个答案:

没有答案