neo4j-core 3.0.0.alpha.16 → 3.0.0.alpha.17
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 +4 -4
- data/README.md +14 -37
- data/lib/mydb/index/lucene-store.db +0 -0
- data/lib/mydb/index/lucene.log.active +0 -0
- data/lib/mydb/index/{lucene.log.1 → lucene.log.v0} +0 -0
- data/lib/mydb/messages.log +359 -0
- data/lib/mydb/neostore +0 -0
- data/lib/mydb/neostore.id +0 -0
- data/lib/mydb/neostore.labeltokenstore.db +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.id +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.names +0 -0
- data/lib/mydb/neostore.labeltokenstore.db.names.id +0 -0
- data/lib/mydb/neostore.nodestore.db +0 -0
- data/lib/mydb/neostore.nodestore.db.id +0 -0
- data/lib/mydb/neostore.nodestore.db.labels +0 -0
- data/lib/mydb/neostore.nodestore.db.labels.id +0 -0
- data/lib/mydb/neostore.propertystore.db +0 -0
- data/lib/mydb/neostore.propertystore.db.arrays +0 -0
- data/lib/mydb/neostore.propertystore.db.arrays.id +0 -0
- data/lib/mydb/neostore.propertystore.db.id +0 -0
- data/lib/mydb/neostore.propertystore.db.index +0 -0
- data/lib/mydb/neostore.propertystore.db.index.id +0 -0
- data/lib/mydb/neostore.propertystore.db.index.keys +0 -0
- data/lib/mydb/neostore.propertystore.db.index.keys.id +0 -0
- data/lib/mydb/neostore.propertystore.db.strings +0 -0
- data/lib/mydb/neostore.propertystore.db.strings.id +0 -0
- data/lib/mydb/neostore.relationshipgroupstore.db +0 -0
- data/lib/mydb/neostore.relationshipgroupstore.db.id +0 -0
- data/lib/mydb/neostore.relationshipstore.db +0 -0
- data/lib/mydb/neostore.relationshipstore.db.id +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db +1 -0
- data/lib/mydb/neostore.relationshiptypestore.db.id +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db.names +0 -0
- data/lib/mydb/neostore.relationshiptypestore.db.names.id +0 -0
- data/lib/mydb/neostore.schemastore.db +0 -0
- data/lib/mydb/neostore.schemastore.db.id +0 -0
- data/lib/mydb/nioneo_logical.log.active +0 -0
- data/lib/mydb/nioneo_logical.log.v0 +0 -0
- data/lib/mydb/schema/label/lucene/segments.gen +0 -0
- data/lib/mydb/schema/label/lucene/segments_1 +0 -0
- data/lib/mydb/tm_tx_log.1 +0 -0
- data/lib/neo4j-core.rb +1 -1
- data/lib/neo4j-core/helpers.rb +1 -1
- data/lib/neo4j-core/query.rb +298 -0
- data/lib/neo4j-core/query_clauses.rb +476 -0
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-core/version.rb~ +5 -0
- data/lib/neo4j-embedded/cypher_response.rb +9 -45
- data/lib/neo4j-embedded/embedded_session.rb +15 -17
- data/lib/neo4j-server/cypher_node.rb +16 -5
- data/lib/neo4j-server/cypher_relationship.rb +24 -6
- data/lib/neo4j-server/cypher_response.rb +35 -35
- data/lib/neo4j-server/cypher_session.rb +8 -12
- data/lib/neo4j/node.rb +4 -4
- data/lib/neo4j/session.rb +11 -63
- data/lib/neo4j/tasks/neo4j_server.rb +31 -0
- metadata +9 -7
- data/lib/mydb/lock +0 -0
- data/lib/mydb/nioneo_logical.log.1 +0 -0
- data/lib/mydb/schema/label/lucene/write.lock +0 -0
- data/lib/neo4j-core/query_builder.rb +0 -200
data/lib/neo4j-core/version.rb
CHANGED
@@ -14,10 +14,10 @@ module Neo4j::Embedded
|
|
14
14
|
# @return the original result from the Neo4j Cypher Engine, once forward read only !
|
15
15
|
attr_reader :source
|
16
16
|
|
17
|
-
def initialize(source,
|
17
|
+
def initialize(source, query)
|
18
18
|
@source = source
|
19
|
+
@struct = Struct.new(*source.columns.to_a.map(&:to_sym))
|
19
20
|
@unread = true
|
20
|
-
@map_return_procs = map_return_procs
|
21
21
|
@query = query
|
22
22
|
end
|
23
23
|
|
@@ -31,59 +31,23 @@ module Neo4j::Embedded
|
|
31
31
|
|
32
32
|
# @return [Array<Symbol>] the columns in the query result
|
33
33
|
def columns
|
34
|
-
@source.columns.map
|
34
|
+
@source.columns.map(&:to_sym)
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
def each(&block)
|
37
|
+
def each
|
39
38
|
raise ResultsAlreadyConsumedException unless @unread
|
40
39
|
|
41
|
-
if
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
each_multi_column_mapping &block
|
47
|
-
else
|
48
|
-
each_single_column_mapping &block
|
40
|
+
if block_given?
|
41
|
+
@source.each do |row|
|
42
|
+
yield(row.each_with_object(@struct.new) do |(column, value), result|
|
43
|
+
result[column.to_sym] = (value.respond_to?(:wrapper) ? value.wrapper : value)
|
44
|
+
end)
|
49
45
|
end
|
50
46
|
else
|
51
47
|
Enumerator.new(self)
|
52
48
|
end
|
53
49
|
end
|
54
50
|
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def each_no_mapping
|
59
|
-
@source.each do |row|
|
60
|
-
hash = {}
|
61
|
-
row.each do |key, value|
|
62
|
-
out[key.to_sym] = value
|
63
|
-
end
|
64
|
-
yield hash
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def each_multi_column_mapping
|
69
|
-
@source.each do |row|
|
70
|
-
hash = {}
|
71
|
-
row.each do |key, value|
|
72
|
-
k = key.to_sym
|
73
|
-
proc = @map_return_procs[k]
|
74
|
-
hash[k] = proc ? proc.call(value) : value
|
75
|
-
end
|
76
|
-
yield hash
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def each_single_column_mapping
|
81
|
-
@source.each do |row|
|
82
|
-
result = @map_return_procs.call(row.values.first)
|
83
|
-
yield result
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
51
|
end
|
88
52
|
end
|
89
53
|
|
@@ -21,7 +21,6 @@ module Neo4j::Embedded
|
|
21
21
|
@db_location = db_location
|
22
22
|
@auto_commit = !!config[:auto_commit]
|
23
23
|
Neo4j::Session.register(self)
|
24
|
-
@query_builder = Neo4j::Core::QueryBuilder.new
|
25
24
|
end
|
26
25
|
|
27
26
|
def inspect
|
@@ -34,6 +33,7 @@ module Neo4j::Embedded
|
|
34
33
|
factory = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
|
35
34
|
@graph_db = factory.newEmbeddedDatabase(db_location)
|
36
35
|
Neo4j::Session._notify_listeners(:session_available, self)
|
36
|
+
@engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
|
37
37
|
end
|
38
38
|
|
39
39
|
def factory_class
|
@@ -85,19 +85,17 @@ module Neo4j::Embedded
|
|
85
85
|
nil
|
86
86
|
end
|
87
87
|
|
88
|
-
def query(*
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
88
|
+
def query(*args)
|
89
|
+
if [[String], [String, String]].include?(args.map(&:class))
|
90
|
+
query, params = args[0,2]
|
91
|
+
Neo4j::Embedded::ResultWrapper.new(_query(query, params), query)
|
92
|
+
else
|
93
|
+
options = args[0] || {}
|
94
|
+
Neo4j::Core::Query.new(options.merge(session: self))
|
95
95
|
end
|
96
|
-
|
97
|
-
map_return_procs = @query_builder.to_map_return_procs(query_hash)
|
98
|
-
ResultWrapper.new(result, map_return_procs, cypher)
|
99
96
|
end
|
100
97
|
|
98
|
+
|
101
99
|
def find_all_nodes(label)
|
102
100
|
EmbeddedLabel.new(self, label).find_nodes
|
103
101
|
end
|
@@ -111,10 +109,10 @@ module Neo4j::Embedded
|
|
111
109
|
# @param [String] q the cypher query as a String
|
112
110
|
# @return (see #query)
|
113
111
|
def _query(q, params={})
|
114
|
-
engine
|
115
|
-
engine.execute(q, Neo4j::Core::HashWithIndifferentAccess.new(params))
|
112
|
+
@engine ||= Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
|
113
|
+
@engine.execute(q, Neo4j::Core::HashWithIndifferentAccess.new(params))
|
116
114
|
rescue Exception => e
|
117
|
-
|
115
|
+
raise Neo4j::Session::CypherError.new(e.message, e.class, 'cypher error')
|
118
116
|
end
|
119
117
|
|
120
118
|
def query_default_return(as)
|
@@ -122,8 +120,8 @@ module Neo4j::Embedded
|
|
122
120
|
end
|
123
121
|
|
124
122
|
def _query_or_fail(q)
|
125
|
-
engine
|
126
|
-
engine.execute(q)
|
123
|
+
@engine ||= Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
|
124
|
+
@engine.execute(q)
|
127
125
|
end
|
128
126
|
|
129
127
|
def search_result_to_enumerable(result)
|
@@ -146,4 +144,4 @@ module Neo4j::Embedded
|
|
146
144
|
|
147
145
|
|
148
146
|
|
149
|
-
end
|
147
|
+
end
|
@@ -3,9 +3,16 @@ module Neo4j::Server
|
|
3
3
|
include Neo4j::Server::Resource
|
4
4
|
include Neo4j::Core::CypherTranslator
|
5
5
|
|
6
|
-
def initialize(session,
|
6
|
+
def initialize(session, value)
|
7
7
|
@session = session
|
8
|
-
|
8
|
+
|
9
|
+
@id = if value.is_a?(Hash)
|
10
|
+
@response_hash = value
|
11
|
+
@props = @response_hash['data']
|
12
|
+
@response_hash['self'].match(/\d+$/)[0].to_i
|
13
|
+
else
|
14
|
+
value
|
15
|
+
end
|
9
16
|
end
|
10
17
|
|
11
18
|
def neo_id
|
@@ -30,8 +37,12 @@ module Neo4j::Server
|
|
30
37
|
|
31
38
|
# (see Neo4j::Node#props)
|
32
39
|
def props
|
33
|
-
|
34
|
-
|
40
|
+
if @props
|
41
|
+
@props
|
42
|
+
else
|
43
|
+
props = @session._query_or_fail("START n=node(#{neo_id}) RETURN n", true)['data']
|
44
|
+
props.keys.inject({}){|hash,key| hash[key.to_sym] = props[key]; hash}
|
45
|
+
end
|
35
46
|
end
|
36
47
|
|
37
48
|
# (see Neo4j::Node#remove_property)
|
@@ -187,4 +198,4 @@ module Neo4j::Server
|
|
187
198
|
end
|
188
199
|
|
189
200
|
end
|
190
|
-
end
|
201
|
+
end
|
@@ -4,10 +4,24 @@ module Neo4j::Server
|
|
4
4
|
include Neo4j::Server::Resource
|
5
5
|
include Neo4j::Core::CypherTranslator
|
6
6
|
|
7
|
-
|
7
|
+
attr_reader :start_node_neo_id, :end_node_neo_id
|
8
|
+
|
9
|
+
def initialize(session, value, rel_type = nil)
|
8
10
|
@session = session
|
9
|
-
|
10
|
-
@
|
11
|
+
|
12
|
+
@id = if value.is_a?(Hash)
|
13
|
+
@response_hash = value
|
14
|
+
@rel_type = @response_hash['type']
|
15
|
+
@props = @response_hash['data']
|
16
|
+
@start_node_neo_id = @response_hash['start'].match(/\d+$/)[0].to_i
|
17
|
+
@end_node_neo_id = @response_hash['end'].match(/\d+$/)[0].to_i
|
18
|
+
|
19
|
+
@response_hash['self'].match(/\d+$/)[0].to_i
|
20
|
+
else
|
21
|
+
@rel_type = rel_type
|
22
|
+
|
23
|
+
value
|
24
|
+
end
|
11
25
|
end
|
12
26
|
|
13
27
|
def ==(o)
|
@@ -59,8 +73,12 @@ module Neo4j::Server
|
|
59
73
|
|
60
74
|
# (see Neo4j::Relationship#props)
|
61
75
|
def props
|
62
|
-
|
63
|
-
|
76
|
+
if @props
|
77
|
+
@props
|
78
|
+
else
|
79
|
+
props = @session._query_or_fail("START n=relationship(#{neo_id}) RETURN n", true)['data']
|
80
|
+
props.keys.inject({}){|hash,key| hash[key.to_sym] = props[key]; hash}
|
81
|
+
end
|
64
82
|
end
|
65
83
|
|
66
84
|
# (see Neo4j::Relationship#props=)
|
@@ -102,4 +120,4 @@ module Neo4j::Server
|
|
102
120
|
end
|
103
121
|
|
104
122
|
end
|
105
|
-
end
|
123
|
+
end
|
@@ -21,10 +21,10 @@ module Neo4j::Server
|
|
21
21
|
def_delegator :@response, :error_code
|
22
22
|
def_delegator :@response, :data
|
23
23
|
def_delegator :@response, :columns
|
24
|
+
def_delegator :@response, :struct
|
24
25
|
|
25
|
-
def initialize(response,
|
26
|
+
def initialize(response, query)
|
26
27
|
@response = response
|
27
|
-
@map_return_procs = map_return_procs
|
28
28
|
@query = query
|
29
29
|
end
|
30
30
|
|
@@ -36,48 +36,41 @@ module Neo4j::Server
|
|
36
36
|
"Enumerable query: '#{@query}'"
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
40
|
-
data.each do |row|
|
41
|
-
hash = {}
|
42
|
-
row.each_with_index do |row, i|
|
43
|
-
key = columns[i].to_sym
|
44
|
-
hash[key] = row
|
45
|
-
end
|
46
|
-
yield hash
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def each_multi_column_mapping
|
39
|
+
def each(&block)
|
51
40
|
data.each do |row|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
proc = @map_return_procs[key]
|
56
|
-
hash[key] = proc ? proc.call(row) : row
|
57
|
-
end
|
58
|
-
yield hash
|
41
|
+
yield(row.each_with_index.each_with_object(struct.new) do |(value, i), result|
|
42
|
+
result[columns[i].to_sym] = value
|
43
|
+
end)
|
59
44
|
end
|
60
45
|
end
|
46
|
+
end
|
61
47
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
yield result
|
66
|
-
end
|
67
|
-
end
|
48
|
+
def to_struct_enumeration(cypher = '')
|
49
|
+
HashEnumeration.new(self, cypher)
|
50
|
+
end
|
68
51
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
52
|
+
def to_node_enumeration(cypher = '', session = Neo4j::Session.current)
|
53
|
+
Enumerator.new do |yielder|
|
54
|
+
self.to_struct_enumeration(cypher).each do |row|
|
55
|
+
yielder << row.each_pair.each_with_object(@struct.new) do |(column, value), result|
|
56
|
+
|
57
|
+
result[column] = if value.is_a?(Hash)
|
58
|
+
if value['labels']
|
59
|
+
CypherNode.new(session, value).wrapper
|
60
|
+
elsif value['type']
|
61
|
+
CypherRelationship.new(session, value).wrapper
|
62
|
+
else
|
63
|
+
value
|
64
|
+
end
|
65
|
+
else
|
66
|
+
value
|
67
|
+
end
|
68
|
+
end
|
74
69
|
end
|
75
70
|
end
|
76
71
|
end
|
77
72
|
|
78
|
-
|
79
|
-
HashEnumeration.new(self, map_return_procs, cypher)
|
80
|
-
end
|
73
|
+
attr_reader :struct
|
81
74
|
|
82
75
|
def initialize(response, uncommited = false)
|
83
76
|
@response = response
|
@@ -108,6 +101,7 @@ module Neo4j::Server
|
|
108
101
|
def set_data(data, columns)
|
109
102
|
@data = data
|
110
103
|
@columns = columns
|
104
|
+
@struct = columns.empty? ? Object.new : Struct.new(*columns.map(&:to_sym))
|
111
105
|
self
|
112
106
|
end
|
113
107
|
|
@@ -124,6 +118,12 @@ module Neo4j::Server
|
|
124
118
|
raise ResponseError.new(@error_msg, @error_status, @error_code)
|
125
119
|
end
|
126
120
|
|
121
|
+
def raise_cypher_error
|
122
|
+
raise "Tried to raise error without an error" unless @error
|
123
|
+
raise Neo4j::Session::CypherError.new(@error_msg, @error_code, @error_status)
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
127
|
def self.create_with_no_tx(response)
|
128
128
|
case response.code
|
129
129
|
when 200
|
@@ -35,7 +35,6 @@ module Neo4j::Server
|
|
35
35
|
Neo4j::Session.register(self)
|
36
36
|
initialize_resource(data_url)
|
37
37
|
Neo4j::Session._notify_listeners(:session_available, self)
|
38
|
-
@query_builder = Neo4j::Core::QueryBuilder.new
|
39
38
|
end
|
40
39
|
|
41
40
|
def to_s
|
@@ -131,17 +130,14 @@ module Neo4j::Server
|
|
131
130
|
search_result_to_enumerable_first_column(response)
|
132
131
|
end
|
133
132
|
|
134
|
-
def query(*
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
133
|
+
def query(*args)
|
134
|
+
if [[String], [String, String]].include?(args.map(&:class))
|
135
|
+
query, params = args[0,2]
|
136
|
+
_query(query, params).to_node_enumeration(query)
|
137
|
+
else
|
138
|
+
options = args[0] || {}
|
139
|
+
Neo4j::Core::Query.new(options.merge(session: self))
|
141
140
|
end
|
142
|
-
|
143
|
-
map_return_procs = @query_builder.to_map_return_procs(query_hash)
|
144
|
-
result.to_hash_enumeration(map_return_procs, cypher)
|
145
141
|
end
|
146
142
|
|
147
143
|
def _query_or_fail(q, single_row = false, params=nil)
|
@@ -207,4 +203,4 @@ module Neo4j::Server
|
|
207
203
|
end
|
208
204
|
end
|
209
205
|
end
|
210
|
-
end
|
206
|
+
end
|
data/lib/neo4j/node.rb
CHANGED
@@ -180,25 +180,25 @@ module Neo4j
|
|
180
180
|
end
|
181
181
|
|
182
182
|
# Loads a node from the database with given id
|
183
|
-
def load(neo_id, session = Neo4j::Session.current)
|
183
|
+
def load(neo_id, session = Neo4j::Session.current!)
|
184
184
|
node = _load(neo_id, session)
|
185
185
|
node && node.wrapper
|
186
186
|
end
|
187
187
|
|
188
188
|
# Same as #load but does not try to return a wrapped node
|
189
189
|
# @return [Neo4j::Node] an unwrapped node
|
190
|
-
def _load(neo_id, session = Neo4j::Session.current)
|
190
|
+
def _load(neo_id, session = Neo4j::Session.current!)
|
191
191
|
session.load_node(neo_id)
|
192
192
|
end
|
193
193
|
|
194
194
|
# Checks if the given entity node or entity id (Neo4j::Node#neo_id) exists in the database.
|
195
195
|
# @return [true, false] if exist
|
196
|
-
def exist?(entity_or_entity_id, session = Neo4j::Session.current)
|
196
|
+
def exist?(entity_or_entity_id, session = Neo4j::Session.current!)
|
197
197
|
session.node_exist?(neo_id)
|
198
198
|
end
|
199
199
|
|
200
200
|
# Find the node with given label and value
|
201
|
-
def find_nodes(label, value=nil, session = Neo4j::Session.current)
|
201
|
+
def find_nodes(label, value=nil, session = Neo4j::Session.current!)
|
202
202
|
session.find_nodes(label, value)
|
203
203
|
end
|
204
204
|
end
|
data/lib/neo4j/session.rb
CHANGED
@@ -46,71 +46,14 @@ module Neo4j
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
50
|
-
# Returns an enumerable of hash values where each hash corresponds to a row unless +return+ or +map_return+
|
51
|
-
# is not an array. The search result can be mapped to Neo4j::Node or Neo4j::Relationship is your own Ruby wrapper class
|
52
|
-
# by specifying a map_return parameter.
|
49
|
+
# Returns a Query object. See Neo4j::Core::Query for more details, but basic usage looks like:
|
53
50
|
#
|
54
|
-
# @
|
55
|
-
#
|
56
|
-
# @option q [Symbol,Hash] :label the label to match. You can specify several labels by using a hash of variable names and labels.
|
57
|
-
# @option q [Symbol] :conditions key and value of properties which the label nodes must match
|
58
|
-
# @option q [Hash] :conditions key and value of properties which the label nodes must match
|
59
|
-
# @option q [String, Array] :match the cypher match clause
|
60
|
-
# @option q [String, Array] :where the cypher where clause
|
61
|
-
# @option q [String, Array, Symbol] :return the cypher where clause
|
62
|
-
# @option q [String, Hash, Symbol] :map_return mapping of the returned values, e.g. :id_to_node, :id_to_rel, or :value
|
63
|
-
# @option q [Hash<Symbol, Proc>] :map_return_procs custom mapping functions of :map_return types
|
64
|
-
# @option q [String,Symbol,Array<Hash>] :order the order
|
65
|
-
# @option q [Fixnum] :limit enables the return of only subsets of the total result.
|
66
|
-
# @option q [Fixnum] :skip enables the return of only subsets of the total result.
|
67
|
-
# @return [Enumerable] the result, an enumerable of Neo4j::Node objects unless a pure cypher string is given or return/map_returns is specified, see examples.
|
68
|
-
# @raise CypherError if invalid cypher
|
69
|
-
# @example Cypher String and parameters
|
70
|
-
# Neo4j::Session.query("START n=node({p}) RETURN ID(n)", params: {p: 42})
|
71
|
-
#
|
72
|
-
# @example label
|
73
|
-
# # If there is no :return parameter it will try to return Neo4j::Node objects
|
74
|
-
# # Default parameter is :n in the generated cypher
|
75
|
-
# Neo4j::Session.query(label: :person) # => MATCH (n:`person`) RETURN ID(n) # or RETURN n for embedded
|
76
|
-
#
|
77
|
-
# @example to_s
|
78
|
-
# # What Cypher is returned ? check with to_s
|
79
|
-
# Neo4j::Session.query(label: :person).to_s # =>
|
80
|
-
#
|
81
|
-
# @example return
|
82
|
-
# Neo4j::Session.query(label: :person, return: :age) # returns age properties
|
83
|
-
# Neo4j::Session.query(label: :person, return: [:name, :age]) # returns a hash of name and age properties
|
84
|
-
# Neo4j::Session.query(label: :person, return: 'count(n) AS c')
|
85
|
-
#
|
86
|
-
# @example map_return - an Enumerable of names (String)
|
87
|
-
# Neo4j::Session.query("START n=node(42) RETURN n.name", map_return: :value)
|
88
|
-
#
|
89
|
-
# @example map_return - Enumerable of an Hash with name property, Neo4j::Relationship and Neo4j::Node as values
|
90
|
-
# Neo4j::Session.query("START n=node(42) MATCH n-[r]->[x] RETURN n.name as N, ID(r) as R, ID(x) as X",
|
91
|
-
# map_return: {N: :value, R: :id_to_rel, X: :id_to_node})
|
92
|
-
#
|
93
|
-
# @example map_return, only for embedded_db, to_rel, and to_node allows direct mapping to Neo4j::Node and Neo4j::Relationship without ID(n)
|
94
|
-
# Neo4j::Session.query("START n=node(42) MATCH n-[r]->[x] RETURN n.name as N, r, x", map_return: {N: :value, r: :to_rel, x: :to_node})
|
95
|
-
#
|
96
|
-
# @example map_return_procs, custom mapping function
|
97
|
-
# Neo4j::Session.query(label: :person, map_return: :age_times_two, map_return_procs: {age_times_two: ->(row){(row[:age] || 0) * 2}})
|
98
|
-
#
|
99
|
-
# @example match
|
100
|
-
# Neo4j::Session.query(label: :person, match: 'n--m')
|
101
|
-
#
|
102
|
-
# @example where
|
103
|
-
# Neo4j::Session.query(label: :person, where: 'n.age > 40')
|
104
|
-
# Neo4j::Session.query(label: :person, where: 'n.age > {age}', params: {age: 40})
|
105
|
-
#
|
106
|
-
# @example condition
|
107
|
-
# Neo4j::Session.query(label: :person, conditions: {age: 42})
|
108
|
-
# Neo4j::Session.query(label: :person, conditions: {name: /foo?bar.*/})
|
51
|
+
# @example
|
52
|
+
# session.query.match("(c:Car)<-[:OWNS]-(p:Person)").where(c: {vin: '234UAEB3425B'}).return(:p).first[:p]
|
109
53
|
#
|
110
54
|
# @see http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html The Cypher Query Language Documentation
|
111
|
-
# @note Returns a read-once only forward iterable for the embedded database.
|
112
55
|
#
|
113
|
-
def query(
|
56
|
+
def query(options = {})
|
114
57
|
raise 'not implemented, abstract'
|
115
58
|
end
|
116
59
|
|
@@ -145,9 +88,14 @@ module Neo4j
|
|
145
88
|
@@current_session
|
146
89
|
end
|
147
90
|
|
91
|
+
def current!
|
92
|
+
raise "No session, please create a session first with Neo4j::Session.open(:server_db) or :embedded_db" unless current
|
93
|
+
current
|
94
|
+
end
|
95
|
+
|
148
96
|
# @see Neo4j::Session#query
|
149
|
-
def query(
|
150
|
-
current
|
97
|
+
def query(options = {})
|
98
|
+
current!.query(options)
|
151
99
|
end
|
152
100
|
|
153
101
|
def named(name)
|