提交 1193709c 编写于 作者: A Aaron Patterson

removing some freedom patches. use notification system to count sql queries

上级 9f773d66
...@@ -49,28 +49,29 @@ def with_active_record_default_timezone(zone) ...@@ -49,28 +49,29 @@ def with_active_record_default_timezone(zone)
ActiveRecord::Base.default_timezone = old_zone ActiveRecord::Base.default_timezone = old_zone
end end
ActiveRecord::Base.connection.class.class_eval do module ActiveRecord
IGNORED_SQL = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/] class SQLCounter
IGNORED_SQL = [/^PRAGMA (?!(table_info))/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SAVEPOINT/, /^ROLLBACK TO SAVEPOINT/, /^RELEASE SAVEPOINT/]
# FIXME: this needs to be refactored so specific database can add their own # FIXME: this needs to be refactored so specific database can add their own
# ignored SQL. This ignored SQL is for Oracle. # ignored SQL. This ignored SQL is for Oracle.
IGNORED_SQL.concat [/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from ((all|user)_tab_columns|(all|user)_triggers|(all|user)_constraints)/im] IGNORED_SQL.concat [/^select .*nextval/i, /^SAVEPOINT/, /^ROLLBACK TO/, /^\s*select .* from ((all|user)_tab_columns|(all|user)_triggers|(all|user)_constraints)/im]
def execute_with_query_record(sql, name = nil, &block) def initialize
$queries_executed ||= [] $queries_executed = []
$queries_executed << sql unless IGNORED_SQL.any? { |r| sql =~ r } end
execute_without_query_record(sql, name, &block)
end
alias_method_chain :execute, :query_record def call(name, start, finish, message_id, values)
sql = values[:sql]
def exec_query_with_query_record(sql, name = nil, binds = [], &block) # FIXME: this seems bad. we should probably have a better way to indicate
$queries_executed ||= [] # the query was cached
$queries_executed << sql unless IGNORED_SQL.any? { |r| sql =~ r } unless 'CACHE' == values[:name]
exec_query_without_query_record(sql, name, binds, &block) $queries_executed << sql unless IGNORED_SQL.any? { |r| sql =~ r }
end
end
end end
ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
alias_method_chain :exec_query, :query_record
end end
ActiveRecord::Base.connection.class.class_eval { ActiveRecord::Base.connection.class.class_eval {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册