Как получить SQL-запросы для каждого пользователя, в котором работает env - PullRequest
0 голосов
/ 09 ноября 2009

Я занимаюсь разработкой приложения, предназначенного для создания статистических отчетов. Мне бы хотелось, чтобы этот пользователь после сохранения своего статистического отчета также сохранял SQL-запросы. Для этого я написал следующий модуль:

module SqlHunter

    class ActiveRecord::ConnectionAdapters::AbstractAdapter

        @@queries = [] 
        cattr_accessor :queries 
        def log_info_with_trace(sql, name, runtime)
            return unless @logger && @logger.debug?
            @@queries << sql 
        end
        alias_method_chain :log_info, :trace
    end
end

в контроллере я написал, что

sqlfile = File.open("public/advancedStats/#{@dir_name}/advancedStatQuery.sql", 'w')
@queries = ActiveRecord::ConnectionAdapters::AbstractAdapter::queries
for query in @queries do
    sqlfile.write("#{query} \n")
end
sqlfile.close

Я также изменил среду Rails, добавив следующую строку:

ActiveRecord::Base.logger.level = Logger::DEBUG

Эта программа работает, и я могу получить все запросы, но мне нужны только конкретные запросы, выполненные одним пользователем, для создания статистического отчета.

У кого-то есть идеи, Спасибо,

mgatri

1 Ответ

1 голос
/ 09 ноября 2009

Вы можете добавить аксессор, который говорит, хотите ли вы войти или нет.

@@queries = []
@@loging = false
cattr_accessor :queries, :logging

def log_info_with_trace(sql, name, runtime)
    return unless @logger && @logger.debug?
    @@queries << sql if @@logging 
end

Когда вы делаете ActiveRecord::ConnectionAdapters::AbstractAdapter::logging = true
Затем ваши SQL-запросы будут зарегистрированы. Когда вы установите его в false, они не будут.

Так что вы можете регистрировать их только тогда, когда захотите.

Чтобы стереть старые запросы, вам просто нужно очистить массив.

ActiveRecord::ConnectionAdapters::AbstractAdapter::queries.clear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...