ar-query-matchers 0.5.1 → 0.5.2.pre.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c028b70b3fbf9ea3e703744480dfb98f6a1ef9b6ab2e90fc4c05879cb2eecff
4
- data.tar.gz: c1191c7af4628af475e2e180ec3dd0233e80d69c0d5991d8278292fed6e1aec6
3
+ metadata.gz: 2aaeaac19a8660c885b5ac75c32077ab6b0f835c53aaefa1bb3d3b7bab701fd4
4
+ data.tar.gz: 3746c66186e7d067fc82895a8d7bb90dc230eb7ddef7553ad2bb9631bd69d097
5
5
  SHA512:
6
- metadata.gz: f220e3dff11f0b978b6de20314646783814fadfc7cc15ad51d59236a76def60e98f77fe5495217f572046fffbd15a568b0f5827c56874a1b8dd71ec4c3822e04
7
- data.tar.gz: 10ee5a3e0c6a39836d59649a0df91eb64f5967e8cc5df0d874755e33f1894d6f251f3f9e82bbc4395e97b67a1c820aaab929c3df05226e4d9c52e91fc133ddf7
6
+ metadata.gz: 7d43af021387d6a1ea871bf13d876a512e19cf98eb702f85f9ff0446970c8f6bfbf40356d1eb0c1417664fd8b47ab4e8aab115785f06f8f22f547ab284dfa809
7
+ data.tar.gz: f8785fb4accfb4f7a2573ced84211769793cc72bb6784de3884665f39a63346ebcc83046e737e6fca3e56a9fd1dbafc563805800b49df32ee77951137c76f8aa
data/CHANGELOG.md CHANGED
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.5.2] - 2021-05-18
10
+ ### Changed
11
+ - Removes 'SELECT' from MODEL_SQL_PATTERN to allow for more granular SQL statement matching
12
+
9
13
  ## [0.5.1] - 2020-11-19
10
14
  ### Changed
11
15
  - Removes zero count expectations from hash before comparing
@@ -23,7 +23,7 @@ module ArQueryMatchers
23
23
  # for inserts, name is always 'SQL', we have to rely on pattern matching the query string.
24
24
  select_from_table = sql.match(TABLE_NAME_SQL_PATTERN)
25
25
 
26
- TableName.new(select_from_table[:table_name]) if select_from_table
26
+ [TableName.new(select_from_table[:table_name])] if select_from_table
27
27
  end
28
28
  end
29
29
  end
@@ -21,18 +21,21 @@ module ArQueryMatchers
21
21
 
22
22
  # Matches unnamed SQL operations like the following:
23
23
  # "SELECT COUNT(*) FROM `users` ..."
24
- MODEL_SQL_PATTERN = /SELECT .* FROM [`"](?<table_name>[^`"]+)[`"]/.freeze
24
+ MODEL_SQL_PATTERN = /FROM [`"](?<table_name>[^`"]+)[`"]/.freeze
25
25
 
26
- def filter_map(name, sql)
26
+ def filter_map(_name, sql)
27
27
  # First check for a `SELECT * FROM` query that ActiveRecord has
28
28
  # helpfully named for us in the payload
29
- match = name.match(MODEL_LOAD_PATTERN)
30
- return ModelName.new(match[:model_name]) if match
29
+ #
30
+ # NOTE: This misses possible subqueries and prevents us from getting
31
+ # to the below matcher
32
+ # match = name.match(MODEL_LOAD_PATTERN)
33
+ # return [ModelName.new(match[:model_name])] if match
31
34
 
32
35
  # Fall back to pattern-matching on the table name in a COUNT and looking
33
36
  # up the table name from ActiveRecord's loaded descendants.
34
- select_from_table = sql.match(MODEL_SQL_PATTERN)
35
- TableName.new(select_from_table[:table_name]) if select_from_table
37
+ selects_from_table = sql.scan(MODEL_SQL_PATTERN)
38
+ selects_from_table.map { |(table_name)| TableName.new(table_name) } unless selects_from_table.empty?
36
39
  end
37
40
  end
38
41
  end
@@ -81,9 +81,13 @@ module ArQueryMatchers
81
81
  # Given a `sql.active_record` event, figure out which model is being
82
82
  # accessed. Some of the simpler queries have a :name key that makes this
83
83
  # really easy. Others require parsing the SQL by hand.
84
- model_name = @query_filter.filter_map(payload[:name] || '', payload[:sql] || '')&.model_name
84
+ results = @query_filter.filter_map(payload[:name] || '', payload[:sql] || '')
85
+
86
+ # Round to microseconds
87
+ results&.each do |result|
88
+ model_name = result.model_name
89
+ next unless model_name
85
90
 
86
- if model_name
87
91
  comment = payload[:sql].match(MARGINALIA_SQL_COMMENT_PATTERN)
88
92
  queries[model_name][:lines] << comment[:line] if comment
89
93
  queries[model_name][:count] += 1
@@ -22,7 +22,7 @@ module ArQueryMatchers
22
22
  def filter_map(_name, sql)
23
23
  # for updates, name is always 'SQL', we have to rely on pattern matching on the query string instead.
24
24
  select_from_table = sql.match(TABLE_NAME_SQL_PATTERN)
25
- TableName.new(select_from_table[:table_name]) if select_from_table
25
+ [TableName.new(select_from_table[:table_name])] if select_from_table
26
26
  end
27
27
  end
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-query-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2.pre.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matan Zruya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-30 00:00:00.000000000 Z
11
+ date: 2021-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -186,11 +186,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
186
  version: '0'
187
187
  required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  requirements:
189
- - - ">="
189
+ - - ">"
190
190
  - !ruby/object:Gem::Version
191
- version: '0'
191
+ version: 1.3.1
192
192
  requirements: []
193
- rubygems_version: 3.1.4
193
+ rubygems_version: 3.0.3.1
194
194
  signing_key:
195
195
  specification_version: 4
196
196
  summary: Ruby test matchers for instrumenting ActiveRecord query counts