neo4j-ruby-driver 4.4.0.alpha.8 → 4.4.0.alpha.9

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.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/ruby/neo4j/driver/internal/async/network_connection.rb +5 -6
  3. data/ruby/neo4j/driver/internal/async/network_session.rb +6 -9
  4. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +1 -2
  5. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +8 -7
  6. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +1 -2
  7. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -4
  8. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -5
  9. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +10 -80
  10. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +3 -2
  11. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +28 -18
  12. data/ruby/neo4j/driver/internal/internal_driver.rb +0 -4
  13. data/ruby/neo4j/driver/internal/internal_result.rb +1 -12
  14. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +1 -1
  15. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +13 -13
  16. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +4 -15
  17. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +2 -16
  18. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +2 -13
  19. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +1 -1
  20. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +1 -3
  21. data/ruby/neo4j/driver/internal/util/result_holder.rb +2 -0
  22. data/ruby/neo4j/driver/version.rb +1 -1
  23. metadata +2 -3
  24. data/ruby/neo4j/driver/session_config.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d282964e01764e3a21d07c1e836567b3bc1f334e08d45b7392984db661faa14a
4
- data.tar.gz: afc45978f3583f6f491c75c5f4f9da89099620d0be88c0367c8e9469554ecc20
3
+ metadata.gz: 41dc794832386239a05ddcc44bb1937da85f8d1b3d0be4977ab3b53157ab5ac0
4
+ data.tar.gz: e085f6bfce9255985ead9e0aab6bd70a8495f9b62bbfa16fbe38efaac1508032
5
5
  SHA512:
6
- metadata.gz: 0a40657edbf022793691d6926f93ae779d4b671878cdbd29538a0ff83bd82de1912210380715390219503a1fbfb3ada37ae70cce66e6184664b1a90fbff12f80
7
- data.tar.gz: 4ae8f0cb141fc923df3fc8bfab0696adb979a40331e76a440096eb64b3d8060a2f70e49934ed6af06015f734cc1d4f85468b0118b3231db1df4369ff93c0fa63
6
+ metadata.gz: d3eeaeaeb2a4f8d19ffacdec93f2fb64ff5c8a65ab27bf6593d4ae3ce2c08e092b97662bd6ab58f4cc59a5bb4d2215e1c8fe80c916c05eda9e9b9454b72411a5
7
+ data.tar.gz: 0a86332ba42e153c1f21964fbca5a0cdba75bf5b3cea574ce40db4a1a54f090dd43d1b1f6096acb51e04ac7d6cdddaf03a3f84dad6fb4582de911d11f22824b5
@@ -79,11 +79,10 @@ module Neo4j::Driver
79
79
 
80
80
  def terminate_and_release(reason)
81
81
  if @status.compare_and_set(Status::OPEN, Status::TERMINATED)
82
- Connection::ChannelAttributes.set_termination_reason(@channel, reason)
83
- Util::Futures.as_completion_stage(@channel.close).exceptionally(-> (_throwable) { nil }).then_compose(-> (_ignored) { @channel_pool.release(@channel) }).when_complete do |_ignored, _throwable|
84
- @release_future.complete(nil)
85
- @metrics_listener.after_connection_released(Connection::ChannelAttributes.pool_id(@channel), @in_use_event)
86
- end
82
+ @channel.attributes[:termination_reason] = reason
83
+ @channel.close rescue nil
84
+ @channel_pool.release(@channel)
85
+ # @metrics_listener.after_connection_released(Connection::ChannelAttributes.pool_id(@channel), @in_use_event)
87
86
  end
88
87
  end
89
88
 
@@ -96,7 +95,7 @@ module Neo4j::Driver
96
95
  # auto-read could've been disabled, re-enable it to automatically receive response for RESET
97
96
  @channel.auto_read = true
98
97
  @message_dispatcher.enqueue(reset_handler)
99
- @channel.write_and_flush(Messaging::Request::ResetMessage::RESET)#.add_listener(-> (_future) { register_connection_read_timeout(@channel) })
98
+ @channel.write_and_flush(Messaging::Request::ResetMessage::RESET) #.add_listener(-> (_future) { register_connection_read_timeout(@channel) })
100
99
  end
