skydb 0.2.3 → 0.3.0
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 +15 -0
- data/README.md +165 -1
- data/lib/skydb.rb +18 -61
- data/lib/skydb/client.rb +186 -186
- data/lib/skydb/event.rb +47 -76
- data/lib/skydb/property.rb +34 -67
- data/lib/skydb/table.rb +121 -41
- data/lib/skydb/version.rb +1 -1
- data/test/integration/client_test.rb +88 -0
- data/test/test_helper.rb +3 -51
- data/test/unit/client_test.rb +135 -32
- metadata +17 -278
- data/bin/sky +0 -89
- data/lib/ext/hash.rb +0 -11
- data/lib/ext/string.rb +0 -11
- data/lib/ext/treetop.rb +0 -19
- data/lib/skydb/action.rb +0 -76
- data/lib/skydb/import.rb +0 -7
- data/lib/skydb/import/importer.rb +0 -435
- data/lib/skydb/import/transforms/apache.yml +0 -4
- data/lib/skydb/import/transforms/sky.yml +0 -28
- data/lib/skydb/import/transforms/snowplow.yml +0 -1
- data/lib/skydb/import/translator.rb +0 -119
- data/lib/skydb/message.rb +0 -146
- data/lib/skydb/message/add_action.rb +0 -53
- data/lib/skydb/message/add_event.rb +0 -72
- data/lib/skydb/message/add_property.rb +0 -55
- data/lib/skydb/message/create_table.rb +0 -64
- data/lib/skydb/message/delete_table.rb +0 -66
- data/lib/skydb/message/get_action.rb +0 -55
- data/lib/skydb/message/get_actions.rb +0 -38
- data/lib/skydb/message/get_properties.rb +0 -38
- data/lib/skydb/message/get_property.rb +0 -55
- data/lib/skydb/message/get_table.rb +0 -74
- data/lib/skydb/message/get_tables.rb +0 -43
- data/lib/skydb/message/lookup.rb +0 -79
- data/lib/skydb/message/lua/aggregate.rb +0 -63
- data/lib/skydb/message/multi.rb +0 -57
- data/lib/skydb/message/next_actions.rb +0 -55
- data/lib/skydb/message/ping.rb +0 -32
- data/lib/skydb/property/type.rb +0 -40
- data/lib/skydb/query.rb +0 -183
- data/lib/skydb/query/after_condition.rb +0 -104
- data/lib/skydb/query/ast/selection_field_syntax_node.rb +0 -26
- data/lib/skydb/query/ast/selection_fields_syntax_node.rb +0 -16
- data/lib/skydb/query/ast/selection_group_syntax_node.rb +0 -16
- data/lib/skydb/query/ast/selection_groups_syntax_node.rb +0 -16
- data/lib/skydb/query/condition.rb +0 -113
- data/lib/skydb/query/on_condition.rb +0 -53
- data/lib/skydb/query/selection.rb +0 -398
- data/lib/skydb/query/selection_field.rb +0 -99
- data/lib/skydb/query/selection_fields_grammar.treetop +0 -46
- data/lib/skydb/query/selection_fields_parse_error.rb +0 -30
- data/lib/skydb/query/selection_group.rb +0 -78
- data/lib/skydb/query/selection_groups_grammar.treetop +0 -31
- data/lib/skydb/query/selection_groups_parse_error.rb +0 -30
- data/lib/skydb/query/validation_error.rb +0 -8
- data/lib/skydb/timestamp.rb +0 -22
- data/test/integration/query_test.rb +0 -102
- data/test/unit/event_test.rb +0 -32
- data/test/unit/import/importer_test.rb +0 -208
- data/test/unit/import/translator_test.rb +0 -88
- data/test/unit/message/add_action_message_test.rb +0 -34
- data/test/unit/message/add_event_message_test.rb +0 -35
- data/test/unit/message/add_property_message_test.rb +0 -41
- data/test/unit/message/create_table_message_test.rb +0 -34
- data/test/unit/message/delete_table_message_test.rb +0 -34
- data/test/unit/message/get_action_message_test.rb +0 -34
- data/test/unit/message/get_actions_message_test.rb +0 -18
- data/test/unit/message/get_properties_message_test.rb +0 -18
- data/test/unit/message/get_property_message_test.rb +0 -34
- data/test/unit/message/get_table_message_test.rb +0 -19
- data/test/unit/message/get_tables_message_test.rb +0 -18
- data/test/unit/message/lookup_message_test.rb +0 -27
- data/test/unit/message/lua_aggregate_message_test.rb +0 -19
- data/test/unit/message/multi_message_test.rb +0 -22
- data/test/unit/message/next_action_message_test.rb +0 -34
- data/test/unit/message/ping_message_test.rb +0 -18
- data/test/unit/message_test.rb +0 -15
- data/test/unit/query/after_test.rb +0 -89
- data/test/unit/query/on_test.rb +0 -71
- data/test/unit/query/selection_test.rb +0 -273
- data/test/unit/query_test.rb +0 -182
- data/test/unit/skydb_test.rb +0 -20
@@ -1,273 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestQuerySelection < MiniTest::Unit::TestCase
|
4
|
-
##############################################################################
|
5
|
-
#
|
6
|
-
# Setup / Teardown
|
7
|
-
#
|
8
|
-
##############################################################################
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@selection = SkyDB::Query::Selection.new()
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
##############################################################################
|
16
|
-
#
|
17
|
-
# Tests
|
18
|
-
#
|
19
|
-
##############################################################################
|
20
|
-
|
21
|
-
######################################
|
22
|
-
# Field parsing
|
23
|
-
######################################
|
24
|
-
|
25
|
-
def test_parse_single_field
|
26
|
-
fields = SkyDB::Query::Selection.parse_fields("foo")
|
27
|
-
assert_equal 1, fields.length
|
28
|
-
assert_equal "foo", fields[0].expression
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_parse_multiple_fields
|
32
|
-
fields = SkyDB::Query::Selection.parse_fields(" foo , bar, baz_12 ")
|
33
|
-
assert_equal 3, fields.length
|
34
|
-
assert_equal "foo", fields[0].expression
|
35
|
-
assert_equal "bar", fields[1].expression
|
36
|
-
assert_equal "baz_12", fields[2].expression
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_parse_aliased_fields
|
40
|
-
fields = SkyDB::Query::Selection.parse_fields("foo bar, baz bat")
|
41
|
-
assert_equal 2, fields.length
|
42
|
-
assert_equal "foo", fields[0].expression
|
43
|
-
assert_equal "bar", fields[0].alias_name
|
44
|
-
assert_equal "baz", fields[1].expression
|
45
|
-
assert_equal "bat", fields[1].alias_name
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_parse_aggregated_fields
|
49
|
-
fields = SkyDB::Query::Selection.parse_fields("sum(foo), MIN(bar)")
|
50
|
-
assert_equal 2, fields.length
|
51
|
-
assert_equal "foo", fields[0].expression
|
52
|
-
assert_equal :sum, fields[0].aggregation_type
|
53
|
-
assert_equal "bar", fields[1].expression
|
54
|
-
assert_equal :min, fields[1].aggregation_type
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_parse_aliased_aggregated_fields
|
58
|
-
fields = SkyDB::Query::Selection.parse_fields("sum(foo) baz, MIN(bar) bat")
|
59
|
-
assert_equal 2, fields.length
|
60
|
-
assert_equal "foo", fields[0].expression
|
61
|
-
assert_equal "baz", fields[0].alias_name
|
62
|
-
assert_equal :sum, fields[0].aggregation_type
|
63
|
-
assert_equal "bar", fields[1].expression
|
64
|
-
assert_equal "bat", fields[1].alias_name
|
65
|
-
assert_equal :min, fields[1].aggregation_type
|
66
|
-
end
|
67
|
-
|
68
|
-
|
69
|
-
######################################
|
70
|
-
# Group parsing
|
71
|
-
######################################
|
72
|
-
|
73
|
-
def test_parse_single_group
|
74
|
-
groups = SkyDB::Query::Selection.parse_groups("foo")
|
75
|
-
assert_equal 1, groups.length
|
76
|
-
assert_equal "foo", groups[0].expression
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_parse_multiple_groups
|
80
|
-
groups = SkyDB::Query::Selection.parse_groups("foo, bar")
|
81
|
-
assert_equal 2, groups.length
|
82
|
-
assert_equal "foo", groups[0].expression
|
83
|
-
assert_equal "bar", groups[1].expression
|
84
|
-
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
######################################
|
89
|
-
# Aggregation Generation
|
90
|
-
######################################
|
91
|
-
|
92
|
-
def test_simple_codegen
|
93
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("foo, bar my_alias")
|
94
|
-
expected =
|
95
|
-
<<-BLOCK.unindent
|
96
|
-
function select(cursor, data)
|
97
|
-
target = data
|
98
|
-
target.foo = cursor.event.foo()
|
99
|
-
target.my_alias = cursor.event.bar()
|
100
|
-
end
|
101
|
-
BLOCK
|
102
|
-
assert_equal expected, @selection.codegen_select()
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_count_codegen
|
106
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("count() bar")
|
107
|
-
expected =
|
108
|
-
<<-BLOCK.unindent
|
109
|
-
function select(cursor, data)
|
110
|
-
target = data
|
111
|
-
target.bar = (target.bar or 0) + 1
|
112
|
-
end
|
113
|
-
BLOCK
|
114
|
-
assert_equal expected, @selection.codegen_select()
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_sum_codegen
|
118
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("SUM(foo) bar")
|
119
|
-
expected =
|
120
|
-
<<-BLOCK.unindent
|
121
|
-
function select(cursor, data)
|
122
|
-
target = data
|
123
|
-
target.bar = (target.bar or 0) + cursor.event.foo()
|
124
|
-
end
|
125
|
-
BLOCK
|
126
|
-
assert_equal expected, @selection.codegen_select()
|
127
|
-
end
|
128
|
-
|
129
|
-
def test_min_codegen
|
130
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("min(foo) bar")
|
131
|
-
expected =
|
132
|
-
<<-BLOCK.unindent
|
133
|
-
function select(cursor, data)
|
134
|
-
target = data
|
135
|
-
if(target.bar == nil or target.bar > cursor.event.foo()) then
|
136
|
-
target.bar = cursor.event.foo()
|
137
|
-
end
|
138
|
-
end
|
139
|
-
BLOCK
|
140
|
-
assert_equal expected, @selection.codegen_select()
|
141
|
-
end
|
142
|
-
|
143
|
-
def test_max_codegen
|
144
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("max(foo) bar")
|
145
|
-
expected =
|
146
|
-
<<-BLOCK.unindent
|
147
|
-
function select(cursor, data)
|
148
|
-
target = data
|
149
|
-
if(target.bar == nil or target.bar < cursor.event.foo()) then
|
150
|
-
target.bar = cursor.event.foo()
|
151
|
-
end
|
152
|
-
end
|
153
|
-
BLOCK
|
154
|
-
assert_equal expected, @selection.codegen_select()
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_grouped_codegen
|
158
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("foo, bar my_alias")
|
159
|
-
@selection.groups = SkyDB::Query::Selection.parse_groups("baz")
|
160
|
-
expected =
|
161
|
-
<<-BLOCK.unindent
|
162
|
-
function select(cursor, data)
|
163
|
-
target = data
|
164
|
-
|
165
|
-
group_value = cursor.event.baz()
|
166
|
-
if target[group_value] == nil then
|
167
|
-
target[group_value] = {}
|
168
|
-
end
|
169
|
-
target = target[group_value]
|
170
|
-
|
171
|
-
target.foo = cursor.event.foo()
|
172
|
-
target.my_alias = cursor.event.bar()
|
173
|
-
end
|
174
|
-
BLOCK
|
175
|
-
assert_equal expected, @selection.codegen_select()
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_multiple_group_codegen
|
179
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("foo, bar my_alias")
|
180
|
-
@selection.groups = SkyDB::Query::Selection.parse_groups("aaa, bbb, ccc")
|
181
|
-
expected =
|
182
|
-
<<-BLOCK.unindent
|
183
|
-
function select(cursor, data)
|
184
|
-
target = data
|
185
|
-
|
186
|
-
group_value = cursor.event.aaa()
|
187
|
-
if target[group_value] == nil then
|
188
|
-
target[group_value] = {}
|
189
|
-
end
|
190
|
-
target = target[group_value]
|
191
|
-
|
192
|
-
group_value = cursor.event.bbb()
|
193
|
-
if target[group_value] == nil then
|
194
|
-
target[group_value] = {}
|
195
|
-
end
|
196
|
-
target = target[group_value]
|
197
|
-
|
198
|
-
group_value = cursor.event.ccc()
|
199
|
-
if target[group_value] == nil then
|
200
|
-
target[group_value] = {}
|
201
|
-
end
|
202
|
-
target = target[group_value]
|
203
|
-
|
204
|
-
target.foo = cursor.event.foo()
|
205
|
-
target.my_alias = cursor.event.bar()
|
206
|
-
end
|
207
|
-
BLOCK
|
208
|
-
assert_equal expected, @selection.codegen_select()
|
209
|
-
end
|
210
|
-
|
211
|
-
|
212
|
-
######################################
|
213
|
-
# Merge Codegen
|
214
|
-
######################################
|
215
|
-
|
216
|
-
def test_simple_merge_codegen
|
217
|
-
@selection.fields = SkyDB::Query::Selection.parse_fields("foo, sum(bar) my_alias, count(), min(x), max(y)")
|
218
|
-
expected =
|
219
|
-
<<-BLOCK.unindent
|
220
|
-
function merge(results, data)
|
221
|
-
a = results
|
222
|
-
b = data
|
223
|
-
a.foo = b.foo
|
224
|
-
a.my_alias = (a.my_alias or 0) + (b.my_alias or 0)
|
225
|
-
a.count = (a.count or 0) + (b.count or 0)
|
226
|
-
if(a.x == nil or a.x > b.x) then
|
227
|
-
a.x = b.x
|
228
|
-
end
|
229
|
-
if(a.y == nil or a.y < b.y) then
|
230
|
-
a.y = b.y
|
231
|
-
end
|
232
|
-
end
|
233
|
-
BLOCK
|
234
|
-
assert_equal expected, @selection.codegen_merge()
|
235
|
-
end
|
236
|
-
|
237
|
-
def test_grouped_merge_codegen
|
238
|
-
@selection = SkyDB::Query::Selection.new.select("sum(foo), count()").group_by(:bar)
|
239
|
-
expected =
|
240
|
-
<<-BLOCK.unindent
|
241
|
-
function merge(results, data)
|
242
|
-
for k0,v0 in pairs(data) do
|
243
|
-
if results[k0] == nil then results[k0] = {} end
|
244
|
-
a = results[k0]
|
245
|
-
b = data[k0]
|
246
|
-
a.foo = (a.foo or 0) + (b.foo or 0)
|
247
|
-
a.count = (a.count or 0) + (b.count or 0)
|
248
|
-
end
|
249
|
-
end
|
250
|
-
BLOCK
|
251
|
-
assert_equal expected, @selection.codegen_merge()
|
252
|
-
end
|
253
|
-
|
254
|
-
def test_multigroup_merge_codegen
|
255
|
-
@selection = SkyDB::Query::Selection.new.select("sum(foo), count()").group_by(:bar, :baz)
|
256
|
-
expected =
|
257
|
-
<<-BLOCK.unindent
|
258
|
-
function merge(results, data)
|
259
|
-
for k0,v0 in pairs(data) do
|
260
|
-
if results[k0] == nil then results[k0] = {} end
|
261
|
-
for k1,v1 in pairs(data[k0]) do
|
262
|
-
if results[k0][k1] == nil then results[k0][k1] = {} end
|
263
|
-
a = results[k0][k1]
|
264
|
-
b = data[k0][k1]
|
265
|
-
a.foo = (a.foo or 0) + (b.foo or 0)
|
266
|
-
a.count = (a.count or 0) + (b.count or 0)
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
BLOCK
|
271
|
-
assert_equal expected, @selection.codegen_merge()
|
272
|
-
end
|
273
|
-
end
|
data/test/unit/query_test.rb
DELETED
@@ -1,182 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestQuery < MiniTest::Unit::TestCase
|
4
|
-
##############################################################################
|
5
|
-
#
|
6
|
-
# Setup / Teardown
|
7
|
-
#
|
8
|
-
##############################################################################
|
9
|
-
|
10
|
-
def setup
|
11
|
-
@query = SkyDB::Query.new()
|
12
|
-
end
|
13
|
-
|
14
|
-
|
15
|
-
##############################################################################
|
16
|
-
#
|
17
|
-
# Tests
|
18
|
-
#
|
19
|
-
##############################################################################
|
20
|
-
|
21
|
-
######################################
|
22
|
-
# Select
|
23
|
-
######################################
|
24
|
-
|
25
|
-
def test_select
|
26
|
-
@query.select('foo, bar')
|
27
|
-
assert_equal 'foo', @query.selection.fields[0].expression
|
28
|
-
assert_equal 'bar', @query.selection.fields[1].expression
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_select_array
|
32
|
-
@query.select('foo', 'bar')
|
33
|
-
assert_equal 'foo', @query.selection.fields[0].expression
|
34
|
-
assert_equal 'bar', @query.selection.fields[1].expression
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_select_mixed
|
38
|
-
@query.select(:foo, :bar, 'baz, bat')
|
39
|
-
assert_equal 'foo', @query.selection.fields[0].expression
|
40
|
-
assert_equal 'bar', @query.selection.fields[1].expression
|
41
|
-
assert_equal 'baz', @query.selection.fields[2].expression
|
42
|
-
assert_equal 'bat', @query.selection.fields[3].expression
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
######################################
|
47
|
-
# Group by
|
48
|
-
######################################
|
49
|
-
|
50
|
-
def test_group_by
|
51
|
-
@query.select(:foo, :bar).group_by('baz, bat', :xxx)
|
52
|
-
assert_equal 'foo', @query.selection.fields[0].expression
|
53
|
-
assert_equal 'bar', @query.selection.fields[1].expression
|
54
|
-
assert_equal 'baz', @query.selection.groups[0].expression
|
55
|
-
assert_equal 'bat', @query.selection.groups[1].expression
|
56
|
-
assert_equal 'xxx', @query.selection.groups[2].expression
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
######################################
|
61
|
-
# After
|
62
|
-
######################################
|
63
|
-
|
64
|
-
def test_after
|
65
|
-
@query.select('count()').after('foo')
|
66
|
-
assert_equal :count, @query.selection.fields[0].aggregation_type
|
67
|
-
assert_equal 'foo', @query.selection.conditions[0].action.name
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_after_with_hash
|
71
|
-
@query.select('count()').after(:action => 'foo')
|
72
|
-
assert_equal 'foo', @query.selection.conditions[0].action.name
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
######################################
|
77
|
-
# Codegen
|
78
|
-
######################################
|
79
|
-
|
80
|
-
def test_codegen
|
81
|
-
@query.select('count()').after(10).after(20)
|
82
|
-
expected =
|
83
|
-
<<-BLOCK.unindent
|
84
|
-
function select(cursor, data)
|
85
|
-
target = data
|
86
|
-
target.count = (target.count or 0) + 1
|
87
|
-
end
|
88
|
-
|
89
|
-
function __condition1(cursor, data)
|
90
|
-
if cursor:eos() or cursor:eof() then return false end
|
91
|
-
repeat
|
92
|
-
if cursor.event.action_id == 10 then
|
93
|
-
cursor:next()
|
94
|
-
return true
|
95
|
-
end
|
96
|
-
until not cursor:next()
|
97
|
-
return false
|
98
|
-
end
|
99
|
-
|
100
|
-
function __condition2(cursor, data)
|
101
|
-
if cursor:eos() or cursor:eof() then return false end
|
102
|
-
repeat
|
103
|
-
if cursor.event.action_id == 20 then
|
104
|
-
cursor:next()
|
105
|
-
return true
|
106
|
-
end
|
107
|
-
until not cursor:next()
|
108
|
-
return false
|
109
|
-
end
|
110
|
-
|
111
|
-
function select_all(cursor, data)
|
112
|
-
while cursor:next_session() do
|
113
|
-
while cursor:next() do
|
114
|
-
if __condition1(cursor, data) and __condition2(cursor, data) then
|
115
|
-
select(cursor, data)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
function merge(results, data)
|
122
|
-
a = results
|
123
|
-
b = data
|
124
|
-
a.count = (a.count or 0) + (b.count or 0)
|
125
|
-
end
|
126
|
-
|
127
|
-
function aggregate(cursor, data)
|
128
|
-
select_all(cursor, data)
|
129
|
-
end
|
130
|
-
BLOCK
|
131
|
-
assert_equal expected.chomp, @query.codegen().chomp
|
132
|
-
end
|
133
|
-
|
134
|
-
def test_codegen_with_session
|
135
|
-
@query.session(7200).select('count()')
|
136
|
-
expected =
|
137
|
-
<<-BLOCK.unindent
|
138
|
-
function select(cursor, data)
|
139
|
-
target = data
|
140
|
-
target.count = (target.count or 0) + 1
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
function select_all(cursor, data)
|
145
|
-
while cursor:next_session() do
|
146
|
-
while cursor:next() do
|
147
|
-
if true then
|
148
|
-
select(cursor, data)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
function merge(results, data)
|
155
|
-
a = results
|
156
|
-
b = data
|
157
|
-
a.count = (a.count or 0) + (b.count or 0)
|
158
|
-
end
|
159
|
-
|
160
|
-
function aggregate(cursor, data)
|
161
|
-
cursor:set_session_idle(7200)
|
162
|
-
select_all(cursor, data)
|
163
|
-
end
|
164
|
-
BLOCK
|
165
|
-
assert_equal expected.chomp, @query.codegen().chomp
|
166
|
-
end
|
167
|
-
|
168
|
-
|
169
|
-
######################################
|
170
|
-
# Serialization
|
171
|
-
######################################
|
172
|
-
|
173
|
-
def test_to_hash
|
174
|
-
@query.select('count()').group_by("action_id").on(:enter).after(:action => 10, :within => {:quantity => 1, :unit => 'step'}).after(20)
|
175
|
-
assert_equal IO.read("fixtures/unit/query/query.json"), JSON.pretty_generate(@query.to_hash)
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_from_json
|
179
|
-
@query.from_hash(JSON.parse(IO.read("fixtures/unit/query/query.json")))
|
180
|
-
assert_equal IO.read("fixtures/unit/query/query.json"), JSON.pretty_generate(@query.to_hash)
|
181
|
-
end
|
182
|
-
end
|