rasti-db 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rasti/db/query.rb +4 -6
- data/lib/rasti/db/version.rb +1 -1
- data/spec/collection_spec.rb +11 -11
- data/spec/query_spec.rb +19 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b41f6198798c9bee6da1f94742378639bb3b900f3bda6471f791b42a71a24c7
|
4
|
+
data.tar.gz: f470e1f1ef5673546e54e6c144e16ebba577b0f848b8fd59c8822489808a7cbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5e836d580a42656efe1d78ee2e193449edd1adf45dbccd0a4b4c9c4d6f263a0d92e844a142abb908a683a8dcad4865d5926aec10b5a0260c0240425dcd063dd
|
7
|
+
data.tar.gz: 71148abafe56a6fe60613f2ebfa38138df2aaa656bdbe7116a834d41f3920fb49b97bfffac3235a520a6ffbb293184310d2d7fcefa552178d1cb767b94ce8e4d
|
data/lib/rasti/db/query.rb
CHANGED
@@ -9,7 +9,7 @@ module Rasti
|
|
9
9
|
def initialize(environment:, collection_class:, dataset:, relations_graph:nil)
|
10
10
|
@environment = environment
|
11
11
|
@collection_class = collection_class
|
12
|
-
@dataset = dataset
|
12
|
+
@dataset = dataset.qualify collection_class.collection_name
|
13
13
|
@relations_graph = relations_graph || Relations::Graph.new(environment, collection_class)
|
14
14
|
end
|
15
15
|
|
@@ -74,11 +74,9 @@ module Rasti
|
|
74
74
|
|
75
75
|
def join(*relations)
|
76
76
|
graph = Relations::Graph.new environment, collection_class, relations
|
77
|
-
|
78
|
-
ds = graph.add_joins(dataset)
|
79
|
-
|
80
|
-
.select_all(collection_class.collection_name)
|
81
|
-
|
77
|
+
|
78
|
+
ds = graph.add_joins(dataset).distinct
|
79
|
+
|
82
80
|
build_query dataset: ds
|
83
81
|
end
|
84
82
|
|
data/lib/rasti/db/version.rb
CHANGED
data/spec/collection_spec.rb
CHANGED
@@ -537,20 +537,20 @@ describe 'Collection' do
|
|
537
537
|
case sql
|
538
538
|
|
539
539
|
when 'SELECT users.* FROM schema_1.users',
|
540
|
-
'SELECT users.* FROM schema_1.users WHERE (id IN (2, 1))'
|
540
|
+
'SELECT users.* FROM schema_1.users WHERE (users.id IN (2, 1))'
|
541
541
|
[
|
542
542
|
{id: 1},
|
543
543
|
{id: 2}
|
544
544
|
]
|
545
545
|
|
546
546
|
when 'SELECT posts.* FROM schema_1.posts',
|
547
|
-
'SELECT posts.* FROM schema_1.posts WHERE (user_id IN (1, 2))'
|
547
|
+
'SELECT posts.* FROM schema_1.posts WHERE (posts.user_id IN (1, 2))'
|
548
548
|
[
|
549
549
|
{id: 3, user_id: 1, language_id: 1},
|
550
550
|
{id: 4, user_id: 2, language_id: 2}
|
551
551
|
]
|
552
552
|
|
553
|
-
when 'SELECT comments.* FROM schema_1.comments WHERE (post_id IN (3, 4))'
|
553
|
+
when 'SELECT comments.* FROM schema_1.comments WHERE (comments.post_id IN (3, 4))'
|
554
554
|
[
|
555
555
|
{id: 5, user_id: 2, post_id: 3},
|
556
556
|
{id: 6, user_id: 1, post_id: 3},
|
@@ -558,7 +558,7 @@ describe 'Collection' do
|
|
558
558
|
{id: 8, user_id: 2, post_id: 4}
|
559
559
|
]
|
560
560
|
|
561
|
-
when 'SELECT languages.* FROM schema_2.languages WHERE (id IN (1, 2))'
|
561
|
+
when 'SELECT languages.* FROM schema_2.languages WHERE (languages.id IN (1, 2))'
|
562
562
|
[
|
563
563
|
{id: 1},
|
564
564
|
{id: 2}
|
@@ -663,7 +663,7 @@ describe 'Collection' do
|
|
663
663
|
stub_users.where(id: [1,2]).limit(1).order(:name).all
|
664
664
|
|
665
665
|
stub_db.sqls.must_equal [
|
666
|
-
'SELECT users.* FROM schema_1.users WHERE (id IN (1, 2)) ORDER BY name LIMIT 1'
|
666
|
+
'SELECT users.* FROM schema_1.users WHERE (users.id IN (1, 2)) ORDER BY users.name LIMIT 1'
|
667
667
|
]
|
668
668
|
end
|
669
669
|
|
@@ -673,13 +673,13 @@ describe 'Collection' do
|
|
673
673
|
stub_db.sqls.must_equal [
|
674
674
|
'SELECT posts.* FROM schema_1.posts',
|
675
675
|
'SELECT categories.*, categories_posts.post_id AS source_foreign_key FROM schema_1.categories INNER JOIN schema_1.categories_posts ON (schema_1.categories_posts.category_id = schema_1.categories.id) WHERE (categories_posts.post_id IN (3, 4))',
|
676
|
-
'SELECT comments.* FROM schema_1.comments WHERE (post_id IN (3, 4))',
|
677
|
-
'SELECT users.* FROM schema_1.users WHERE (id IN (2, 1))',
|
678
|
-
'SELECT posts.* FROM schema_1.posts WHERE (user_id IN (1, 2))',
|
676
|
+
'SELECT comments.* FROM schema_1.comments WHERE (comments.post_id IN (3, 4))',
|
677
|
+
'SELECT users.* FROM schema_1.users WHERE (users.id IN (2, 1))',
|
678
|
+
'SELECT posts.* FROM schema_1.posts WHERE (posts.user_id IN (1, 2))',
|
679
679
|
'SELECT categories.*, categories_posts.post_id AS source_foreign_key FROM schema_1.categories INNER JOIN schema_1.categories_posts ON (schema_1.categories_posts.category_id = schema_1.categories.id) WHERE (categories_posts.post_id IN (3, 4))',
|
680
|
-
'SELECT languages.* FROM schema_2.languages WHERE (id IN (1, 2))',
|
680
|
+
'SELECT languages.* FROM schema_2.languages WHERE (languages.id IN (1, 2))',
|
681
681
|
'SELECT people.*, languages_people.language_id AS source_foreign_key FROM schema_1.people INNER JOIN schema_1.languages_people ON (schema_1.languages_people.document_number = schema_1.people.document_number) WHERE (languages_people.language_id IN (1, 2))',
|
682
|
-
'SELECT users.* FROM schema_1.users WHERE (id IN (1, 2))'
|
682
|
+
'SELECT users.* FROM schema_1.users WHERE (users.id IN (1, 2))'
|
683
683
|
]
|
684
684
|
end
|
685
685
|
|
@@ -687,7 +687,7 @@ describe 'Collection' do
|
|
687
687
|
stub_posts.join('user.person').where(document_number: 'document_1').all
|
688
688
|
|
689
689
|
stub_db.sqls.must_equal [
|
690
|
-
"SELECT DISTINCT posts.* FROM schema_1.posts INNER JOIN schema_1.users AS user ON (user.id = posts.user_id) INNER JOIN schema_1.people AS user__person ON (user__person.user_id = user.id) WHERE (document_number = 'document_1')"
|
690
|
+
"SELECT DISTINCT posts.* FROM schema_1.posts INNER JOIN schema_1.users AS user ON (user.id = posts.user_id) INNER JOIN schema_1.people AS user__person ON (user__person.user_id = user.id) WHERE (posts.document_number = 'document_1')"
|
691
691
|
]
|
692
692
|
end
|
693
693
|
|
data/spec/query_spec.rb
CHANGED
@@ -237,7 +237,7 @@ describe 'Query' do
|
|
237
237
|
end
|
238
238
|
|
239
239
|
it 'To String' do
|
240
|
-
users_query.where(id: [1,2,3]).order(:name).to_s.must_equal '#<Rasti::DB::Query: "SELECT
|
240
|
+
users_query.where(id: [1,2,3]).order(:name).to_s.must_equal '#<Rasti::DB::Query: "SELECT `users`.* FROM `users` WHERE (`users`.`id` IN (1, 2, 3)) ORDER BY `users`.`name`">'
|
241
241
|
end
|
242
242
|
|
243
243
|
describe 'Named queries' do
|
@@ -257,19 +257,19 @@ describe 'Query' do
|
|
257
257
|
describe 'Join' do
|
258
258
|
|
259
259
|
it 'One to Many' do
|
260
|
-
users_query.join(:posts).where(title
|
260
|
+
users_query.join(:posts).where(Sequel[:posts][:title] => 'Sample post').all.must_equal [User.new(id: 2, name: 'User 2')]
|
261
261
|
end
|
262
262
|
|
263
263
|
it 'Many to One' do
|
264
|
-
posts_query.join(:user).where(name
|
264
|
+
posts_query.join(:user).where(Sequel[:user][:name] => 'User 4').all.must_equal [Post.new(id: 3, user_id: 4, title: 'Best post', body: '...', language_id: 1)]
|
265
265
|
end
|
266
266
|
|
267
267
|
it 'One to One' do
|
268
|
-
users_query.join(:person).where(document_number
|
268
|
+
users_query.join(:person).where(Sequel[:person][:document_number] => 'document_1').all.must_equal [User.new(id: 1, name: 'User 1')]
|
269
269
|
end
|
270
270
|
|
271
271
|
it 'Many to Many' do
|
272
|
-
posts_query.join(:categories).where(name
|
272
|
+
posts_query.join(:categories).where(Sequel[:categories][:name] => 'Category 3').order(:id).all.must_equal [
|
273
273
|
Post.new(id: 2, user_id: 1, title: 'Another post', body: '...', language_id: 1),
|
274
274
|
Post.new(id: 3, user_id: 4, title: 'Best post', body: '...', language_id: 1),
|
275
275
|
]
|
@@ -283,6 +283,20 @@ describe 'Query' do
|
|
283
283
|
.must_equal [Post.new(id: 1, user_id: 2, title: 'Sample post', body: '...', language_id: 1)]
|
284
284
|
end
|
285
285
|
|
286
|
+
it 'Excluded attributes permanents excluded when join' do
|
287
|
+
posts_query.join(:user)
|
288
|
+
.exclude_attributes(:body)
|
289
|
+
.where(Sequel[:user][:name] => 'User 4')
|
290
|
+
.all
|
291
|
+
.must_equal [Post.new(id: 3, title: 'Best post', user_id: 4, language_id: 1)]
|
292
|
+
|
293
|
+
posts_query.exclude_attributes(:body)
|
294
|
+
.join(:user)
|
295
|
+
.where(Sequel[:user][:name] => 'User 4')
|
296
|
+
.all
|
297
|
+
.must_equal [Post.new(id: 3, title: 'Best post', user_id: 4, language_id: 1)]
|
298
|
+
end
|
299
|
+
|
286
300
|
describe 'Multiple data sources' do
|
287
301
|
|
288
302
|
it 'One to Many' do
|
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: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|