summaryrefslogtreecommitdiff
path: root/spec/support/helpers/query_recorder.rb
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2018-03-29 11:47:54 +0200
committerRémy Coutable <remy@rymai.me>2018-04-23 12:20:30 +0200
commit023d4f6f2f3d88d0966fe01e6ef921fd03a309fe (patch)
tree6aabb650fe2ba200222c57f1a4ac66ff0a9143e8 /spec/support/helpers/query_recorder.rb
parenteb1cb7bed6951bdda54abd55e86fd793e6954a56 (diff)
downloadgitlab-ce-023d4f6f2f3d88d0966fe01e6ef921fd03a309fe.tar.gz
Move spec helpers/matchers/shared examples/contexts to their relevant folder
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'spec/support/helpers/query_recorder.rb')
-rw-r--r--spec/support/helpers/query_recorder.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/spec/support/helpers/query_recorder.rb b/spec/support/helpers/query_recorder.rb
new file mode 100644
index 00000000000..28536bbef5e
--- /dev/null
+++ b/spec/support/helpers/query_recorder.rb
@@ -0,0 +1,38 @@
+module ActiveRecord
+ class QueryRecorder
+ attr_reader :log, :cached
+
+ def initialize(&block)
+ @log = []
+ @cached = []
+ ActiveSupport::Notifications.subscribed(method(:callback), 'sql.active_record', &block)
+ end
+
+ def show_backtrace(values)
+ Rails.logger.debug("QueryRecorder SQL: #{values[:sql]}")
+ caller.each { |line| Rails.logger.debug(" --> #{line}") }
+ end
+
+ def callback(name, start, finish, message_id, values)
+ show_backtrace(values) if ENV['QUERY_RECORDER_DEBUG']
+
+ if values[:name]&.include?("CACHE")
+ @cached << values[:sql]
+ elsif !values[:name]&.include?("SCHEMA")
+ @log << values[:sql]
+ end
+ end
+
+ def count
+ @log.count
+ end
+
+ def cached_count
+ @cached.count
+ end
+
+ def log_message
+ @log.join("\n\n")
+ end
+ end
+end