From 63394ef161f7b8d9f3817a21752e4b9551b640b0 Mon Sep 17 00:00:00 2001 From: albert Date: Wed, 20 Feb 2013 14:18:33 -0500 Subject: [PATCH] remove unnecessary count query for post_versions listing --- Gemfile | 1 + Gemfile.lock | 2 + app/controllers/post_versions_controller.rb | 3 +- app/helpers/pagination_helper.rb | 1 + app/views/post_versions/index.html.erb | 2 +- config/initializers/query_trace.rb | 84 +++++++++++++++++++++ 6 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 config/initializers/query_trace.rb diff --git a/Gemfile b/Gemfile index 5bae11d47..6b48f93b3 100644 --- a/Gemfile +++ b/Gemfile @@ -35,4 +35,5 @@ group :development do gem 'ruby-prof' gem 'pry' gem 'awesome_print' + gem 'term-ansicolor' end diff --git a/Gemfile.lock b/Gemfile.lock index e9b62f7a7..04de5f7a5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -159,6 +159,7 @@ GEM super_exception_notifier (3.0.13) actionmailer rake + term-ansicolor (1.0.7) therubyracer (0.11.3) libv8 (~> 3.11.8.12) ref @@ -207,6 +208,7 @@ DEPENDENCIES simple_form simplecov super_exception_notifier + term-ansicolor therubyracer uglifier (>= 1.0.3) whenever diff --git a/app/controllers/post_versions_controller.rb b/app/controllers/post_versions_controller.rb index 16ec07437..be4e74bc3 100644 --- a/app/controllers/post_versions_controller.rb +++ b/app/controllers/post_versions_controller.rb @@ -2,8 +2,7 @@ class PostVersionsController < ApplicationController respond_to :html, :xml, :json def index - @search = PostVersion.search(params[:search]) - @post_versions = @search.order("updated_at desc").paginate(params[:page], :count => 1_000_000) + @post_versions = PostVersion.search(params[:search]).order("updated_at desc").paginate(params[:page], :count => 1_000_000) respond_with(@post_versions) end diff --git a/app/helpers/pagination_helper.rb b/app/helpers/pagination_helper.rb index d283f88f8..c0c8a2340 100644 --- a/app/helpers/pagination_helper.rb +++ b/app/helpers/pagination_helper.rb @@ -34,6 +34,7 @@ module PaginationHelper 1.upto(records.total_pages) do |page| html << numbered_paginator_item(page, records.current_page) end + elsif records.current_page <= window + 2 1.upto(records.current_page + window) do |page| html << numbered_paginator_item(page, records.current_page) diff --git a/app/views/post_versions/index.html.erb b/app/views/post_versions/index.html.erb index 6e1542dd1..698b2b4e4 100644 --- a/app/views/post_versions/index.html.erb +++ b/app/views/post_versions/index.html.erb @@ -2,7 +2,7 @@

Changes

- <% if @post_versions.empty? %> + <% if @post_versions.all.empty? %> <%= render "post_sets/blank" %> <% else %> <%= render "listing", :post_versions => @post_versions %> diff --git a/config/initializers/query_trace.rb b/config/initializers/query_trace.rb new file mode 100644 index 000000000..82a3d89be --- /dev/null +++ b/config/initializers/query_trace.rb @@ -0,0 +1,84 @@ +# yields a stacktrace for each SQL query +# put this file in config/initializers +class QueryTrace < ActiveSupport::LogSubscriber + include Term::ANSIColor + attr_accessor :trace_queries + + def sql(event) #:nodoc: + return unless QueryTrace.enabled? && logger.debug? && Rails.env.development? + stack = Rails.backtrace_cleaner.clean(caller) + first_line = stack.shift + return unless first_line + + msg = prefix + bold + cyan + "#{first_line}\n" + reset + msg += cyan + stack.join("\n") + reset + debug msg + end + + # :call-seq: + # Klass.enabled? + # + # yields boolean if SQL queries should be logged or not + + def self.enabled? + defined?(@trace_queries) && @trace_queries + end + + # :call-seq: + # Klass.status + # + # yields text if QueryTrace has been enabled or not + + def self.status + QueryTrace.enabled? ? 'enabled' : 'disabled' + end + + # :call-seq: + # Klass.enable! + # + # turn on SQL query origin logging + + def self.enable! + @trace_queries = true + end + + # :call-seq: + # Klass.disable! + # + # turn off SQL query origin logging + + def self.disable! + @trace_queries = false + end + + # :call-seq: + # Klass.toggle! + # + # Toggles query tracing yielding a boolean indicating the new state of query + # origin tracing + + def self.toggle! + enabled? ? disable! : enable! + enabled? + end + +protected + + def prefix #:nodoc: + bold(magenta('Called from: ')) + reset + end +end + +QueryTrace.attach_to :active_record + +trap('QUIT') do + # Sending 2 backspace characters removes the ^\ that is + # printed to the console. + rm_noise = "\b\b" + + QueryTrace.toggle! + puts "#{rm_noise}=> QueryTrace #{QueryTrace.status}" +end + +QueryTrace.enable! if ENV['QUERY_TRACE'] +puts "=> QueryTrace #{QueryTrace.status}; CTRL-\\ to toggle"