我正在尝试做一些简单的事情。我想在执行之前打印纯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处理这个问题?