101
100
  end
102
101
 
@@ -22,12 +22,6 @@ module Neo4j::Driver
22
22
  new_result_cursor.map_successful_run_completion_async
23
23
  end
24
24
 
25
- def run_rx(query, **config)
26
- new_result_cursor_stage = build_result_cursor_factory(query, config).then_flat(Cursor::ResultCursorFactory.rx_result)
27
- @result_cursor_stage = new_result_cursor_stage.rescue {}
28
- new_result_cursor_stage
29
- end
30
-
31
25
  def begin_transaction_async(mode = @mode, **config)
32
26
  ensure_session_is_open
33
27
  ensure_no_open_tx_before_starting_tx
@@ -67,9 +61,12 @@ module Neo4j::Driver
67
61
  def close_async
68
62
  return unless @open.make_false
69
63
  # there exists a cursor with potentially unconsumed error, try to extract and propagate it
70
- @result_cursor&.discard_all_failure_async
71
- ensure
64
+ error = @result_cursor&.discard_all_failure_async
72
65
  close_transaction_and_release_connection
66
+ rescue => tx_close_error
67
+ error = Util::Futures.combine_errors(error, tx_close_error)
68
+ ensure
69
+ raise error if error
73
70
  end
74
71
 
75
72
  def current_connection_open?
@@ -89,7 +86,7 @@ module Neo4j::Driver
89
86
 
90
87
  def acquire_connection(mode)
91
88
  # make sure previous result is fully consumed and connection is released back to the pool
92
- @result_cursor&.pull_all_failure_async
89
+ @result_cursor&.pull_all_failure_async&.result!&.then(&method(:raise))
93
90
  if @connection&.open?
94
91
  # there somehow is an existing open connection, this should not happen, just a precondition
95
92
  raise Neo4j::Driver::Exceptions::IllegalStateException.new('Existing open connection detected')
@@ -48,8 +48,7 @@ module Neo4j::Driver
48
48
  resolved_addresses = @resolver.call(@initial_router).flat_map do |server_address|
49
49
  resolve_all_by_domain_name(server_address).unicast_stream
50
50
  # rescue java.net.UnknownHostException => e
51
- rescue => e
52
- exception&.add_suppressed(e)
51
+ rescue SocketError => e
53
52
  exception ||= e
54
53
  []
55
54
  end
@@ -16,9 +16,14 @@ module Neo4j::Driver
16
16
  delegate = connection(connection)
17
17
  procedure = procedure_query(connection.server_version, database_name)
18
18
  bookmark_holder = bookmark_holder(bookmark)
19
- run_procedure(delegate, procedure, bookmark_holder)
20
- .side { release_connection(delegate) }
21
- .chain { |records, error| process_procedure_response(procedure, records, error) }
19
+ begin
20
+ records = run_procedure(delegate, procedure, bookmark_holder)
21
+ RoutingProcedureResponse.new(procedure, records: records)
22
+ rescue => error
23
+ handle_error(procedure, error)
24
+ ensure
25
+ release_connection(delegate)
26
+ end
22
27
  end
23
28
 
24
29
  private
@@ -55,10 +60,6 @@ module Neo4j::Driver
55
60
  connection.release
56
61
  end
57
62
 
58
- def process_procedure_response(procedure, records, error)
59
- error ? handle_error(procedure, error) : RoutingProcedureResponse.new(procedure, records: records)
60
- end
61
-
62
63
  def handle_error(procedure, error)
63
64
  if error.is_a? Exceptions::ClientException
64
65
  RoutingProcedureResponse.new(procedure, error: error)
@@ -41,8 +41,7 @@ module Neo4j::Driver
41
41
 
42
42
  def discard_all_failure_async
43
43
  # runError has priority over other errors and is expected to have been reported to user by now
44
- consume_async.chain { |_summary, error| run_error ? nil : error }
45
- nil
44
+ consume_async.error.then { |error| run_error ? nil : error }
46
45
  end
