Module: JSONAPI::QueryCounter

Defined in:
lib/json_api/support/query_counter.rb

Constant Summary collapse

SKIP_PATTERN =
/\A(\s*(BEGIN|COMMIT|ROLLBACK|SAVEPOINT|RELEASE\s+SAVEPOINT)\b)/i
SCHEMA_PATTERN =
/\A(\s*(CREATE|ALTER|DROP)\s+(TABLE|INDEX|DATABASE))/i
PRAGMA_PATTERN =
/\APRAGMA\b/i
SQLITE_MASTER_PATTERN =
/sqlite_master|sqlite_temp_master/i

Class Method Summary collapse

Class Method Details

.countObject



10
11
12
13
14
15
# File 'lib/json_api/support/query_counter.rb', line 10

def self.count(&)
  queries = []
  counter = ->(_name, _start, _finish, _id, payload) { count_sql(queries, payload) }
  ActiveSupport::Notifications.subscribed(counter, "sql.active_record", &)
  queries
end

.count_queriesObject



17
18
19
# File 'lib/json_api/support/query_counter.rb', line 17

def self.count_queries(&)
  count(&).size
end

.count_sql(queries, payload) ⇒ Object



21
22
23
24
25
26
27
28
29
30
# File 'lib/json_api/support/query_counter.rb', line 21

def self.count_sql(queries, payload)
  sql = payload[:sql]
  return if sql.nil?
  return if SKIP_PATTERN.match?(sql)
  return if SCHEMA_PATTERN.match?(sql)
  return if PRAGMA_PATTERN.match?(sql)
  return if SQLITE_MASTER_PATTERN.match?(sql)

  queries << sql
end