neo4j 5.0.9 → 5.0.10
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70f94d10009b5997fd9e16e1c54d3d8aba81e014
|
4
|
+
data.tar.gz: 9b6e7e245073f7f297c412c974a2593c9814dad2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 118af5e336d8da2859e2e784df7af9dc7fdf4d1bd4c30cc2e33e7df1a76ad32defae44313d5fc03dfa10884079a5fbc0bd20932df6ae68c122eb2e0a4af4a10e
|
7
|
+
data.tar.gz: 28311d4abb96271ee9abdf5a7a3c6df7ec2e36c4c1481ecd21464b71fa784e3822d5d9d7ff4651dcbc6e70d60e05138caf74cb249acac74c935fa05854aec8fe
|
@@ -54,9 +54,6 @@ module Neo4j::ActiveNode
|
|
54
54
|
|
55
55
|
def cache_query_proxy_result
|
56
56
|
@query_proxy.to_a.tap do |result|
|
57
|
-
result.each do |object|
|
58
|
-
object.instance_variable_set('@association_proxy', self)
|
59
|
-
end
|
60
57
|
cache_result(result)
|
61
58
|
end
|
62
59
|
end
|
@@ -128,10 +125,10 @@ module Neo4j::ActiveNode
|
|
128
125
|
name = name.to_sym
|
129
126
|
hash = [name, options.values_at(:node, :rel, :labels)].hash
|
130
127
|
association_proxy_cache_fetch(hash) do
|
131
|
-
if
|
132
|
-
result_by_previous_id =
|
128
|
+
if result_cache = self.instance_variable_get('@source_query_proxy_result_cache')
|
129
|
+
result_by_previous_id = previous_proxy_results_by_previous_id(result_cache, name)
|
133
130
|
|
134
|
-
|
131
|
+
result_cache.inject(nil) do |proxy_to_return, object|
|
135
132
|
proxy = fresh_association_proxy(name, options, result_by_previous_id[object.neo_id])
|
136
133
|
|
137
134
|
object.association_proxy_cache[hash] = proxy
|
@@ -150,9 +147,9 @@ module Neo4j::ActiveNode
|
|
150
147
|
AssociationProxy.new(association_query_proxy(name, options), cached_result)
|
151
148
|
end
|
152
149
|
|
153
|
-
def
|
154
|
-
query_proxy = self.class.as(:previous).where(neo_id:
|
155
|
-
query_proxy = self.class.send(:association_query_proxy, association_name, previous_query_proxy: query_proxy, node: :next)
|
150
|
+
def previous_proxy_results_by_previous_id(result_cache, association_name)
|
151
|
+
query_proxy = self.class.as(:previous).where(neo_id: result_cache.map(&:neo_id))
|
152
|
+
query_proxy = self.class.send(:association_query_proxy, association_name, previous_query_proxy: query_proxy, node: :next, optional: true)
|
156
153
|
|
157
154
|
Hash[*query_proxy.pluck('ID(previous)', 'collect(next)').flatten(1)]
|
158
155
|
end
|
@@ -345,7 +342,7 @@ module Neo4j::ActiveNode
|
|
345
342
|
|
346
343
|
def association_query_proxy(name, options = {})
|
347
344
|
previous_query_proxy = options[:previous_query_proxy] || current_scope
|
348
|
-
query_proxy = previous_query_proxy || default_association_query_proxy
|
345
|
+
query_proxy = previous_query_proxy || default_association_query_proxy
|
349
346
|
Neo4j::ActiveNode::Query::QueryProxy.new(association_target_class(name),
|
350
347
|
associations[name],
|
351
348
|
{session: neo4j_session,
|
@@ -380,7 +377,7 @@ module Neo4j::ActiveNode
|
|
380
377
|
target_classes_or_nil
|
381
378
|
end
|
382
379
|
|
383
|
-
def default_association_query_proxy
|
380
|
+
def default_association_query_proxy
|
384
381
|
Neo4j::ActiveNode::Query::QueryProxy.new("::#{self.name}".constantize,
|
385
382
|
nil,
|
386
383
|
session: neo4j_session,
|
@@ -2,38 +2,37 @@ module Neo4j
|
|
2
2
|
module ActiveNode
|
3
3
|
module Query
|
4
4
|
module QueryProxyEagerLoading
|
5
|
-
def initialize(model, association = nil, options = {})
|
6
|
-
@associations_spec = []
|
7
|
-
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
5
|
def each(node = true, rel = nil, &block)
|
12
|
-
if
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
block.call(record)
|
6
|
+
return super if with_associations_spec.size.zero?
|
7
|
+
|
8
|
+
query_from_association_spec.pluck(identity, with_associations_return_clause).map do |record, eager_data|
|
9
|
+
eager_data.each_with_index do |eager_records, index|
|
10
|
+
record.association_proxy(with_associations_spec[index]).cache_result(eager_records)
|
20
11
|
end
|
21
|
-
|
22
|
-
|
12
|
+
|
13
|
+
block.call(record)
|
23
14
|
end
|
24
15
|
end
|
25
16
|
|
17
|
+
def with_associations_spec
|
18
|
+
@with_associations_spec ||= []
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_associations_return_clause
|
22
|
+
'[' + with_associations_spec.map { |n| "collect(#{n})" }.join(',') + ']'
|
23
|
+
end
|
24
|
+
|
26
25
|
def with_associations(*spec)
|
27
26
|
new_link.tap do |new_query_proxy|
|
28
|
-
new_spec = new_query_proxy.
|
29
|
-
new_query_proxy.
|
27
|
+
new_spec = new_query_proxy.with_associations_spec + spec
|
28
|
+
new_query_proxy.with_associations_spec.replace(new_spec)
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
33
32
|
private
|
34
33
|
|
35
34
|
def query_from_association_spec
|
36
|
-
|
35
|
+
with_associations_spec.inject(query_as(identity).return(identity)) do |query, association_name|
|
37
36
|
association = model.associations[association_name]
|
38
37
|
|
39
38
|
query.optional_match("#{identity}#{association.arrow_cypher}#{association_name}")
|
@@ -10,11 +10,29 @@ module Neo4j
|
|
10
10
|
# using `your_node.each(true, true)` instead of `your_node.each_with_rel`.
|
11
11
|
# @return [Enumerable] An enumerable containing some combination of nodes and rels.
|
12
12
|
def each(node = true, rel = nil, &block)
|
13
|
+
result(node, rel).each(&block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def result(node = true, rel = true)
|
17
|
+
@result_cache ||= {}
|
18
|
+
return @result_cache[[node, rel]] if @result_cache[[node, rel]]
|
19
|
+
|
13
20
|
pluck_vars = []
|
14
21
|
pluck_vars << identity if node
|
15
22
|
pluck_vars << @rel_var if rel
|
16
23
|
|
17
|
-
pluck(*pluck_vars)
|
24
|
+
result = pluck(*pluck_vars)
|
25
|
+
|
26
|
+
result.each do |object|
|
27
|
+
object.instance_variable_set('@source_query_proxy', self)
|
28
|
+
object.instance_variable_set('@source_query_proxy_result_cache', result)
|
29
|
+
end
|
30
|
+
|
31
|
+
@result_cache[[node, rel]] ||= result
|
32
|
+
end
|
33
|
+
|
34
|
+
def fetch_result_cache
|
35
|
+
@result_cache ||= yield
|
18
36
|
end
|
19
37
|
|
20
38
|
# When called at the end of a QueryProxy chain, it will return the resultant relationship objects intead of nodes.
|
data/lib/neo4j/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Ronge, Brian Underwood, Chris Grigg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: orm_adapter
|