groonga-query-log 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/text/news.md +15 -0
- data/lib/groonga/query-log/command/detect-memory-leak.rb +1 -0
- data/lib/groonga/query-log/command/replay.rb +1 -0
- data/lib/groonga/query-log/parser.rb +3 -1
- data/lib/groonga/query-log/version.rb +1 -1
- data/test/test-parser.rb +137 -1
- metadata +25 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c26ff585a73f2e6091da363ac4b4fe02aeddf420
|
4
|
+
data.tar.gz: 7d9e5c1965f7d3e208257be44893e189dd59a15a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50495861548b4c83bd5d8d7b7ba9aa2e4cca02a809029eec84aa2bce150cca688c5dc77b4fd50fa37447f178481dfcdac7a268d469311385770c40135c3be846
|
7
|
+
data.tar.gz: fc6b3040396bcd0443a67c6df6bfeaeccd3aec0713905230d1c139b5f177480d7eaea2bb0750a2a51aa3ac5c1ec7f21d5337987c021576962d17d9984e70b986
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.2.6: 2017-05-31
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* Supported changed query log format since Groonga 7.0.1. The output
|
8
|
+
format is changed about dynamic columns, drilldown, labeled
|
9
|
+
drilldown, but groonga-query-log still supports previous format.
|
10
|
+
|
11
|
+
* groonga-query-log-extract: Fixed to ignore empty command not to
|
12
|
+
raise exception error.
|
13
|
+
|
14
|
+
* groonga-query-log-detect-memory-leak
|
15
|
+
groonga-query-log-replay: Fixed uninitialized constant error when
|
16
|
+
executing command.
|
17
|
+
|
3
18
|
## 1.2.5: 2017-05-08
|
4
19
|
|
5
20
|
### Fixes
|
@@ -64,13 +64,15 @@ module Groonga
|
|
64
64
|
def parse_line(time_stamp, context_id, type, rest, &block)
|
65
65
|
case type
|
66
66
|
when ">"
|
67
|
+
return if rest.empty?
|
67
68
|
statistic = create_statistic(context_id)
|
68
69
|
statistic.start(time_stamp, rest)
|
69
70
|
@parsing_statistics[context_id] = statistic
|
70
71
|
when ":"
|
71
|
-
return unless /\A(\d+) (.+)\((\d+)\)
|
72
|
+
return unless /\A(\d+) (.+)\((\d+)\)(\[.+\])?/ =~ rest
|
72
73
|
elapsed = $1
|
73
74
|
name = $2
|
75
|
+
name += $4 if $4
|
74
76
|
n_records = $3.to_i
|
75
77
|
statistic = @parsing_statistics[context_id]
|
76
78
|
return if statistic.nil?
|
data/test/test-parser.rb
CHANGED
@@ -113,7 +113,7 @@ class ParserTest < Test::Unit::TestCase
|
|
113
113
|
assert_equal([0], statistics.collect(&:return_code))
|
114
114
|
end
|
115
115
|
|
116
|
-
def
|
116
|
+
def test_failure
|
117
117
|
statistics = parse(<<-LOG)
|
118
118
|
2012-12-13 11:15:21.628105|0x7fff148c8a50|>table_create --name Videos
|
119
119
|
2012-12-13 11:15:21.645119|0x7fff148c8a50|<000000017041150 rc=-22
|
@@ -121,4 +121,140 @@ class ParserTest < Test::Unit::TestCase
|
|
121
121
|
assert_equal([-22], statistics.collect(&:return_code))
|
122
122
|
end
|
123
123
|
end
|
124
|
+
|
125
|
+
class FormatCompatibilityTest < self
|
126
|
+
class DynamicColumnsTest < self
|
127
|
+
def test_no_labeled_columns
|
128
|
+
statistics = parse(<<-LOG)
|
129
|
+
2017-05-30 19:11:37.932576|0x7ffc6ae1ba20|>select Items --columns[price_with_tax].stage initial --columns[price_with_tax].type UInt32 --columns[price_with_tax].flags COLUMN_SCALAR --columns[price_with_tax].value 'price * 1.08' --filter 'price_with_tax > 550'
|
130
|
+
2017-05-30 19:11:37.976349|0x7ffc6ae1ba20|:000000043784801 filter(3)
|
131
|
+
2017-05-30 19:11:37.976383|0x7ffc6ae1ba20|:000000043808671 select(3)
|
132
|
+
2017-05-30 19:11:37.976534|0x7ffc6ae1ba20|:000000043961723 output(3)
|
133
|
+
2017-05-30 19:11:37.976650|0x7ffc6ae1ba20|<000000044078013 rc=0
|
134
|
+
LOG
|
135
|
+
operations = statistics.first.operations.collect do |operation|
|
136
|
+
[operation[:name], operation[:n_records]]
|
137
|
+
end
|
138
|
+
expected = [
|
139
|
+
["filter", 3],
|
140
|
+
["select", 3],
|
141
|
+
["output", 3]
|
142
|
+
]
|
143
|
+
assert_equal(expected, operations)
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_labeled_columns
|
147
|
+
statistics = parse(<<-LOG)
|
148
|
+
2017-05-30 19:11:38.036856|0x7fffb7d8d9b0|>select Items --columns[price_with_tax].stage initial --columns[price_with_tax].type UInt32 --columns[price_with_tax].flags COLUMN_SCALAR --columns[price_with_tax].value 'price * 1.08' --filter 'price_with_tax > 550'
|
149
|
+
2017-05-30 19:11:38.037234|0x7fffb7d8d9b0|:000000000381368 columns[price_with_tax](6)
|
150
|
+
2017-05-30 19:11:38.085663|0x7fffb7d8d9b0|:000000048816481 filter(3)
|
151
|
+
2017-05-30 19:11:38.085691|0x7fffb7d8d9b0|:000000048837085 select(3)
|
152
|
+
2017-05-30 19:11:38.085825|0x7fffb7d8d9b0|:000000048972310 output(3)
|
153
|
+
2017-05-30 19:11:38.085929|0x7fffb7d8d9b0|<000000049076026 rc=0
|
154
|
+
LOG
|
155
|
+
operations = statistics.first.operations.collect do |operation|
|
156
|
+
[operation[:name], operation[:n_records]]
|
157
|
+
end
|
158
|
+
expected = [
|
159
|
+
["columns[price_with_tax]", 6],
|
160
|
+
["filter", 3],
|
161
|
+
["select", 3],
|
162
|
+
["output", 3]
|
163
|
+
]
|
164
|
+
assert_equal(expected, operations)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
class DrilldownTest < self
|
169
|
+
def test_no_output_drilldown
|
170
|
+
statistics = parse(<<-LOG)
|
171
|
+
2017-05-31 11:22:19.928613|0x7ffe470b0cc0|>select Memos --drilldown tag
|
172
|
+
2017-05-31 11:22:19.928705|0x7ffe470b0cc0|:000000000095083 select(4)
|
173
|
+
2017-05-31 11:22:19.929002|0x7ffe470b0cc0|:000000000393647 output(4)
|
174
|
+
2017-05-31 11:22:19.929040|0x7ffe470b0cc0|:000000000428917 drilldown(3)
|
175
|
+
2017-05-31 11:22:19.929109|0x7ffe470b0cc0|<000000000498630 rc=0
|
176
|
+
LOG
|
177
|
+
operations = statistics.first.operations.collect do |operation|
|
178
|
+
[operation[:name], operation[:n_records]]
|
179
|
+
end
|
180
|
+
expected = [
|
181
|
+
["select", 4],
|
182
|
+
["output", 4],
|
183
|
+
["drilldown", 3]
|
184
|
+
]
|
185
|
+
assert_equal(expected, operations)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_output_drilldown
|
189
|
+
statistics = parse(<<-LOG)
|
190
|
+
2017-05-31 11:22:19.977081|0x7ffec4a59cd0|>select Memos --drilldown tag
|
191
|
+
2017-05-31 11:22:19.977214|0x7ffec4a59cd0|:000000000138164 select(4)
|
192
|
+
2017-05-31 11:22:19.977381|0x7ffec4a59cd0|:000000000304772 drilldown(3)
|
193
|
+
2017-05-31 11:22:19.977572|0x7ffec4a59cd0|:000000000495092 output(4)
|
194
|
+
2017-05-31 11:22:19.977615|0x7ffec4a59cd0|:000000000535908 output.drilldown(3)
|
195
|
+
2017-05-31 11:22:19.977701|0x7ffec4a59cd0|<000000000623964 rc=0
|
196
|
+
LOG
|
197
|
+
operations = statistics.first.operations.collect do |operation|
|
198
|
+
[operation[:name], operation[:n_records]]
|
199
|
+
end
|
200
|
+
expected = [
|
201
|
+
["select", 4],
|
202
|
+
["drilldown", 3],
|
203
|
+
["output", 4],
|
204
|
+
["output.drilldown", 3]
|
205
|
+
]
|
206
|
+
assert_equal(expected, operations)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
class LabeledDrilldownTest < self
|
211
|
+
def test_no_output_drilldown
|
212
|
+
statistics = parse(<<-LOG)
|
213
|
+
2017-05-31 11:22:19.683806|0x7ffc1ee41940|>select Shops --drilldown[item].keys items --drilldown[item].sortby price --drilldown[item].output_columns _key,_nsubrecs,price,price_with_tax --drilldown[item].columns[price_with_tax].stage initial --drilldown[item].columns[price_with_tax].type UInt32 --drilldown[item].columns[price_with_tax].flags COLUMN_SCALAR --drilldown[item].columns[price_with_tax].value 'price * 1.08' --drilldown[real_price].table item --drilldown[real_price].keys price_with_tax
|
214
|
+
2017-05-31 11:22:19.683980|0x7ffc1ee41940|:000000000176192 select(3)
|
215
|
+
2017-05-31 11:22:19.684356|0x7ffc1ee41940|:000000000553162 output(3)
|
216
|
+
2017-05-31 11:22:19.684468|0x7ffc1ee41940|:000000000665698 drilldown(6)[item]
|
217
|
+
2017-05-31 11:22:19.684488|0x7ffc1ee41940|:000000000683901 drilldown(3)[real_price]
|
218
|
+
2017-05-31 11:22:19.684558|0x7ffc1ee41940|<000000000754417 rc=0
|
219
|
+
LOG
|
220
|
+
operations = statistics.first.operations.collect do |operation|
|
221
|
+
[operation[:name], operation[:n_records]]
|
222
|
+
end
|
223
|
+
expected = [
|
224
|
+
["select", 3],
|
225
|
+
["output", 3],
|
226
|
+
["drilldown[item]", 6],
|
227
|
+
["drilldown[real_price]", 3]
|
228
|
+
]
|
229
|
+
assert_equal(expected, operations)
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_output_drilldown
|
233
|
+
statistics = parse(<<-LOG)
|
234
|
+
2017-05-31 11:22:19.758189|0x7ffd1fc97890|>select Shops --drilldown[item].keys items --drilldown[item].sortby price --drilldown[item].output_columns _key,_nsubrecs,price,price_with_tax --drilldown[item].columns[price_with_tax].stage initial --drilldown[item].columns[price_with_tax].type UInt32 --drilldown[item].columns[price_with_tax].flags COLUMN_SCALAR --drilldown[item].columns[price_with_tax].value 'price * 1.08' --drilldown[real_price].table item --drilldown[real_price].keys price_with_tax
|
235
|
+
2017-05-31 11:22:19.758462|0x7ffd1fc97890|:000000000276579 select(3)
|
236
|
+
2017-05-31 11:22:19.758727|0x7ffd1fc97890|:000000000542224 columns[price_with_tax](6)
|
237
|
+
2017-05-31 11:22:19.758738|0x7ffd1fc97890|:000000000550409 drilldowns[item](6)
|
238
|
+
2017-05-31 11:22:19.758806|0x7ffd1fc97890|:000000000619409 drilldowns[real_price](3)
|
239
|
+
2017-05-31 11:22:19.758915|0x7ffd1fc97890|:000000000729209 output(3)
|
240
|
+
2017-05-31 11:22:19.759015|0x7ffd1fc97890|:000000000829476 output.drilldowns[item](6)
|
241
|
+
2017-05-31 11:22:19.759034|0x7ffd1fc97890|:000000000847090 output.drilldowns[real_price](3)
|
242
|
+
2017-05-31 11:22:19.759103|0x7ffd1fc97890|<000000000916234 rc=0
|
243
|
+
LOG
|
244
|
+
operations = statistics.first.operations.collect do |operation|
|
245
|
+
[operation[:name], operation[:n_records]]
|
246
|
+
end
|
247
|
+
expected = [
|
248
|
+
["select", 3],
|
249
|
+
["columns[price_with_tax]", 6],
|
250
|
+
["drilldowns[item]", 6],
|
251
|
+
["drilldowns[real_price]", 3],
|
252
|
+
["output", 3],
|
253
|
+
["output.drilldowns[item]", 6],
|
254
|
+
["output.drilldowns[real_price]", 3]
|
255
|
+
]
|
256
|
+
assert_equal(expected, operations)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
124
260
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groonga-query-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-05-
|
11
|
+
date: 2017-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: groonga-command-parser
|
@@ -154,15 +154,15 @@ description: ''
|
|
154
154
|
email:
|
155
155
|
- kou@clear-code.com
|
156
156
|
executables:
|
157
|
-
- groonga-query-log-
|
157
|
+
- groonga-query-log-show-running-queries
|
158
158
|
- groonga-query-log-run-regression-test
|
159
|
-
- groonga-query-log-analyze
|
160
|
-
- groonga-query-log-verify-server
|
161
159
|
- groonga-query-log-check-command-version-compatibility
|
160
|
+
- groonga-query-log-analyze
|
162
161
|
- groonga-query-log-detect-memory-leak
|
163
162
|
- groonga-query-log-format-regression-test-logs
|
164
|
-
- groonga-query-log-
|
163
|
+
- groonga-query-log-extract
|
165
164
|
- groonga-query-log-replay
|
165
|
+
- groonga-query-log-verify-server
|
166
166
|
extensions: []
|
167
167
|
extra_rdoc_files: []
|
168
168
|
files:
|
@@ -261,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
261
261
|
version: '0'
|
262
262
|
requirements: []
|
263
263
|
rubyforge_project:
|
264
|
-
rubygems_version: 2.
|
264
|
+
rubygems_version: 2.6.11
|
265
265
|
signing_key:
|
266
266
|
specification_version: 4
|
267
267
|
summary: Groonga-query-log is a collection of library and tools to process [Groonga](http://groonga.org/)'s
|
@@ -269,33 +269,33 @@ summary: Groonga-query-log is a collection of library and tools to process [Groo
|
|
269
269
|
as a library. You can analyze your Groonga's queries and test with your Groonga's
|
270
270
|
query log by using groonga-query-log as a tool.
|
271
271
|
test_files:
|
272
|
-
- test/test-
|
272
|
+
- test/test-analyzer.rb
|
273
|
+
- test/helper.rb
|
274
|
+
- test/test-incompatibility-detector.rb
|
275
|
+
- test/command/test-format-regression-test-logs.rb
|
276
|
+
- test/command/test-extract.rb
|
273
277
|
- test/run-test.rb
|
274
|
-
- test/test-replayer.rb
|
275
278
|
- test/test-parser.rb
|
276
|
-
- test/helper.rb
|
277
|
-
- test/fixtures/query.log
|
278
|
-
- test/fixtures/n_entries.expected
|
279
|
-
- test/fixtures/other-query.log
|
280
279
|
- test/fixtures/no-report-summary.expected
|
280
|
+
- test/fixtures/target-tables.expected
|
281
|
+
- test/fixtures/target-commands.expected
|
282
|
+
- test/fixtures/n_entries.expected
|
281
283
|
- test/fixtures/reporter/json-stream.expected
|
284
|
+
- test/fixtures/reporter/console.expected
|
282
285
|
- test/fixtures/reporter/json.expected
|
283
286
|
- test/fixtures/reporter/html.expected
|
284
|
-
- test/fixtures/
|
287
|
+
- test/fixtures/order/elapsed.expected
|
288
|
+
- test/fixtures/order/-elapsed.expected
|
289
|
+
- test/fixtures/order/start-time.expected
|
290
|
+
- test/fixtures/order/-start-time.expected
|
285
291
|
- test/fixtures/regression-test-logs/command-format.log
|
286
292
|
- test/fixtures/regression-test-logs/url-format.log
|
287
|
-
- test/fixtures/target-commands.expected
|
288
|
-
- test/fixtures/multi.expected
|
289
293
|
- test/fixtures/run-regression-test/query-logs/query.log
|
290
294
|
- test/fixtures/run-regression-test/schema/schema.grn
|
291
295
|
- test/fixtures/run-regression-test/indexes/indexes.grn
|
292
296
|
- test/fixtures/run-regression-test/data/data.grn
|
293
|
-
- test/fixtures/
|
294
|
-
- test/fixtures/
|
295
|
-
- test/fixtures/
|
296
|
-
- test/
|
297
|
-
- test/
|
298
|
-
- test/command/test-format-regression-test-logs.rb
|
299
|
-
- test/command/test-extract.rb
|
300
|
-
- test/test-analyzer.rb
|
301
|
-
- test/test-incompatibility-detector.rb
|
297
|
+
- test/fixtures/other-query.log
|
298
|
+
- test/fixtures/multi.expected
|
299
|
+
- test/fixtures/query.log
|
300
|
+
- test/test-response-comparer.rb
|
301
|
+
- test/test-replayer.rb
|