neo4j-core 4.0.7 → 5.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ext/kernel.rb +9 -0
- data/lib/neo4j/label.rb +2 -1
- data/lib/neo4j/node.rb +8 -11
- data/lib/neo4j/property_container.rb +2 -7
- data/lib/neo4j/property_validator.rb +1 -1
- data/lib/neo4j/session.rb +24 -11
- data/lib/neo4j/tasks/config_server.rb +4 -1
- data/lib/neo4j/tasks/neo4j_server.rake +86 -109
- data/lib/neo4j/transaction.rb +17 -16
- data/lib/neo4j-core/cypher_translator.rb +1 -1
- data/lib/neo4j-core/query.rb +103 -47
- data/lib/neo4j-core/query_clauses.rb +177 -109
- data/lib/neo4j-core/query_find_in_batches.rb +19 -11
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-core.rb +3 -0
- data/lib/neo4j-embedded/cypher_response.rb +20 -5
- data/lib/neo4j-embedded/embedded_node.rb +26 -28
- data/lib/neo4j-embedded/embedded_session.rb +7 -6
- data/lib/neo4j-embedded/embedded_transaction.rb +2 -2
- data/lib/neo4j-embedded/label.rb +65 -0
- data/lib/neo4j-embedded/property.rb +5 -5
- data/lib/neo4j-embedded/to_java.rb +7 -13
- data/lib/neo4j-embedded.rb +1 -0
- data/lib/neo4j-server/cypher_node.rb +57 -67
- data/lib/neo4j-server/cypher_node_uncommited.rb +1 -1
- data/lib/neo4j-server/cypher_relationship.rb +10 -6
- data/lib/neo4j-server/cypher_response.rb +87 -51
- data/lib/neo4j-server/cypher_session.rb +80 -93
- data/lib/neo4j-server/cypher_transaction.rb +42 -33
- data/lib/neo4j-server/label.rb +40 -0
- data/lib/neo4j-server/resource.rb +11 -12
- data/lib/neo4j-server.rb +2 -0
- data/neo4j-core.gemspec +4 -1
- metadata +50 -6
- data/lib/neo4j-core/graph_json.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 152633cd32f2477416b17fd287b5b9d849eb8f7b
|
4
|
+
data.tar.gz: 40739815340641373bb5be6879845e93c380868e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c8ae0e5f165c5c670a4ee932effe58e79cbb9fc5001b5819cd8ea1c6c38243b575252a02e29883cbfecee9fccb844763cf7fbd3736ff0251540175b074bb9bd
|
7
|
+
data.tar.gz: 2b22683eaf14a64bf2a6a37f5da9f4f067a4d43f00e3e94b667df7a5383a44ccf5ac41030e3d3448d62113891fbde15bc8b866d1daa80f3e6b33384906a5f97e
|
data/lib/ext/kernel.rb
ADDED
data/lib/neo4j/label.rb
CHANGED
@@ -61,6 +61,8 @@ module Neo4j
|
|
61
61
|
|
62
62
|
class << self
|
63
63
|
include Neo4j::Core::CypherTranslator
|
64
|
+
INDEX_PATH = '/db/data/schema/index/'
|
65
|
+
CONSTRAINT_PATH = '/db/data/schema/constraint/'
|
64
66
|
|
65
67
|
# Returns a label of given name that can be used to specifying constraints
|
66
68
|
# @param [Symbol,String] name the name of the label
|
@@ -68,7 +70,6 @@ module Neo4j
|
|
68
70
|
session.create_label(name)
|
69
71
|
end
|
70
72
|
|
71
|
-
|
72
73
|
# @return [Enumerable<Neo4j::Node>] all nodes having given label. Nodes can be wrapped in your own model ruby classes.
|
73
74
|
def find_all_nodes(label_name, session = Neo4j::Session.current)
|
74
75
|
session.find_all_nodes(label_name)
|
data/lib/neo4j/node.rb
CHANGED
@@ -118,16 +118,11 @@ module Neo4j
|
|
118
118
|
fail 'not implemented'
|
119
119
|
end
|
120
120
|
|
121
|
-
# @return true if the node exists in the database
|
121
|
+
# @return [Boolean] true if the node exists in the database
|
122
122
|
def exist?
|
123
123
|
fail 'not implemented'
|
124
124
|
end
|
125
125
|
|
126
|
-
# @return all the Neo4j labels for this node
|
127
|
-
def labels
|
128
|
-
fail 'not implemented'
|
129
|
-
end
|
130
|
-
|
131
126
|
# Returns the only node of a given type and direction that is attached to this node, or nil.
|
132
127
|
# This is a convenience method that is used in the commonly occuring situation where a node has exactly zero or one relationships of a given type and direction to another node.
|
133
128
|
# Typically this invariant is maintained by the rest of the code: if at any time more than one such relationships exist, it is a fatal error that should generate an exception.
|
@@ -160,11 +155,6 @@ module Neo4j
|
|
160
155
|
fail 'not implemented'
|
161
156
|
end
|
162
157
|
|
163
|
-
# @return [Boolean] true if the node exists
|
164
|
-
def exist?
|
165
|
-
fail 'not implemented'
|
166
|
-
end
|
167
|
-
|
168
158
|
# Works like #rels method but instead returns the nodes.
|
169
159
|
# It does try to load a Ruby wrapper around each node
|
170
160
|
# @abstract
|
@@ -198,6 +188,13 @@ module Neo4j
|
|
198
188
|
def find_nodes(label, value = nil, session = Neo4j::Session.current!)
|
199
189
|
session.find_nodes(label, value)
|
200
190
|
end
|
191
|
+
|
192
|
+
def validate_match!(match)
|
193
|
+
invalid_match_keys = match.keys - [:type, :dir, :between]
|
194
|
+
fail "Invalid match keys: #{invalid_match_keys.inspect}" if !invalid_match_keys.empty?
|
195
|
+
|
196
|
+
fail "Invalid dir: #{match[:dir]}" if ![nil, :incoming, :outgoing, :both].include?(match[:dir])
|
197
|
+
end
|
201
198
|
end
|
202
199
|
|
203
200
|
def initialize
|
@@ -7,16 +7,11 @@ module Neo4j
|
|
7
7
|
get_property(key)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
10
|
# Sets the neo4j property
|
12
11
|
def []=(key, value)
|
13
|
-
validate_property(value)
|
12
|
+
validate_property!(value)
|
14
13
|
|
15
|
-
|
16
|
-
remove_property(key)
|
17
|
-
else
|
18
|
-
set_property(key, value)
|
19
|
-
end
|
14
|
+
set_property(key, value)
|
20
15
|
end
|
21
16
|
end
|
22
17
|
end
|
@@ -13,7 +13,7 @@ module Neo4j
|
|
13
13
|
VALID_PROPERTY_VALUE_CLASSES.include?(value.class)
|
14
14
|
end
|
15
15
|
|
16
|
-
def validate_property(value)
|
16
|
+
def validate_property!(value)
|
17
17
|
return if valid_property?(value)
|
18
18
|
|
19
19
|
fail Neo4j::PropertyValidator::InvalidPropertyException, "Not valid Neo4j Property value #{value.class}, valid: #{Neo4j::Node::VALID_PROPERTY_VALUE_CLASSES.to_a.join(', ')}"
|
data/lib/neo4j/session.rb
CHANGED
@@ -50,6 +50,7 @@ module Neo4j
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
class InitializationError < RuntimeError; end
|
53
54
|
|
54
55
|
# Performs a cypher query. See {Neo4j::Core::Query} for more details, but basic usage looks like:
|
55
56
|
#
|
@@ -94,21 +95,29 @@ module Neo4j
|
|
94
95
|
#
|
95
96
|
# @see also Neo4j::Server::CypherSession#open for :server_db params
|
96
97
|
# @param db_type the type of database, e.g. :embedded_db, or :server_db
|
97
|
-
|
98
|
-
|
98
|
+
# @param [String] endpoint_url The path to the server, either a URL or path to embedded DB
|
99
|
+
# @param [Hash] params Additional configuration options
|
100
|
+
def open(db_type = :server_db, endpoint_url = nil, params = {})
|
101
|
+
validate_session_num!(db_type)
|
102
|
+
name = params[:name]
|
103
|
+
default = params[:default]
|
104
|
+
[:name, :default].each { |k| params.delete(k) }
|
105
|
+
register(create_session(db_type, endpoint_url, params), name, default)
|
99
106
|
end
|
100
107
|
|
101
|
-
|
102
|
-
|
103
|
-
|
108
|
+
# @private
|
109
|
+
def validate_session_num!(db_type)
|
110
|
+
return unless current && db_type == :embedded_db
|
111
|
+
fail InitializationError, 'Multiple sessions are not supported by Neo4j Embedded.'
|
104
112
|
end
|
113
|
+
private :validate_session_num!
|
105
114
|
|
106
115
|
# @private
|
107
|
-
def create_session(db_type, params = {})
|
116
|
+
def create_session(db_type, endpoint_url, params = {})
|
108
117
|
unless @@factories[db_type]
|
109
|
-
fail "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
|
118
|
+
fail InitializationError, "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
|
110
119
|
end
|
111
|
-
@@factories[db_type].call(
|
120
|
+
@@factories[db_type].call(endpoint_url, params)
|
112
121
|
end
|
113
122
|
|
114
123
|
# @return [Neo4j::Session] the current session
|
@@ -140,11 +149,11 @@ module Neo4j
|
|
140
149
|
|
141
150
|
# Registers a callback which will be called immediately if session is already available,
|
142
151
|
# or called when it later becomes available.
|
143
|
-
def on_session_available
|
144
|
-
|
152
|
+
def on_session_available
|
153
|
+
yield Neo4j::Session.current if Neo4j::Session.current
|
145
154
|
|
146
155
|
add_listener do |event, data|
|
147
|
-
|
156
|
+
yield data if event == :session_available
|
148
157
|
end
|
149
158
|
end
|
150
159
|
|
@@ -159,6 +168,10 @@ module Neo4j
|
|
159
168
|
"#{gem}-gem/#{version} (https://github.com/neo4jrb/#{gem})"
|
160
169
|
end
|
161
170
|
|
171
|
+
def clear_listeners
|
172
|
+
@@listeners = []
|
173
|
+
end
|
174
|
+
|
162
175
|
# @private
|
163
176
|
def add_listener(&listener)
|
164
177
|
_listeners << listener
|
@@ -13,7 +13,10 @@ module Neo4j
|
|
13
13
|
# Toggles the status of Neo4j 2.2's basic auth
|
14
14
|
def toggle_auth(status, source_text)
|
15
15
|
status_string = status == :enable ? 'true' : 'false'
|
16
|
-
|
16
|
+
%w(dbms.security.authorization_enabled dbms.security.auth_enabled).each do |key|
|
17
|
+
source_text = set_property(source_text, key, status_string)
|
18
|
+
end
|
19
|
+
source_text
|
17
20
|
end
|
18
21
|
|
19
22
|
# POSTs to an endpoint with the form required to change a Neo4j password
|
@@ -7,48 +7,36 @@ require 'httparty'
|
|
7
7
|
require File.expand_path('../config_server', __FILE__)
|
8
8
|
|
9
9
|
namespace :neo4j do
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
df << HTTParty.get(download_url)
|
25
|
-
success = true
|
26
|
-
ensure
|
27
|
-
df.close
|
28
|
-
File.delete(file_name) unless success
|
29
|
-
end
|
30
|
-
end
|
10
|
+
def file_name
|
11
|
+
OS::Underlying.windows? ? 'neo4j.zip' : 'neo4j-unix.tar.gz'
|
12
|
+
end
|
13
|
+
|
14
|
+
def download_url(edition)
|
15
|
+
"http://dist.neo4j.org/neo4j-#{edition}-#{OS::Underlying.windows? ? 'windows.zip' : 'unix.tar.gz'}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def download_neo4j_unless_exists(edition)
|
19
|
+
download_neo4j(edition) unless File.exist?(file_name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def download_neo4j(edition)
|
23
|
+
success = false
|
31
24
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# puts "parsed_url.host #{parsed_url.host} port #{parsed_url.port} uri: #{parsed_url.request_uri}"
|
37
|
-
# Net::HTTP.start(parsed_url.host, parsed_url.port) do |http|
|
38
|
-
# request = Net::HTTP::Get.new parsed_url.request_uri
|
39
|
-
# http.request request do |response|
|
40
|
-
# File.open 'large_file.tar.gz', 'wb' do |io|
|
41
|
-
# response.read_body do |chunk|
|
42
|
-
# io.write chunk
|
43
|
-
# end
|
44
|
-
# end
|
45
|
-
# end
|
46
|
-
# end
|
47
|
-
#
|
48
|
-
# puts "DOWN LOAD URL #{download_url}, exist #{file_name} : #{File.exist?(file_name)}"
|
49
|
-
#
|
25
|
+
File.open(file_name, 'wb') do |file|
|
26
|
+
file << request_url(download_url(edition))
|
27
|
+
success = true
|
28
|
+
end
|
50
29
|
|
51
30
|
file_name
|
31
|
+
ensure
|
32
|
+
File.delete(file_name) unless success
|
33
|
+
end
|
34
|
+
|
35
|
+
def request_url(url)
|
36
|
+
status = HTTParty.head(url).code
|
37
|
+
fail "#{edition} is not available to download, try a different version" if status < 200 || status >= 300
|
38
|
+
|
39
|
+
HTTParty.get(url)
|
52
40
|
end
|
53
41
|
|
54
42
|
def get_environment(args)
|
@@ -67,24 +55,36 @@ namespace :neo4j do
|
|
67
55
|
def start_server(command, args)
|
68
56
|
puts "Starting Neo4j #{get_environment(args)}..."
|
69
57
|
if OS::Underlying.windows?
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
58
|
+
start_windows_server(command, args)
|
59
|
+
else
|
60
|
+
start_starnix_server(command, args)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def system_or_fail(command)
|
65
|
+
system(command) or fail "Unable to run: #{command}" # rubocop:disable Style/AndOr
|
66
|
+
end
|
67
|
+
|
68
|
+
def start_windows_server(command, args)
|
69
|
+
if system_or_fail!('reg query "HKU\\S-1-5-19"').size > 0
|
70
|
+
system_or_fail("#{install_location(args)}/bin/Neo4j.bat #{command}") # start service
|
76
71
|
else
|
77
|
-
|
72
|
+
puts 'Starting Neo4j directly, not as a service.'
|
73
|
+
system_or_fail("#{install_location(args)}/bin/Neo4j.bat")
|
78
74
|
end
|
79
75
|
end
|
80
76
|
|
77
|
+
def start_starnix_server(command, args)
|
78
|
+
system_or_fail("#{install_location(args)}/bin/neo4j #{command}")
|
79
|
+
end
|
80
|
+
|
81
81
|
desc 'Install Neo4j with auth disabled in v2.2+, example neo4j:install[community-2.1.3,development]'
|
82
82
|
task :install, :edition, :environment do |_, args|
|
83
|
-
|
83
|
+
edition = args[:edition]
|
84
84
|
environment = get_environment(args)
|
85
|
-
puts "Installing Neo4j-#{
|
85
|
+
puts "Installing Neo4j-#{edition} environment: #{environment}"
|
86
86
|
|
87
|
-
downloaded_file =
|
87
|
+
downloaded_file = download_neo4j_unless_exists edition
|
88
88
|
|
89
89
|
if OS::Underlying.windows?
|
90
90
|
# Extract and move to neo4j directory
|
@@ -100,20 +100,20 @@ namespace :neo4j do
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
103
|
-
FileUtils.mv "neo4j-#{
|
103
|
+
FileUtils.mv "neo4j-#{edition}", install_location(args)
|
104
104
|
FileUtils.rm downloaded_file
|
105
105
|
end
|
106
106
|
|
107
107
|
# Install if running with Admin Privileges
|
108
|
-
if
|
109
|
-
|
108
|
+
if system_or_fail('reg query "HKU\\S-1-5-19"').size > 0
|
109
|
+
system_or_fail("\"#{install_location(args)}/bin/neo4j install\"")
|
110
110
|
puts 'Neo4j Installed as a service.'
|
111
111
|
end
|
112
112
|
|
113
113
|
else
|
114
|
-
|
115
|
-
|
116
|
-
|
114
|
+
system_or_fail("tar -xvf #{downloaded_file}")
|
115
|
+
system_or_fail("mv neo4j-#{edition} #{install_location(args)}")
|
116
|
+
system_or_fail("rm #{downloaded_file}")
|
117
117
|
puts 'Neo4j Installed in to neo4j directory.'
|
118
118
|
end
|
119
119
|
rake_auth_toggle(args, :disable) unless /-2\.0|1\.[0-9]/.match(args[:edition])
|
@@ -141,81 +141,58 @@ namespace :neo4j do
|
|
141
141
|
File.open(location, 'w') { |file| file.puts replace }
|
142
142
|
end
|
143
143
|
|
144
|
+
def validate_is_system_admin!
|
145
|
+
return unless OS::Underlying.windows?
|
146
|
+
return if system_or_fail("reg query \"HKU\\S-1-5-19\"").size > 0
|
147
|
+
|
148
|
+
fail 'You do not have administrative rights to stop the Neo4j Service'
|
149
|
+
end
|
150
|
+
|
151
|
+
def run_neo4j_command_or_fail!(args, command)
|
152
|
+
binary = OS::Underlying.windows? ? 'Neo4j.bat' : 'neo4j'
|
153
|
+
|
154
|
+
system_or_fail("#{install_location(args)}/bin/#{binary} #{command}")
|
155
|
+
end
|
156
|
+
|
144
157
|
desc 'Stop the Neo4j Server'
|
145
158
|
task :stop, :environment do |_, args|
|
146
159
|
puts "Stopping Neo4j #{get_environment(args)}..."
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
else
|
151
|
-
puts 'You do not have administrative rights to stop the Neo4j Service'
|
152
|
-
end
|
153
|
-
else
|
154
|
-
`#{install_location(args)}/bin/neo4j stop`
|
155
|
-
end
|
160
|
+
validate_is_system_admin!
|
161
|
+
|
162
|
+
run_neo4j_command_or_fail!(args, :stop)
|
156
163
|
end
|
157
164
|
|
158
165
|
desc 'Get info the Neo4j Server'
|
159
166
|
task :info, :environment do |_, args|
|
160
167
|
puts "Info from Neo4j #{get_environment(args)}..."
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
else
|
165
|
-
puts 'You do not have administrative rights to get info from the Neo4j Service'
|
166
|
-
end
|
167
|
-
else
|
168
|
-
puts `#{install_location(args)}/bin/neo4j info`
|
169
|
-
end
|
168
|
+
validate_is_system_admin!
|
169
|
+
|
170
|
+
run_neo4j_command_or_fail!(args, :info)
|
170
171
|
end
|
171
172
|
|
172
173
|
desc 'Restart the Neo4j Server'
|
173
174
|
task :restart, :environment do |_, args|
|
174
175
|
puts "Restarting Neo4j #{get_environment(args)}..."
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
else
|
179
|
-
puts 'You do not have administrative rights to restart the Neo4j Service'
|
180
|
-
end
|
181
|
-
else
|
182
|
-
`#{install_location(args)}/bin/neo4j restart`
|
183
|
-
end
|
176
|
+
validate_is_system_admin!
|
177
|
+
|
178
|
+
run_neo4j_command_or_fail!(args, :restart)
|
184
179
|
end
|
185
180
|
|
186
181
|
desc 'Reset the Neo4j Server'
|
187
182
|
task :reset_yes_i_am_sure, :environment do |_, args|
|
188
|
-
|
189
|
-
if OS::Underlying.windows?
|
190
|
-
if `reg query "HKU\\S-1-5-19"`.size > 0
|
191
|
-
`#{install_location(args)}/bin/Neo4j.bat stop`
|
192
|
-
|
193
|
-
# Reset the database
|
194
|
-
FileUtils.rm_rf("#{install_location(args)}/data/graph.db")
|
195
|
-
FileUtils.mkdir("#{install_location(args)}/data/graph.db")
|
196
|
-
|
197
|
-
# Remove log files
|
198
|
-
FileUtils.rm_rf("#{install_location(args)}/data/log")
|
199
|
-
FileUtils.mkdir("#{install_location(args)}/data/log")
|
183
|
+
validate_is_system_admin!
|
200
184
|
|
201
|
-
|
202
|
-
else
|
203
|
-
puts 'You do not have administrative rights to reset the Neo4j Service'
|
204
|
-
end
|
205
|
-
else
|
206
|
-
`#{install_location(args)}/bin/neo4j stop`
|
185
|
+
run_neo4j_command_or_fail!(args, :stop)
|
207
186
|
|
208
|
-
|
209
|
-
|
210
|
-
|
187
|
+
# Reset the database
|
188
|
+
FileUtils.rm_rf("#{install_location(args)}/data/graph.db")
|
189
|
+
FileUtils.mkdir("#{install_location(args)}/data/graph.db")
|
211
190
|
|
212
|
-
|
213
|
-
|
214
|
-
|
191
|
+
# Remove log files
|
192
|
+
FileUtils.rm_rf("#{install_location(args)}/data/log")
|
193
|
+
FileUtils.mkdir("#{install_location(args)}/data/log")
|
215
194
|
|
216
|
-
|
217
|
-
`#{install_location(args)}/bin/neo4j start`
|
218
|
-
end
|
195
|
+
run_neo4j_command_or_fail!(args, :start)
|
219
196
|
end
|
220
197
|
|
221
198
|
desc 'Neo4j 2.2: Change connection password'
|
data/lib/neo4j/transaction.rb
CHANGED
@@ -24,7 +24,6 @@ module Neo4j
|
|
24
24
|
def mark_expired
|
25
25
|
@expired = true
|
26
26
|
end
|
27
|
-
alias_method :expired, :mark_expired
|
28
27
|
|
29
28
|
def expired?
|
30
29
|
!!@expired
|
@@ -62,7 +61,7 @@ module Neo4j
|
|
62
61
|
return if @pushed_nested >= 0
|
63
62
|
fail "Can't commit transaction, already committed" if @pushed_nested < -1
|
64
63
|
Neo4j::Transaction.unregister(self)
|
65
|
-
failed? ?
|
64
|
+
failed? ? delete : commit
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
@@ -79,20 +78,14 @@ module Neo4j
|
|
79
78
|
|
80
79
|
return yield(nil) unless run_in_tx
|
81
80
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
tx.mark_failed unless tx.nil?
|
91
|
-
raise
|
92
|
-
ensure
|
93
|
-
tx.close unless tx.nil?
|
94
|
-
end
|
95
|
-
ret
|
81
|
+
tx = Neo4j::Transaction.new
|
82
|
+
yield tx
|
83
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
84
|
+
print_exception_cause(e)
|
85
|
+
tx.mark_failed unless tx.nil?
|
86
|
+
raise
|
87
|
+
ensure
|
88
|
+
tx.close unless tx.nil?
|
96
89
|
end
|
97
90
|
|
98
91
|
# @return [Neo4j::Transaction]
|
@@ -100,6 +93,14 @@ module Neo4j
|
|
100
93
|
Thread.current[:neo4j_curr_tx]
|
101
94
|
end
|
102
95
|
|
96
|
+
# @private
|
97
|
+
def print_exception_cause(exception)
|
98
|
+
return if !exception.respond_to?(:cause) || !exception.cause.respond_to?(:print_stack_trace)
|
99
|
+
|
100
|
+
puts "Java Exception in a transaction, cause: #{exception.cause}"
|
101
|
+
exception.cause.print_stack_trace
|
102
|
+
end
|
103
|
+
|
103
104
|
# @private
|
104
105
|
def unregister(tx)
|
105
106
|
Thread.current[:neo4j_curr_tx] = nil if tx == Thread.current[:neo4j_curr_tx]
|