47
46
 
48
47
  def pull_all_failure_async
@@ -18,10 +18,6 @@ module Neo4j::Driver
18
18
 
19
19
  DisposableAsyncResultCursor.new(AsyncResultCursorImpl.new(@run_handler, @pull_all_handler))
20
20
  end
21
-
22
- def rx_result
23
- Util::Futures.failed_future(Exceptions::ClientException.new('Driver is connected to the database that does not support driver reactive API. In order to use the driver reactive API, please upgrade to neo4j 4.0.0 or later.'))
24
- end
25
21
  end
26
22
  end
27
23
  end
@@ -18,11 +18,6 @@ module Neo4j::Driver
18
18
 
19
19
  DisposableAsyncResultCursor.new(AsyncResultCursorImpl.new(@run_handler, @pull_all_handler))
20
20
  end
21
-
22
- def rx_result
23
- @connection.write_and_flush(@run_message, @run_handler)
24
- @run_future.handle { |_ignored, error| RxResultCursorImpl.new(error, @run_handler, @pull_handler) }
25
- end
26
21
  end
27
22
  end
28
23
  end
@@ -68,65 +68,21 @@ module Neo4j::Driver
68
68
  while @records.empty? && !(@ignore_records || @finished)
69
69
  @records.wait
70
70
  end
71
- record = @records.items.first
72
-
73
- Util::ResultHolder.successful(record)
74
-
75
- # if record.nil?
76
- # return Util::Futures.failed_future(extract_failure) unless @failure.nil?
77
-
78
- # return Util::Futures.completed_with_null if @ignore_records || @finished
79
-
80
- # @record_future = java.util.concurrent.CompletableFuture.new if @record_future.nil?
81
-
82
- # @record_future
83
- # else
84
- # # java.util.concurrent.CompletableFuture.completed_future(record)
85
- # record
86
- # end
71
+ @records.items.first&.then(&Util::ResultHolder.method(:successful)) or
72
+ @failure ? Util::ResultHolder.failed(extract_failure) : Util::ResultHolder.successful(nil)
87
73
  end
88
74
 
89
75
  def next_async
90
- # dequeue_record if peek_async
91
76
  peek_async.then { |record| dequeue_record if record }
92
77
  end
93
78
 
94
79
  def consume_async
95
80
  @ignore_records = true
96
81
  @records.items.clear
97
-
98
- # if pull_all_failure_async.nil?
99
- # # @summary.then(&Util::ResultHolder.method(:successful))
100
- # Util::ResultHolder.successful(@summary)
101
- # else
102
- # raise pull_all_failure_async
103
- # end
104
-
105
- if @failure
106
- Util::ResultHolder.failed(extract_failure)
107
- else
82
+ pull_all_failure_async.result!&.then(&Util::ResultHolder.method(:failed)) or
108
83
  Util::ResultHolder.successful(@summary)
109
- end
110
-
111
- # pull_all_failure_async do |error|
112
- # unless error.nil?
113
- # raise Util::Futures.as_completion_exception, error
114
- # end
115
-
116
- # @summary
117
- # end
118
84
  end
119
85
 
120
- # def list_async(map_function)
121
- # pull_all_failure_async.then_apply do |error|
122
- # unless error.nil?
123
- # raise Util::Futures.as_completion_exception, error
124
- # end
125
-
126
- # records_as_list(map_function)
127
- # end
128
- # end
129
-
130
86
  def each
131
87
  pull_all_failure_async.then do
132
88
  unless @finished
@@ -141,22 +97,17 @@ module Neo4j::Driver
141
97
  end
142
98
 
143
99
  def pull_all_failure_async
144
- if !@failure.nil?
145
- return Util::ResultHolder.failed(extract_failure)
146
- # return java.util.concurrent.CompletableFuture.completed_future(extract_failure)
100
+ if @failure
101
+ Util::ResultHolder.successful(extract_failure)
147
102
  elsif @finished
148
- return nil
149
- # return Util::Futures.completed_with_null
103
+ Util::ResultHolder.successful
150
104
  else
