scout_apm 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +4 -0
- data/lib/scout_apm/utils/sql_sanitizer.rb +1 -1
- data/lib/scout_apm/utils/sql_sanitizer_regex.rb +2 -4
- data/lib/scout_apm/utils/sql_sanitizer_regex_1_8_7.rb +2 -2
- data/lib/scout_apm/version.rb +1 -1
- data/test/unit/sql_sanitizer_test.rb +27 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6fbe68e8addf7bfe056ee52866c15e10af61a1d
|
4
|
+
data.tar.gz: d3dbd902ea249c19be319e72bd9bb4147e8c5612
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3702bf98e121cb3701d7e350f6d73aaf961b976cdf627a809848bf06c5185e7ad2837d0a33f40f2540732e89f6f5feb78309bedbb84bbf2bdb9cbcb10458fee9
|
7
|
+
data.tar.gz: 1811b990165b63124cc5dbc56f34416ed77b0c1008f556f96e29b8e4f9f9c9d8e9be2cad352b632dc5ec732cf39dd4bdb1b9b36866fb34fc91b115a78475766c
|
data/CHANGELOG.markdown
CHANGED
@@ -49,7 +49,7 @@ module ScoutApm
|
|
49
49
|
sql.gsub!(MYSQL_REMOVE_SINGLE_QUOTE_STRINGS, '?')
|
50
50
|
sql.gsub!(MYSQL_REMOVE_DOUBLE_QUOTE_STRINGS, '?')
|
51
51
|
sql.gsub!(MYSQL_REMOVE_INTEGERS, '?')
|
52
|
-
sql.gsub!(MYSQL_IN_CLAUSE, '?')
|
52
|
+
sql.gsub!(MYSQL_IN_CLAUSE, 'IN (?)')
|
53
53
|
sql.gsub!(MULTIPLE_QUESTIONS, '?')
|
54
54
|
sql.strip!
|
55
55
|
sql
|
@@ -7,17 +7,15 @@ module ScoutApm
|
|
7
7
|
|
8
8
|
PSQL_VAR_INTERPOLATION = %r|\[\[.*\]\]\s*$|.freeze
|
9
9
|
PSQL_REMOVE_STRINGS = /'(?:[^']|'')*'/.freeze
|
10
|
-
|
11
10
|
PSQL_REMOVE_INTEGERS = /(?<!LIMIT )\b\d+\b/.freeze
|
12
|
-
|
13
11
|
PSQL_PLACEHOLDER = /\$\d+/.freeze
|
14
|
-
PSQL_IN_CLAUSE = /IN\s+\(
|
12
|
+
PSQL_IN_CLAUSE = /IN\s+\(\?[^\)]*\)/.freeze
|
15
13
|
|
16
14
|
MYSQL_VAR_INTERPOLATION = %r|\[\[.*\]\]\s*$|.freeze
|
17
15
|
MYSQL_REMOVE_INTEGERS = /(?<!LIMIT )\b\d+\b/.freeze
|
18
16
|
MYSQL_REMOVE_SINGLE_QUOTE_STRINGS = /'(?:[^']|'')*'/.freeze
|
19
17
|
MYSQL_REMOVE_DOUBLE_QUOTE_STRINGS = /"(?:[^"]|"")*"/.freeze
|
20
|
-
MYSQL_IN_CLAUSE = /IN\s+\(
|
18
|
+
MYSQL_IN_CLAUSE = /IN\s+\(\?[^\)]*\)/.freeze
|
21
19
|
|
22
20
|
SQLITE_VAR_INTERPOLATION = %r|\[\[.*\]\]\s*$|.freeze
|
23
21
|
SQLITE_REMOVE_STRINGS = /'(?:[^']|'')*'/.freeze
|
@@ -9,13 +9,13 @@ module ScoutApm
|
|
9
9
|
PSQL_REMOVE_STRINGS = /'(?:[^']|'')*'/.freeze
|
10
10
|
PSQL_REMOVE_INTEGERS = /\b\d+\b/.freeze
|
11
11
|
PSQL_PLACEHOLDER = /\$\d+/.freeze
|
12
|
-
PSQL_IN_CLAUSE = /IN\s+\(
|
12
|
+
PSQL_IN_CLAUSE = /IN\s+\(\?[^\)]*\)/.freeze
|
13
13
|
|
14
14
|
MYSQL_VAR_INTERPOLATION = %r|\[\[.*\]\]\s*$|.freeze
|
15
15
|
MYSQL_REMOVE_INTEGERS = /\b\d+\b/.freeze
|
16
16
|
MYSQL_REMOVE_SINGLE_QUOTE_STRINGS = /'(?:[^']|'')*'/.freeze
|
17
17
|
MYSQL_REMOVE_DOUBLE_QUOTE_STRINGS = /"(?:[^"]|"")*"/.freeze
|
18
|
-
MYSQL_IN_CLAUSE = /IN\s+\(
|
18
|
+
MYSQL_IN_CLAUSE = /IN\s+\(\?[^\)]*\)/.freeze
|
19
19
|
|
20
20
|
SQLITE_VAR_INTERPOLATION = %r|\[\[.*\]\]\s*$|.freeze
|
21
21
|
SQLITE_REMOVE_STRINGS = /'(?:[^']|'')*'/.freeze
|
data/lib/scout_apm/version.rb
CHANGED
@@ -45,6 +45,15 @@ module ScoutApm
|
|
45
45
|
assert_equal %q|SELECT "blogs".* FROM "blogs" WHERE id IN (?)|, ss.to_s
|
46
46
|
end
|
47
47
|
|
48
|
+
def test_postgres_collapse_in_clause_performacne
|
49
|
+
sql = 'SELECT "users".* FROM "users" WHERE "users"."id" IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?)'
|
50
|
+
ss = SqlSanitizer.new(sql).tap{ |it| it.database_engine = :postgres }
|
51
|
+
|
52
|
+
assert_faster_than(0.01) do
|
53
|
+
assert_equal %q|SELECT "users".* FROM "users" WHERE "users"."id" IN (?)|, ss.to_s
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
48
57
|
def test_mysql_where
|
49
58
|
sql = %q|SELECT `users`.* FROM `users` WHERE `users`.`name` = ? [["name", "chris"]]|
|
50
59
|
ss = SqlSanitizer.new(sql).tap{ |it| it.database_engine = :mysql }
|
@@ -57,6 +66,15 @@ module ScoutApm
|
|
57
66
|
assert_equal %q|SELECT `blogs`.* FROM `blogs` ORDER BY `blogs`.`id` ASC LIMIT 1|, ss.to_s
|
58
67
|
end
|
59
68
|
|
69
|
+
def test_mysql_collpase_in_clause_performance
|
70
|
+
sql = 'SELECT `users`.* FROM `users` WHERE `users`.`id` IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, ?, ?, ?)'
|
71
|
+
ss = SqlSanitizer.new(sql).tap{ |it| it.database_engine = :mysql }
|
72
|
+
|
73
|
+
assert_faster_than(0.01) do
|
74
|
+
assert_equal %q|SELECT `users`.* FROM `users` WHERE `users`.`id` IN (?)|, ss.to_s
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
60
78
|
def test_mysql_literals
|
61
79
|
sql = %q|SELECT `blogs`.* FROM `blogs` WHERE (title = 'abc')|
|
62
80
|
ss = SqlSanitizer.new(sql).tap{ |it| it.database_engine = :mysql }
|
@@ -74,6 +92,15 @@ module ScoutApm
|
|
74
92
|
assert_equal %q|SELECT `blogs`.* FROM `blogs` WHERE (title = 'a_c')|, ss.sql
|
75
93
|
assert_equal %q|SELECT `blogs`.* FROM `blogs` WHERE (title = ?)|, ss.to_s
|
76
94
|
end
|
95
|
+
|
96
|
+
def assert_faster_than(target_seconds)
|
97
|
+
t1 = ::Time.now
|
98
|
+
yield
|
99
|
+
t2 = ::Time.now
|
100
|
+
|
101
|
+
actual_time = t2.to_f - t1.to_f
|
102
|
+
assert (actual_time < target_seconds), "Code took too long to execute, expected time: #{target_seconds}, actual time: #{actual_time}}"
|
103
|
+
end
|
77
104
|
end
|
78
105
|
end
|
79
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout_apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Haynes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-02-
|
12
|
+
date: 2016-02-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|