neo4j-core 3.0.0.alpha.17 → 3.0.0.alpha.18
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/lib/neo4j-core/query.rb +13 -3
- data/lib/neo4j-core/query_clauses.rb +3 -1
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-embedded/property.rb +52 -10
- data/lib/neo4j-server/cypher_response.rb +1 -1
- metadata +2 -50
- data/lib/mydb/active_tx_log +0 -1
- data/lib/mydb/index/lucene-store.db +0 -0
- data/lib/mydb/index/lucene.log.active +0 -0
- data/lib/mydb/index/lucene.log.v0 +0 -0
- data/lib/mydb/messages.log +0 -684
- 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 +0 -1
- 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/store_lock +0 -0
- data/lib/mydb/tm_tx_log.1 +0 -0
- data/lib/neo4j/session.rb~ +0 -202
- data/lib/neo4j-core/version.rb~ +0 -5
- data/lib/neo4j-embedded/cypher_response.rb~ +0 -85
- data/lib/neo4j-embedded/embedded_node.rb~ +0 -201
- data/lib/neo4j-embedded/embedded_relationship.rb~ +0 -62
- data/lib/neo4j-embedded/embedded_session.rb~ +0 -145
- data/lib/neo4j-server/cypher_response.rb~ +0 -155
@@ -1,145 +0,0 @@
|
|
1
|
-
# Plugin
|
2
|
-
|
3
|
-
Neo4j::Session.register_db(:embedded_db) do |*args|
|
4
|
-
Neo4j::Embedded::EmbeddedSession.new(*args)
|
5
|
-
end
|
6
|
-
|
7
|
-
|
8
|
-
module Neo4j::Embedded
|
9
|
-
class EmbeddedSession < Neo4j::Session
|
10
|
-
|
11
|
-
class Error < StandardError
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :graph_db, :db_location
|
15
|
-
extend Forwardable
|
16
|
-
extend Neo4j::Core::TxMethods
|
17
|
-
def_delegator :@graph_db, :begin_tx
|
18
|
-
|
19
|
-
|
20
|
-
def initialize(db_location, config={})
|
21
|
-
@db_location = db_location
|
22
|
-
@auto_commit = !!config[:auto_commit]
|
23
|
-
Neo4j::Session.register(self)
|
24
|
-
@query_builder = Neo4j::Core::QueryBuilder.new
|
25
|
-
end
|
26
|
-
|
27
|
-
def start
|
28
|
-
raise Error.new("Embedded Neo4j db is already running") if running?
|
29
|
-
puts "Start embedded Neo4j db at #{db_location}"
|
30
|
-
factory = Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory.new
|
31
|
-
@graph_db = factory.newEmbeddedDatabase(db_location)
|
32
|
-
Neo4j::Session._notify_listeners(:session_available, self)
|
33
|
-
end
|
34
|
-
|
35
|
-
def factory_class
|
36
|
-
Java::OrgNeo4jGraphdbFactory::GraphDatabaseFactory
|
37
|
-
Java::OrgNeo4jTest::ImpermanentGraphDatabase
|
38
|
-
end
|
39
|
-
|
40
|
-
def close
|
41
|
-
super
|
42
|
-
shutdown
|
43
|
-
end
|
44
|
-
|
45
|
-
def shutdown
|
46
|
-
graph_db && graph_db.shutdown
|
47
|
-
@graph_db = nil
|
48
|
-
end
|
49
|
-
|
50
|
-
def running?
|
51
|
-
!!graph_db
|
52
|
-
end
|
53
|
-
|
54
|
-
def create_label(name)
|
55
|
-
EmbeddedLabel.new(self, name)
|
56
|
-
end
|
57
|
-
|
58
|
-
def load_node(neo_id)
|
59
|
-
_load_node(neo_id)
|
60
|
-
end
|
61
|
-
tx_methods :load_node
|
62
|
-
|
63
|
-
# Same as load but does not return the node as a wrapped Ruby object.
|
64
|
-
#
|
65
|
-
def _load_node(neo_id)
|
66
|
-
return nil if neo_id.nil?
|
67
|
-
@graph_db.get_node_by_id(neo_id.to_i)
|
68
|
-
rescue Java::OrgNeo4jGraphdb.NotFoundException
|
69
|
-
nil
|
70
|
-
end
|
71
|
-
|
72
|
-
def load_relationship(neo_id)
|
73
|
-
_load_relationship(neo_id)
|
74
|
-
end
|
75
|
-
tx_methods :load_relationship
|
76
|
-
|
77
|
-
def _load_relationship(neo_id)
|
78
|
-
return nil if neo_id.nil?
|
79
|
-
@graph_db.get_relationship_by_id(neo_id.to_i)
|
80
|
-
rescue Java::OrgNeo4jGraphdb.NotFoundException
|
81
|
-
nil
|
82
|
-
end
|
83
|
-
|
84
|
-
def query(*params)
|
85
|
-
query_hash = @query_builder.to_query_hash(params, :to_node)
|
86
|
-
cypher = @query_builder.to_cypher(query_hash)
|
87
|
-
|
88
|
-
result = _query(cypher, query_hash[:params])
|
89
|
-
if result.respond_to?(:error?) && result.error?
|
90
|
-
raise Neo4j::Session::CypherError.new(result.error_msg, result.error_code, result.error_status)
|
91
|
-
end
|
92
|
-
|
93
|
-
map_return_procs = @query_builder.to_map_return_procs(query_hash)
|
94
|
-
ResultWrapper.new(result, map_return_procs, cypher)
|
95
|
-
end
|
96
|
-
|
97
|
-
def find_all_nodes(label)
|
98
|
-
EmbeddedLabel.new(self, label).find_nodes
|
99
|
-
end
|
100
|
-
|
101
|
-
def find_nodes(label, key, value)
|
102
|
-
EmbeddedLabel.new(self, label).find_nodes(key,value)
|
103
|
-
end
|
104
|
-
|
105
|
-
# Performs a cypher query with given string.
|
106
|
-
# Remember that you should close the resource iterator.
|
107
|
-
# @param [String] q the cypher query as a String
|
108
|
-
# @return (see #query)
|
109
|
-
def _query(q, params={})
|
110
|
-
engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
|
111
|
-
engine.execute(q, Neo4j::Core::HashWithIndifferentAccess.new(params))
|
112
|
-
rescue Exception => e
|
113
|
-
raise Neo4j::Session::CypherError.new(e.message, e.class, 'cypher error')
|
114
|
-
end
|
115
|
-
|
116
|
-
def query_default_return(as)
|
117
|
-
" RETURN #{as}"
|
118
|
-
end
|
119
|
-
|
120
|
-
def _query_or_fail(q)
|
121
|
-
engine = Java::OrgNeo4jCypherJavacompat::ExecutionEngine.new(@graph_db)
|
122
|
-
engine.execute(q)
|
123
|
-
end
|
124
|
-
|
125
|
-
def search_result_to_enumerable(result)
|
126
|
-
result.map {|column| column['n'].wrapper}
|
127
|
-
end
|
128
|
-
|
129
|
-
def create_node(properties = nil, labels=[])
|
130
|
-
if labels.empty?
|
131
|
-
_java_node = graph_db.create_node
|
132
|
-
else
|
133
|
-
labels = EmbeddedLabel.as_java(labels)
|
134
|
-
_java_node = graph_db.create_node(labels)
|
135
|
-
end
|
136
|
-
properties.each_pair { |k, v| _java_node[k]=v } if properties
|
137
|
-
_java_node
|
138
|
-
end
|
139
|
-
tx_methods :create_node
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
@@ -1,155 +0,0 @@
|
|
1
|
-
module Neo4j::Server
|
2
|
-
class CypherResponse
|
3
|
-
attr_reader :data, :columns, :error_msg, :error_status, :error_code, :response
|
4
|
-
|
5
|
-
class ResponseError < StandardError
|
6
|
-
attr_reader :status, :code
|
7
|
-
|
8
|
-
def initialize(msg, status, code)
|
9
|
-
super(msg)
|
10
|
-
@status = status
|
11
|
-
@code = code
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
class HashEnumeration
|
17
|
-
include Enumerable
|
18
|
-
extend Forwardable
|
19
|
-
def_delegator :@response, :error_msg
|
20
|
-
def_delegator :@response, :error_status
|
21
|
-
def_delegator :@response, :error_code
|
22
|
-
def_delegator :@response, :data
|
23
|
-
def_delegator :@response, :columns
|
24
|
-
|
25
|
-
def initialize(response, map_return_procs, query)
|
26
|
-
@response = response
|
27
|
-
@map_return_procs = map_return_procs
|
28
|
-
@query = query
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_s
|
32
|
-
@query
|
33
|
-
end
|
34
|
-
|
35
|
-
puts "RELOADED"
|
36
|
-
def inspect
|
37
|
-
#"Enumerable query: '#{@query}' map_return: [#{@map_return_procs.keys.join(', ')}]"
|
38
|
-
"Enumerable query: '#{@query}' map_return: [#{@map_return_procs.keys.inspect}]"
|
39
|
-
end
|
40
|
-
|
41
|
-
def each_no_mapping
|
42
|
-
data.each do |row|
|
43
|
-
hash = {}
|
44
|
-
row.each_with_index do |row, i|
|
45
|
-
key = columns[i].to_sym
|
46
|
-
hash[key] = row
|
47
|
-
end
|
48
|
-
yield hash
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def each_multi_column_mapping
|
53
|
-
data.each do |row|
|
54
|
-
hash = {}
|
55
|
-
row.each_with_index do |row, i|
|
56
|
-
key = columns[i].to_sym
|
57
|
-
proc = @map_return_procs[key]
|
58
|
-
hash[key] = proc ? proc.call(row) : row
|
59
|
-
end
|
60
|
-
yield hash
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def each_single_column_mapping
|
65
|
-
data.each do |row|
|
66
|
-
result = @map_return_procs.call(row.first)
|
67
|
-
yield result
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def each(&block)
|
72
|
-
case @map_return_procs
|
73
|
-
when NilClass then each_no_mapping &block
|
74
|
-
when Hash then each_multi_column_mapping &block
|
75
|
-
else each_single_column_mapping &block
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def to_hash_enumeration(map_return_procs={}, cypher='')
|
81
|
-
HashEnumeration.new(self, map_return_procs, cypher)
|
82
|
-
end
|
83
|
-
|
84
|
-
def initialize(response, uncommited = false)
|
85
|
-
@response = response
|
86
|
-
@uncommited = uncommited
|
87
|
-
end
|
88
|
-
|
89
|
-
|
90
|
-
def first_data
|
91
|
-
if uncommited?
|
92
|
-
@data.first['row'].first
|
93
|
-
else
|
94
|
-
@data[0][0]
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def error?
|
99
|
-
!!@error
|
100
|
-
end
|
101
|
-
|
102
|
-
def uncommited?
|
103
|
-
@uncommited
|
104
|
-
end
|
105
|
-
|
106
|
-
def raise_unless_response_code(code)
|
107
|
-
raise "Response code #{response.code}, expected #{code} for #{response.request.path}, #{response.body}" unless response.code == code
|
108
|
-
end
|
109
|
-
|
110
|
-
def set_data(data, columns)
|
111
|
-
@data = data
|
112
|
-
@columns = columns
|
113
|
-
self
|
114
|
-
end
|
115
|
-
|
116
|
-
def set_error(error_msg, error_status, error_core)
|
117
|
-
@error = true
|
118
|
-
@error_msg = error_msg
|
119
|
-
@error_status = error_status
|
120
|
-
@error_code = error_core
|
121
|
-
self
|
122
|
-
end
|
123
|
-
|
124
|
-
def raise_error
|
125
|
-
raise "Tried to raise error without an error" unless @error
|
126
|
-
raise ResponseError.new(@error_msg, @error_status, @error_code)
|
127
|
-
end
|
128
|
-
|
129
|
-
def self.create_with_no_tx(response)
|
130
|
-
case response.code
|
131
|
-
when 200
|
132
|
-
CypherResponse.new(response).set_data(response['data'], response['columns'])
|
133
|
-
when 400
|
134
|
-
CypherResponse.new(response).set_error(response['message'], response['exception'], response['fullname'])
|
135
|
-
else
|
136
|
-
raise "Unknown response code #{response.code} for #{response.request.path.to_s}"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def self.create_with_tx(response)
|
141
|
-
raise "Unknown response code #{response.code} for #{response.request.path.to_s}" unless response.code == 200
|
142
|
-
|
143
|
-
first_result = response['results'][0]
|
144
|
-
cr = CypherResponse.new(response, true)
|
145
|
-
|
146
|
-
if (response['errors'].empty?)
|
147
|
-
cr.set_data(first_result['data'], first_result['columns'])
|
148
|
-
else
|
149
|
-
first_error = response['errors'].first
|
150
|
-
cr.set_error(first_error['message'], first_error['status'], first_error['code'])
|
151
|
-
end
|
152
|
-
cr
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|