151
- if @failure_future.nil?
105
+ (@failed_future ||= Util::ResultHolder.new).tap do |_|
152
106
  # neither SUCCESS nor FAILURE message has arrived, register future to be notified when it arrives
153
107
  # future will be completed with null on SUCCESS and completed with Throwable on FAILURE
154
108
  # enable auto-read, otherwise we might not read SUCCESS/FAILURE if records are not consumed
155
109
  enable_auto_read
156
- @failure_future = java.util.concurrent.CompletableFuture.new
157
110
  end
158
-
159
- @failure_future
160
111
  end
161
112
  end
162
113
 
@@ -212,38 +163,17 @@ module Neo4j::Driver
212
163
  end
213
164
 
214
165
  def complete_record_future(record)
215
- # unless @record_future.nil?
216
- # future = @record_future
217
- # @record_future = nil
218
- # future.complete(record)
219
- # end
220
166
  @record_future&.succeed(record)
221
167
  @record_future = nil
222
168
  end
223
169
 
224
170
  def fail_record_future(error)
225
- # unless @record_future.nil?
226
- # future = @record_future
227
- # @record_future = nil
228
- # future.complete_exceptionally(error)
229
- # return true
230
- # end
231
-
232
- # false
233
- @record_future&.fail(error)
234
- ensure
235
- @record_future = nil
171
+ @record_future&.fail(error)
172
+ ensure
173
+ @record_future = nil
236
174
  end
237
175
 
238
176
  def complete_failure_future(error)
239
- # unless @failure_future.nil?
240
- # future = @failure_future
241
- # @failure_future = nil
242
- # future.complete(error)
243
- # return true
244
- # end
245
-
246
- # false
247
177
  @failure_future&.fail(error)
248
178
  ensure
249
179
  @failure_future = nil
@@ -100,8 +100,9 @@ module Neo4j::Driver
100
100
 
101
101
  def pull_all_async
102
102
  return completed_with_value_if_no_failure(@summary) if done?
103
- request(FetchSizeUtil::UNLIMITED_FETCH_SIZE)
104
- @summary_future ||= Util::ResultHolder.new
103
+ (@summary_future ||= Util::ResultHolder.new).tap do |_|
104
+ request(FetchSizeUtil::UNLIMITED_FETCH_SIZE)
105
+ end
105
106
  end
106
107
 
107
108
  def enqueue_record(record)
@@ -99,7 +99,7 @@ module Neo4j::Driver
99
99
  end
100
100
 
101
101
  def done?
102
- @state == State::SUCEEDED_STATE || @state == State::FAILURE_STATE
102
+ @state == State::SUCCEEDED_STATE || @state == State::FAILURE_STATE
103
103
  end
104
104
 
105
105
  private def extract_result_summary(**metadata)
@@ -147,7 +147,7 @@ module Neo4j::Driver
147
147
  end
148
148
 
149
149
  module State
150
- READY_STATE = Class.new do
150
+ class Ready
151
151
  def on_success(context, metadata)
152
152
  context.state = SUCCEEDED_STATE
153
153
  context.complete_with_success(metadata)
@@ -171,15 +171,17 @@ module Neo4j::Driver
171
171
  context.state = CANCELLED_STATE
172
172
  context.discard_all
173
173
  end
174
- end.new
174
+ end
175
+
176
+ READY_STATE = Ready.new
175
177
 
176
- STREAMING_STATE = Class.new do
178
+ class Streaming
177
179
  def on_success(context, metadata)
178
180
  if metadata[:has_more]
179
181
  context.state = READY_STATE
180
182
  context.success_has_more
181
183
  else
182
- context.state = SUCEEDED_STATE
184
+ context.state = SUCCEEDED_STATE
183
185
  context.complete_with_success(metadata)
184
186
  end
185
187
  end
@@ -202,15 +204,17 @@ module Neo4j::Driver
202
204
  def cancel(context)
203
205
  context.state = CANCELLED_STATE
204
206
  end
205
- end.new
207
+ end
208
+
209
+ STREAMING_STATE = Streaming.new
206
210
 
