rasti-db 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/README.md +8 -0
- data/lib/rasti/db.rb +9 -18
- data/lib/rasti/db/collection.rb +1 -1
- data/lib/rasti/db/nql/invalid_expression_error.rb +19 -0
- data/lib/rasti/db/nql/nodes/binary_node.rb +25 -0
- data/lib/rasti/db/nql/nodes/comparisons/base.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/equal.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/greater_than.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/greater_than_or_equal.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/include.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/less_than.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/less_than_or_equal.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/like.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/not_equal.rb +17 -0
- data/lib/rasti/db/nql/nodes/comparisons/not_include.rb +17 -0
- data/lib/rasti/db/nql/nodes/conjunction.rb +15 -0
- data/lib/rasti/db/nql/nodes/constants/false.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/float.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/integer.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/literal_string.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/string.rb +17 -0
- data/lib/rasti/db/nql/nodes/constants/time.rb +23 -0
- data/lib/rasti/db/nql/nodes/constants/true.rb +17 -0
- data/lib/rasti/db/nql/nodes/disjunction.rb +15 -0
- data/lib/rasti/db/nql/nodes/field.rb +23 -0
- data/lib/rasti/db/nql/nodes/parenthesis_sentence.rb +19 -0
- data/lib/rasti/db/nql/nodes/sentence.rb +19 -0
- data/lib/rasti/db/nql/syntax.rb +2266 -0
- data/lib/rasti/db/nql/syntax.treetop +168 -0
- data/lib/rasti/db/query.rb +15 -0
- data/lib/rasti/db/relations/graph_builder.rb +3 -3
- data/lib/rasti/db/version.rb +1 -1
- data/rasti-db.gemspec +3 -1
- data/spec/coverage_helper.rb +5 -1
- data/spec/nql/dependency_tables_spec.rb +35 -0
- data/spec/nql/filter_condition_spec.rb +146 -0
- data/spec/nql/syntax_parser_spec.rb +209 -0
- data/spec/query_spec.rb +53 -0
- metadata +68 -2
data/spec/query_spec.rb
CHANGED
@@ -177,4 +177,57 @@ describe 'Query' do
|
|
177
177
|
|
178
178
|
end
|
179
179
|
|
180
|
+
describe 'NQL' do
|
181
|
+
|
182
|
+
before do
|
183
|
+
1.upto(10) do |i|
|
184
|
+
db[:people].insert user_id: i,
|
185
|
+
document_number: i,
|
186
|
+
first_name: "Name #{i}",
|
187
|
+
last_name: "Last Name #{i}",
|
188
|
+
birth_date: Time.now
|
189
|
+
end
|
190
|
+
|
191
|
+
1.upto(3) { |i| db[:categories].insert name: "Category #{i}" }
|
192
|
+
|
193
|
+
db[:comments].insert post_id: 1, user_id: 5, text: 'Comment 1'
|
194
|
+
db[:comments].insert post_id: 1, user_id: 7, text: 'Comment 2'
|
195
|
+
db[:comments].insert post_id: 2, user_id: 2, text: 'Comment 3'
|
196
|
+
|
197
|
+
db[:categories_posts].insert post_id: 1, category_id: 1
|
198
|
+
db[:categories_posts].insert post_id: 1, category_id: 2
|
199
|
+
db[:categories_posts].insert post_id: 2, category_id: 2
|
200
|
+
db[:categories_posts].insert post_id: 2, category_id: 3
|
201
|
+
db[:categories_posts].insert post_id: 3, category_id: 3
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'Invalid expression' do
|
205
|
+
error = proc { posts_query.nql('a + b') }.must_raise Rasti::DB::NQL::InvalidExpressionError
|
206
|
+
error.message.must_equal 'Invalid filter expression: a + b'
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'Filter to self table' do
|
210
|
+
people_query = Rasti::DB::Query.new People, db[:people]
|
211
|
+
|
212
|
+
people_query.nql('user_id > 7')
|
213
|
+
.map(&:user_id)
|
214
|
+
.sort
|
215
|
+
.must_equal [8, 9, 10]
|
216
|
+
end
|
217
|
+
|
218
|
+
it 'Filter to join table' do
|
219
|
+
posts_query.nql('categories.name = Category 2')
|
220
|
+
.map(&:id)
|
221
|
+
.sort
|
222
|
+
.must_equal [1, 2]
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'Filter to 2nd order relation' do
|
226
|
+
posts_query.nql('comments.user.person.document_number = 7')
|
227
|
+
.map(&:id)
|
228
|
+
.must_equal [1]
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
180
233
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: treetop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.4.8
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.4.8
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: consty
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,6 +98,20 @@ dependencies:
|
|
84
98
|
- - ">="
|
85
99
|
- !ruby/object:Gem::Version
|
86
100
|
version: 0.0.2
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: multi_require
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - "~>"
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '1.0'
|
108
|
+
type: :runtime
|
109
|
+
prerelease: false
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - "~>"
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '1.0'
|
87
115
|
- !ruby/object:Gem::Dependency
|
88
116
|
name: bundler
|
89
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,6 +147,9 @@ dependencies:
|
|
119
147
|
- - "~>"
|
120
148
|
- !ruby/object:Gem::Version
|
121
149
|
version: '5.0'
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '5.11'
|
122
153
|
type: :development
|
123
154
|
prerelease: false
|
124
155
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -126,6 +157,9 @@ dependencies:
|
|
126
157
|
- - "~>"
|
127
158
|
- !ruby/object:Gem::Version
|
128
159
|
version: '5.0'
|
160
|
+
- - "<"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '5.11'
|
129
163
|
- !ruby/object:Gem::Dependency
|
130
164
|
name: minitest-colorin
|
131
165
|
requirement: !ruby/object:Gem::Requirement
|
@@ -231,6 +265,32 @@ files:
|
|
231
265
|
- lib/rasti/db/collection.rb
|
232
266
|
- lib/rasti/db/helpers.rb
|
233
267
|
- lib/rasti/db/model.rb
|
268
|
+
- lib/rasti/db/nql/invalid_expression_error.rb
|
269
|
+
- lib/rasti/db/nql/nodes/binary_node.rb
|
270
|
+
- lib/rasti/db/nql/nodes/comparisons/base.rb
|
271
|
+
- lib/rasti/db/nql/nodes/comparisons/equal.rb
|
272
|
+
- lib/rasti/db/nql/nodes/comparisons/greater_than.rb
|
273
|
+
- lib/rasti/db/nql/nodes/comparisons/greater_than_or_equal.rb
|
274
|
+
- lib/rasti/db/nql/nodes/comparisons/include.rb
|
275
|
+
- lib/rasti/db/nql/nodes/comparisons/less_than.rb
|
276
|
+
- lib/rasti/db/nql/nodes/comparisons/less_than_or_equal.rb
|
277
|
+
- lib/rasti/db/nql/nodes/comparisons/like.rb
|
278
|
+
- lib/rasti/db/nql/nodes/comparisons/not_equal.rb
|
279
|
+
- lib/rasti/db/nql/nodes/comparisons/not_include.rb
|
280
|
+
- lib/rasti/db/nql/nodes/conjunction.rb
|
281
|
+
- lib/rasti/db/nql/nodes/constants/false.rb
|
282
|
+
- lib/rasti/db/nql/nodes/constants/float.rb
|
283
|
+
- lib/rasti/db/nql/nodes/constants/integer.rb
|
284
|
+
- lib/rasti/db/nql/nodes/constants/literal_string.rb
|
285
|
+
- lib/rasti/db/nql/nodes/constants/string.rb
|
286
|
+
- lib/rasti/db/nql/nodes/constants/time.rb
|
287
|
+
- lib/rasti/db/nql/nodes/constants/true.rb
|
288
|
+
- lib/rasti/db/nql/nodes/disjunction.rb
|
289
|
+
- lib/rasti/db/nql/nodes/field.rb
|
290
|
+
- lib/rasti/db/nql/nodes/parenthesis_sentence.rb
|
291
|
+
- lib/rasti/db/nql/nodes/sentence.rb
|
292
|
+
- lib/rasti/db/nql/syntax.rb
|
293
|
+
- lib/rasti/db/nql/syntax.treetop
|
234
294
|
- lib/rasti/db/query.rb
|
235
295
|
- lib/rasti/db/relations/base.rb
|
236
296
|
- lib/rasti/db/relations/graph_builder.rb
|
@@ -250,6 +310,9 @@ files:
|
|
250
310
|
- spec/coverage_helper.rb
|
251
311
|
- spec/minitest_helper.rb
|
252
312
|
- spec/model_spec.rb
|
313
|
+
- spec/nql/dependency_tables_spec.rb
|
314
|
+
- spec/nql/filter_condition_spec.rb
|
315
|
+
- spec/nql/syntax_parser_spec.rb
|
253
316
|
- spec/query_spec.rb
|
254
317
|
- spec/relations_spec.rb
|
255
318
|
- spec/type_converters/postgres_spec.rb
|
@@ -283,6 +346,9 @@ test_files:
|
|
283
346
|
- spec/coverage_helper.rb
|
284
347
|
- spec/minitest_helper.rb
|
285
348
|
- spec/model_spec.rb
|
349
|
+
- spec/nql/dependency_tables_spec.rb
|
350
|
+
- spec/nql/filter_condition_spec.rb
|
351
|
+
- spec/nql/syntax_parser_spec.rb
|
286
352
|
- spec/query_spec.rb
|
287
353
|
- spec/relations_spec.rb
|
288
354
|
- spec/type_converters/postgres_spec.rb
|