207
- CANCELLED_STATE = Class.new do
211
+ class Cancelled
208
212
  def on_success(context, metadata)
209
213
  if metadata[:has_more]
210
214
  context.state = CANCELLED_STATE
211
215
  context.discard_all
212
216
  else
213
- context.state = SUCEEDED_STATE
217
+ context.state = SUCCEEDED_STATE
214
218
  context.complete_with_success(metadata)
215
219
  end
216
220
  end
@@ -231,11 +235,13 @@ module Neo4j::Driver
231
235
  def cancel(context)
232
236
  context.state = CANCELLED_STATE
233
237
  end
234
- end.new
238
+ end
239
+
240
+ CANCELLED_STATE = Cancelled.new
235
241
 
236
- SUCEEDED_STATE = Class.new do
242
+ class Succeeded
237
243
  def on_success(context, metadata)
238
- context.state = SUCEEDED_STATE
244
+ context.state = SUCCEEDED_STATE
239
245
  context.complete_with_success(metadata)
240
246
  end
241
247
 
@@ -245,21 +251,23 @@ module Neo4j::Driver
245
251
  end
246
252
 
247
253
  def on_record(context, _fields)
248
- context.state = SUCEEDED_STATE
254
+ context.state = SUCCEEDED_STATE
249
255
  end
250
256
 
251
257
  def request(context, _n)
252
- context.state = SUCEEDED_STATE
258
+ context.state = SUCCEEDED_STATE
253
259
  end
254
260
 
255
261
  def cancel(context)
256
- context.state = SUCEEDED_STATE
262
+ context.state = SUCCEEDED_STATE
257
263
  end
258
- end.new
264
+ end
265
+
266
+ SUCCEEDED_STATE = Succeeded.new
259
267
 
260
- FAILURE_STATE = Class.new do
268
+ class Failed
261
269
  def on_success(context, metadata)
262
- context.state = SUCEEDED_STATE
270
+ context.state = SUCCEEDED_STATE
263
271
  context.complete_with_success(metadata)
264
272
  end
265
273
 
@@ -279,7 +287,9 @@ module Neo4j::Driver
279
287
  def cancel(context)
280
288
  context.state = FAILURE_STATE
281
289
  end
282
- end.new
290
+ end
291
+
292
+ FAILURE_STATE = Failed.new
283
293
  end
284
294
  end
285
295
  end
@@ -21,10 +21,6 @@ module Neo4j::Driver
21
21
  InternalSession.new(new_session(**session_config))
22
22
  end
23
23
 
24
- def rx_session(**session_config)
25
- InternalRxSession.new(new_session(**session_config))
26
- end
27
-
28
24
  def async_session(**session_config)
29
25
  InternalAsyncSession.new(new_session(**session_config))
30
26
  end
@@ -4,20 +4,13 @@ module Neo4j::Driver
4
4
  extend Synchronizable
5
5
  include Enumerable
6
6
  sync :keys, :has_next?, :next, :single, :peek, :consume
7
+ delegate :keys, to: :@cursor
7
8
 
8
9
  def initialize(connection, cursor)
9
10
  @connection = connection
10
11
  @cursor = cursor
11
12
  end
12
13
 
13
- def keys
14
- @keys ||=
15
- begin
16
- @cursor.peek_async
17
- @cursor.keys
18
- end
19
- end
20
-
21
14
  def has_next?
22
15
  @cursor.peek_async.result!
23
16
  end
@@ -48,10 +41,6 @@ module Neo4j::Driver
48
41
 
49
42
  private
50
43
 
51
- def blocking_get(stage)
52
- Util::Futures.blocking_get(stage, &method(:terminate_connection_on_thread_interrupt))
53
- end
54
-
55
44
  def terminate_connection_on_thread_interrupt
56
45
  @connection.terminate_and_release('Thread interrupted while waiting for result to arrive')
57
46
  end
@@ -4,7 +4,7 @@ module Neo4j::Driver
4
4
  class AbstractMessageWriter
5
5
  def initialize(packer)
6
6
  @packer = Internal::Validator.require_non_nil!(packer)
7
- @encoders_by_message_signature = Internal::Validator.require_non_nil!(build_encoders)
7
+ @encoders_by_message_signature = Internal::Validator.require_non_nil!(build_encoders).transform_values(&:new)
8
8
  end
9
9
 
10
10
  def write(msg)
@@ -3,22 +3,22 @@ module Neo4j::Driver
3
3
  module Messaging
4
4
  module V3
5
5
  class MessageWriterV3 < AbstractMessageWriter
6
+ COMMON_ENCODERS = {
7
+ Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder,
8
+ Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder,
9
+ Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder,
10
+ Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder,
11
+ Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder,
12
+ Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder,
13
+ Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder,
14
+ }
6
15
  private
7
16
 
8
17
  def build_encoders
9
- {
10
- Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder.new,
11
- Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder.new,
12
-
13
- Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder.new,
14
- Request::DiscardAllMessage::SIGNATURE => Encode::DiscardAllMessageEncoder.new,
15
- Request::PullAllMessage::SIGNATURE => Encode::PullAllMessageEncoder.new,
16
-
17
- Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder.new,
18
- Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder.new,
19
- Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder.new,
20
- Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder.new,
21
- }
18
+ COMMON_ENCODERS.merge(
19
+ Request::DiscardAllMessage::SIGNATURE => Encode::DiscardAllMessageEncoder,
20
+ Request::PullAllMessage::SIGNATURE => Encode::PullAllMessageEncoder,
21
+ )
22
22
  end
23
23
  end
24
24
  end
@@ -2,24 +2,13 @@ module Neo4j::Driver
2
2
  module Internal
3
3
  module Messaging
4
4
  module V4
5
- class MessageWriterV4 < AbstractMessageWriter
5
+ class MessageWriterV4 < V3::MessageWriterV3
6
6
  private
7
7
 
8
8
  def build_encoders
9
- {
10
- Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder.new,
11
- Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder.new,
12
- Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder.new,
13
-
14
- Request::DiscardAllMessage::SIGNATURE => Encode::DiscardAllMessageEncoder.new, # new
15
- Request::PullMessage::SIGNATURE => Encode::PullMessageEncoder.new, # new
16
-
17
- Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder.new,
18
- Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder.new,
19
- Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder.new,
20
-
21
- Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder.new,
22
- }
9
+ COMMON_ENCODERS.merge(
10
+ Request::DiscardMessage::SIGNATURE => Encode::DiscardMessageEncoder,
11
+ Request::PullMessage::SIGNATURE => Encode::PullMessageEncoder)
23
12
  end
24
13
  end
25
14
  end
@@ -7,25 +7,11 @@ module Neo4j::Driver
7
7
  # This version is able to encode all the versions existing on v4.2, but it encodes
8
8
 
9
9
  # new messages such as ROUTE
10
- class MessageWriterV43 < AbstractMessageWriter
10
+ class MessageWriterV43 < V4::MessageWriterV4
11
11
  private
12
12
 
13
13
  def build_encoders
14
- {
15
- Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder.new,
16
- Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder.new,
17
- Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder.new,
18
- Request::RouteMessage::SIGNATURE => Encode::RouteMessageEncoder.new, # new
19
-
20
- Request::DiscardMessage::SIGNATURE => Encode::DiscardMessageEncoder.new,
21
- Request::PullMessage::SIGNATURE => Encode::PullMessageEncoder.new,
22
-
23
- Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder.new,
24
- Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder.new,
25
- Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder.new,
26
-
27
- Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder.new,
28
- }
14
+ super.merge(Request::RouteMessage::SIGNATURE => Encode::RouteMessageEncoder)
29
15
  end
30
16
  end
31
17
  end
@@ -2,22 +2,11 @@ module Neo4j::Driver
2
2
  module Internal
3
3
  module Messaging
4
4
  module V44
5
- class MessageWriterV44 < AbstractMessageWriter
5
+ class MessageWriterV44 < V4::MessageWriterV4
6
6
  private
7
7
 
8
8
  def build_encoders
9
- {
10
- Request::HelloMessage::SIGNATURE => Encode::HelloMessageEncoder.new,
11
- Request::GoodbyeMessage::SIGNATURE => Encode::GoodbyeMessageEncoder.new,
12
- Request::RunWithMetadataMessage::SIGNATURE => Encode::RunWithMetadataMessageEncoder.new,
13
- Request::RouteMessage::SIGNATURE => Encode::RouteV44MessageEncoder.new,
14
- Request::DiscardMessage::SIGNATURE => Encode::DiscardMessageEncoder.new,
15
- Request::PullMessage::SIGNATURE => Encode::PullMessageEncoder.new,
16
- Request::BeginMessage::SIGNATURE => Encode::BeginMessageEncoder.new,
17
- Request::CommitMessage::SIGNATURE => Encode::CommitMessageEncoder.new,
18
- Request::RollbackMessage::SIGNATURE => Encode::RollbackMessageEncoder.new,
19
- Request::ResetMessage::SIGNATURE => Encode::ResetMessageEncoder.new,
20
- }
9
+ super.merge(Request::RouteMessage::SIGNATURE => Encode::RouteV44MessageEncoder)
21
10
  end
22
11
  end
23
12
  end
@@ -143,7 +143,7 @@ module Neo4j::Driver
143
143
  end
144
144
 
145
145
  def add_suppressed(error, suppressed_errors)
146
- suppressed_errors&.reject(&error.method(:equal?))&.each(&error.method(:add_suppressed))
146
+ suppressed_errors&.reject(&error.method(:equal?))&.each(&error.method(:add_suppressed)) if error.is_a? Exceptions::Neo4jException
147
147
  end
148
148
  end
149
149
  end
@@ -2,8 +2,6 @@ module Neo4j::Driver
2
2
  module Internal
3
3
  module Util
4
4
  class MetadataExtractor
5
- ABSENT_QUERY_ID = -1
6
-
7
5
  def initialize(result_available_after_metadata_key, result_consumed_after_metadata_key)
8
6
  @result_available_after_metadata_key = result_available_after_metadata_key
9
7
  @result_consumed_after_metadata_key = result_consumed_after_metadata_key
@@ -14,7 +12,7 @@ module Neo4j::Driver
14
12
  end
15
13
 
16
14
  def extract_query_id(metadata)
17
- metadata[:qid] || ABSENT_QUERY_ID
15
+ metadata[:qid]
18
16
  end
19
17
 
20
18
  def extract_result_available_after(metadata)
@@ -2,6 +2,8 @@ module Neo4j::Driver
2
2
  module Internal
3
3
  module Util
4
4
  class ResultHolder
5
+ attr :error
6
+
5
7
  def self.successful(result = nil)
6
8
  new.tap { |holder| holder.succeed(result) }
7
9
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Neo4j
4
4
  module Driver
5
- VERSION = '4.4.0.alpha.8'
5
+ VERSION = '4.4.0.alpha.9'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neo4j-ruby-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.0.alpha.8
4
+ version: 4.4.0.alpha.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Heinrich Klobuczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-19 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -473,7 +473,6 @@ files:
473
473
  - ruby/neo4j/driver/net/server_address.rb
474
474
  - ruby/neo4j/driver/query.rb
475
475
  - ruby/neo4j/driver/records.rb
476
- - ruby/neo4j/driver/session_config.rb
477
476
  - ruby/neo4j/driver/transaction_config.rb
478
477
  - ruby/neo4j/driver/values.rb
479
478
  - ruby/neo4j/driver/version.rb
@@ -1,15 +0,0 @@
1
- module Neo4j
2
- module Driver
3
- # The session configurations used to configure a session.
4
- class SessionConfig < Hash
5
- attr_reader :bookmarks, :default_access_mode, :database, :fetch_size, :impersonated_user
6
- def initialize(**config)
7
- @bookmarks = config.bookmarks
8
- @default_access_mode = config.default_access_mode
9
- @database = config.database
10
- @fetch_size = config.fetch_size
11
- @impersonated_user = config.impersonated_user
12
- end
13
- end
14
- end
15
- end