neo4j-ruby-driver 6.0.3.alpha.0 → 6.2.1.beta.2

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 (348) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +113 -411
  3. data/{ruby → lib}/neo4j/driver/access_mode.rb +2 -1
  4. data/lib/neo4j/driver/auth_token_managers.rb +31 -0
  5. data/lib/neo4j/driver/auth_tokens.rb +41 -0
  6. data/lib/neo4j/driver/auto_commit_retries_mode.rb +18 -0
  7. data/lib/neo4j/driver/bolt/bolt_version.rb +67 -0
  8. data/lib/neo4j/driver/bolt/connection.rb +1091 -0
  9. data/lib/neo4j/driver/bolt/handshake.rb +236 -0
  10. data/lib/neo4j/driver/bolt/message/failure.rb +139 -0
  11. data/lib/neo4j/driver/bolt/message/ignored.rb +27 -0
  12. data/lib/neo4j/driver/bolt/message/record.rb +30 -0
  13. data/lib/neo4j/driver/bolt/message/success.rb +34 -0
  14. data/lib/neo4j/driver/bolt/message.rb +112 -0
  15. data/lib/neo4j/driver/bolt/pool.rb +255 -0
  16. data/lib/neo4j/driver/bolt/protocol/base.rb +146 -0
  17. data/lib/neo4j/driver/bolt/protocol/v3.rb +43 -0
  18. data/lib/neo4j/driver/bolt/protocol/v4.rb +24 -0
  19. data/lib/neo4j/driver/bolt/protocol/v43.rb +28 -0
  20. data/lib/neo4j/driver/bolt/protocol/v44.rb +23 -0
  21. data/lib/neo4j/driver/bolt/protocol/v5.rb +27 -0
  22. data/lib/neo4j/driver/bolt/protocol/v51.rb +24 -0
  23. data/lib/neo4j/driver/bolt/protocol/v52.rb +28 -0
  24. data/lib/neo4j/driver/bolt/protocol/v53.rb +27 -0
  25. data/lib/neo4j/driver/bolt/protocol/v54.rb +14 -0
  26. data/lib/neo4j/driver/bolt/protocol/v55.rb +17 -0
  27. data/lib/neo4j/driver/bolt/protocol/v56.rb +14 -0
  28. data/lib/neo4j/driver/bolt/protocol/v57.rb +31 -0
  29. data/lib/neo4j/driver/bolt/protocol/v58.rb +15 -0
  30. data/lib/neo4j/driver/bolt/protocol/v6.rb +43 -0
  31. data/lib/neo4j/driver/bolt/protocol/v61.rb +21 -0
  32. data/lib/neo4j/driver/bolt/protocol_version_handler.rb +39 -0
  33. data/lib/neo4j/driver/bolt/record_buffer.rb +143 -0
  34. data/lib/neo4j/driver/bolt/stream_handler.rb +53 -0
  35. data/lib/neo4j/driver/bolt/tls_config.rb +129 -0
  36. data/lib/neo4j/driver/bolt/wire.rb +321 -0
  37. data/lib/neo4j/driver/bookmark.rb +15 -0
  38. data/lib/neo4j/driver/bookmark_managers.rb +39 -0
  39. data/lib/neo4j/driver/client_certificate.rb +19 -0
  40. data/lib/neo4j/driver/client_certificate_manager.rb +37 -0
  41. data/lib/neo4j/driver/client_certificate_managers.rb +15 -0
  42. data/lib/neo4j/driver/client_certificates.rb +14 -0
  43. data/lib/neo4j/driver/direct/connection_provider.rb +262 -0
  44. data/lib/neo4j/driver/driver.rb +268 -0
  45. data/lib/neo4j/driver/eager_result.rb +10 -0
  46. data/lib/neo4j/driver/exceptions/neo4j_exception.rb +16 -7
  47. data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +1 -1
  48. data/lib/neo4j/driver/exceptions/protocol_exception.rb +0 -5
  49. data/lib/neo4j/driver/exceptions/security_retryable_exception.rb +14 -0
  50. data/lib/neo4j/driver/exceptions/transaction_terminated_exception.rb +13 -0
  51. data/lib/neo4j/driver/graph_database.rb +29 -0
  52. data/lib/neo4j/driver/internal/clock.rb +20 -0
  53. data/lib/neo4j/driver/internal/clock_adapter.rb +21 -0
  54. data/lib/neo4j/driver/internal/default_bookmark_manager.rb +54 -0
  55. data/lib/neo4j/driver/internal/deprecator.rb +9 -5
  56. data/lib/neo4j/driver/internal/driver_factory.rb +128 -0
  57. data/lib/neo4j/driver/internal/duration_normalizer.rb +14 -39
  58. data/lib/neo4j/driver/internal/extras.rb +23 -0
  59. data/lib/neo4j/driver/internal/home_db_cache.rb +57 -0
  60. data/lib/neo4j/driver/internal/internal_auth_token_manager.rb +37 -0
  61. data/lib/neo4j/driver/internal/metrics.rb +31 -0
  62. data/lib/neo4j/driver/internal/security/static_auth_token_manager.rb +25 -0
  63. data/lib/neo4j/driver/internal/validator.rb +16 -2
  64. data/lib/neo4j/driver/net.rb +29 -0
  65. data/lib/neo4j/driver/packstream/markers.rb +49 -0
  66. data/lib/neo4j/driver/packstream/packer.rb +335 -0
  67. data/lib/neo4j/driver/packstream/structure.rb +27 -0
  68. data/lib/neo4j/driver/packstream/unpacker.rb +170 -0
  69. data/lib/neo4j/driver/record.rb +43 -0
  70. data/lib/neo4j/driver/result.rb +282 -0
  71. data/lib/neo4j/driver/routing/load_balancer.rb +706 -0
  72. data/lib/neo4j/driver/routing/routed_connection.rb +132 -0
  73. data/lib/neo4j/driver/routing/routing_table.rb +127 -0
  74. data/lib/neo4j/driver/routing/server_address.rb +25 -0
  75. data/lib/neo4j/driver/routing_control.rb +13 -0
  76. data/lib/neo4j/driver/session.rb +577 -0
  77. data/lib/neo4j/driver/summary/database_info.rb +25 -0
  78. data/lib/neo4j/driver/summary/gql_notification.rb +38 -0
  79. data/lib/neo4j/driver/summary/gql_status_object.rb +35 -0
  80. data/lib/neo4j/driver/summary/notification.rb +46 -0
  81. data/lib/neo4j/driver/summary/plan.rb +23 -0
  82. data/lib/neo4j/driver/summary/profile.rb +28 -0
  83. data/lib/neo4j/driver/summary/query.rb +19 -0
  84. data/lib/neo4j/driver/summary/query_type.rb +5 -1
  85. data/lib/neo4j/driver/summary/result_summary.rb +215 -0
  86. data/lib/neo4j/driver/summary/server_info.rb +33 -0
  87. data/lib/neo4j/driver/summary/summary_counters.rb +72 -0
  88. data/lib/neo4j/driver/transaction.rb +344 -0
  89. data/lib/neo4j/driver/types/duration.rb +76 -0
  90. data/lib/neo4j/driver/types/entity.rb +40 -0
  91. data/lib/neo4j/driver/types/local_date_time.rb +77 -8
  92. data/lib/neo4j/driver/types/local_time.rb +50 -7
  93. data/lib/neo4j/driver/types/node.rb +18 -0
  94. data/lib/neo4j/driver/types/offset_time.rb +78 -7
  95. data/lib/neo4j/driver/types/path.rb +68 -0
  96. data/lib/neo4j/driver/types/point.rb +38 -18
  97. data/lib/neo4j/driver/types/relationship.rb +32 -0
  98. data/lib/neo4j/driver/types/temporal_value.rb +44 -0
  99. data/lib/neo4j/driver/types/unbound_relationship.rb +24 -0
  100. data/lib/neo4j/driver/types/unresolvable_zoned_date_time.rb +38 -0
  101. data/lib/neo4j/driver/types/unsupported_type.rb +25 -0
  102. data/lib/neo4j/driver/types/uuid.rb +29 -0
  103. data/{ruby → lib}/neo4j/driver/version.rb +1 -1
  104. data/lib/neo4j/driver.rb +15 -0
  105. data/lib/neo4j-ruby-driver_loader.rb +34 -20
  106. metadata +115 -441
  107. data/lib/neo4j/driver/internal/bolt_server_address.rb +0 -97
  108. data/lib/neo4j/driver/synchronizable.rb +0 -23
  109. data/lib/neo4j/driver/types/time.rb +0 -45
  110. data/ruby/neo4j/driver/auth_tokens.rb +0 -34
  111. data/ruby/neo4j/driver/bookmark.rb +0 -21
  112. data/ruby/neo4j/driver/config.rb +0 -89
  113. data/ruby/neo4j/driver/graph_database.rb +0 -78
  114. data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
  115. data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
  116. data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
  117. data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
  118. data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
  119. data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
  120. data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
  121. data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
  122. data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
  123. data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
  124. data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
  125. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
  126. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
  127. data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
  128. data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
  129. data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
  130. data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
  131. data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
  132. data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
  133. data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
  134. data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
  135. data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
  136. data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
  137. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
  138. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
  139. data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
  140. data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -92
  141. data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
  142. data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
  143. data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
  144. data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
  145. data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
  146. data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
  147. data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
  148. data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
  149. data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
  150. data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
  151. data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
  152. data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
  153. data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
  154. data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
  155. data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
  156. data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
  157. data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
  158. data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
  159. data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
  160. data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
  161. data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
  162. data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
  163. data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
  164. data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
  165. data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
  166. data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
  167. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
  168. data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
  169. data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
  170. data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
  171. data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
  172. data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
  173. data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
  174. data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
  175. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
  176. data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
  177. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
  178. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
  179. data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
  180. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
  181. data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
  182. data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
  183. data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
  184. data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
  185. data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
  186. data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
  187. data/ruby/neo4j/driver/internal/eager_result_value.rb +0 -5
  188. data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
  189. data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
  190. data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -23
  191. data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
  192. data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
  193. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
  194. data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
  195. data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
  196. data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
  197. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -169
  198. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
  199. data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
  200. data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
  201. data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
  202. data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
  203. data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -79
  204. data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
  205. data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
  206. data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
  207. data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
  208. data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -9
  209. data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
  210. data/ruby/neo4j/driver/internal/internal_driver.rb +0 -83
  211. data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
  212. data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
  213. data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
  214. data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
  215. data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
  216. data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
  217. data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
  218. data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
  219. data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
  220. data/ruby/neo4j/driver/internal/internal_session.rb +0 -91
  221. data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
  222. data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
  223. data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
  224. data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
  225. data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
  226. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
  227. data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
  228. data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
  229. data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
  230. data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
  231. data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
  232. data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
  233. data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
  234. data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
  235. data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
  236. data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
  237. data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
  238. data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
  239. data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
  240. data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
  241. data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
  242. data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
  243. data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
  244. data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
  245. data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
  246. data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
  247. data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
  248. data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
  249. data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
  250. data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
  251. data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
  252. data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
  253. data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
  254. data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
  255. data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
  256. data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
  257. data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
  258. data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
  259. data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
  260. data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
  261. data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
  262. data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
  263. data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
  264. data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
  265. data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
  266. data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
  267. data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
  268. data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
  269. data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
  270. data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
  271. data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
  272. data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
  273. data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
  274. data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
  275. data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
  276. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
  277. data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
  278. data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
  279. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
  280. data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
  281. data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
  282. data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
  283. data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
  284. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
  285. data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
  286. data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
  287. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
  288. data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
  289. data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
  290. data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
  291. data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
  292. data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
  293. data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
  294. data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
  295. data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
  296. data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
  297. data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
  298. data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
  299. data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
  300. data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
  301. data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
  302. data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
  303. data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
  304. data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
  305. data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -324
  306. data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
  307. data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
  308. data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
  309. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -150
  310. data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
  311. data/ruby/neo4j/driver/internal/scheme.rb +0 -32
  312. data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
  313. data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
  314. data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
  315. data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
  316. data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
  317. data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
  318. data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
  319. data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
  320. data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
  321. data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
  322. data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
  323. data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
  324. data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
  325. data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
  326. data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
  327. data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
  328. data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
  329. data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
  330. data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
  331. data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
  332. data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
  333. data/ruby/neo4j/driver/internal/util/format.rb +0 -39
  334. data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
  335. data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
  336. data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
  337. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -101
  338. data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
  339. data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
  340. data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
  341. data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
  342. data/ruby/neo4j/driver/logging1.rb +0 -51
  343. data/ruby/neo4j/driver/net/server_address.rb +0 -9
  344. data/ruby/neo4j/driver/query.rb +0 -48
  345. data/ruby/neo4j/driver/records.rb +0 -13
  346. data/ruby/neo4j/driver/transaction_config.rb +0 -50
  347. data/ruby/neo4j/driver/values.rb +0 -26
  348. data/ruby/neo4j/driver.rb +0 -30
@@ -1,169 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- module Pulln
5
- class AutoPullResponseHandler < BasicPullResponseHandler
6
- delegate :signal, to: :@queue_notification
7
- LONG_MAX_VALUE = 2 ** 63 - 1
8
-
9
- def initialize(query, run_response_handler, connection, metadata_extractor, completion_listener, fetch_size)
10
- super(query, run_response_handler, connection, metadata_extractor, completion_listener)
11
- @fetch_size = fetch_size
12
-
13
- # For pull everything ensure conditions for disabling auto pull are never met
14
- if fetch_size == FetchSizeUtil::UNLIMITED_FETCH_SIZE
15
- @high_record_watermark = LONG_MAX_VALUE
16
- @low_record_watermark = LONG_MAX_VALUE
17
- else
18
- @high_record_watermark = fetch_size * 0.7
19
- @low_record_watermark = fetch_size * 0.3
20
- end
21
-
22
- @queue_notification = ::Async::Notification.new
23
- @records = ::Async::Queue.new(available: @queue_notification)
24
- @auto_pull_enabled = true
25
-
26
- install_record_and_summary_consumers
27
- end
28
-
29
- private def install_record_and_summary_consumers
30
- install_record_consumer do |record, error|
31
- if record
32
- enqueue_record(record)
33
- complete_record_future(record)
34
- end
35
-
36
- # if !error.nil? Handled by summary.error already
37
- if record.nil? && error.nil?
38
- # complete
39
- complete_record_future(nil)
40
- end
41
- end
42
-
43
- install_summary_consumer do |summary, error|
44
- handle_failure(error) if error
45
-
46
- if summary
47
- @summary = summary
48
- complete_summary_future(summary)
49
- end
50
-
51
- if error.nil? && summary.nil? # has_more
52
- request(@fetch_size) if @auto_pull_enabled
53
- end
54
- end
55
- end
56
-
57
- private def handle_failure(error)
58
- # error has not been propagated to the user, remember it
59
- unless fail_record_future(error) || fail_summary_future(error)
60
- @failure = error
61
- end
62
- end
63
-
64
- def peek_async
65
- while @records.empty? && !done?
66
- @records.wait
67
- end
68
- @records.items.first&.then(&Util::ResultHolder.method(:successful)) or
69
- completed_with_value_if_no_failure(nil)
70
- end
71
-
72
- def next_async
73
- peek_async.then { |record| dequeue_record if record }
74
- end
75
-
76
- def consume_async
77
- @records.items.clear
78
- cancel unless done?
79
- completed_with_value_if_no_failure(@summary)
80
- end
81
-
82
- def list_async(&block)
83
- pull_all_async.then do
84
- unless done?
85
- raise Exceptions::IllegalStateException, "Can't get records as list because SUCCESS or FAILURE did not arrive"
86
- end
87
- @records.items.map(&block)
88
- ensure
89
- @records.items.clear
90
- end
91
- end
92
-
93
- def pull_all_failure_async
94
- pull_all_async.chain { |_, error| error }
95
- end
96
-
97
- def pre_populate_records
98
- request(@fetch_size)
99
- end
100
-
101
- private
102
-
103
- def pull_all_async
104
- return completed_with_value_if_no_failure(@summary) if done?
105
- (@summary_future ||= Util::ResultHolder.new).tap do |_|
106
- request(FetchSizeUtil::UNLIMITED_FETCH_SIZE)
107
- end
108
- end
109
-
110
- def enqueue_record(record)
111
- @records << record
112
-
113
- # too many records in the queue, pause auto request gathering
114
- @auto_pull_enabled = false if @records.size > @high_record_watermark
115
- end
116
-
117
- def dequeue_record
118
- record = @records.dequeue
119
-
120
- if @records.size <= @low_record_watermark
121
- # if not in streaming state we need to restart streaming
122
- request(@fetch_size) if state != State::STREAMING_STATE
123
-
124
- @auto_pull_enabled = true
125
- end
126
-
127
- record
128
- end
129
-
130
- def extract_failure
131
- @failure or raise Exceptions::IllegalStateException, "Can't extract failure because it does not exist"
132
- ensure
133
- @failure = nil # propagate failure only once
134
- end
135
-
136
- def complete_record_future(record)
137
- @record_future&.succeed(record)
138
- @record_future = nil
139
- end
140
-
141
- def complete_summary_future(summary)
142
- @summary_future&.succeed(summary)
143
- @summary_future = nil
144
- end
145
-
146
- def fail_record_future(error)
147
- @record_future&.fail(error)
148
- ensure
149
- @record_future = nil
150
- end
151
-
152
- def fail_summary_future(error)
153
- @summary_future&.fail(error)
154
- ensure
155
- @summary_future = nil
156
- end
157
-
158
- def completed_with_value_if_no_failure(value)
159
- if @failure
160
- Util::ResultHolder.failed(extract_failure)
161
- else
162
- Util::ResultHolder.successful(value)
163
- end
164
- end
165
- end
166
- end
167
- end
168
- end
169
- end
@@ -1,298 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- module Pulln
5
- class BasicPullResponseHandler
6
- include Spi::ResponseHandler
7
- attr :state
8
-
9
- def initialize(query, run_response_handler, connection, metadata_extractor, completion_listener)
10
- super()
11
- @query = Validator.require_non_nil!(query)
12
- @run_response_handler = Validator.require_non_nil!(run_response_handler)
13
- @metadata_extractor = Validator.require_non_nil!(metadata_extractor)
14
- @connection = Validator.require_non_nil!(connection)
15
- @completion_listener = Validator.require_non_nil!(completion_listener)
16
- @state = State::READY_STATE
17
- @to_request = 0
18
- end
19
-
20
- def state=(state)
21
- @state = state
22
- signal
23
- end
24
-
25
- def on_success(metadata)
26
- assert_record_and_summary_consumer_installed
27
- @state.on_success(self, metadata)
28
- end
29
-
30
- def on_failure(error)
31
- assert_record_and_summary_consumer_installed
32
- @state.on_failure(self, error)
33
- end
34
-
35
- def on_record(fields)
36
- assert_record_and_summary_consumer_installed
37
- @state.on_record(self, fields)
38
- end
39
-
40
- def request(size)
41
- assert_record_and_summary_consumer_installed
42
- @state.request(self, size)
43
- end
44
-
45
- def cancel
46
- assert_record_and_summary_consumer_installed
47
- @state.cancel(self)
48
- end
49
-
50
- def complete_with_failure(error)
51
- @completion_listener.after_failure(error)
52
- complete(extract_result_summary, error)
53
- end
54
-
55
- def complete_with_success(metadata)
56
- @completion_listener.after_success(metadata)
57
- summary, exception =
58
- begin
59
- [extract_result_summary(**metadata), nil]
60
- rescue Exceptions::Neo4jException => e
61
- [extract_result_summary, e]
62
- end
63
- complete(summary, exception)
64
- end
65
-
66
- def success_has_more
67
- if @to_request > 0 || @to_request == FetchSizeUtil::UNLIMITED_FETCH_SIZE
68
- request(@to_request)
69
- @to_request = 0
70
- end
71
-
72
- # summary consumer use (null, null) to identify done handling of success with has_more
73
- @summary_consumer.call(nil, nil)
74
- end
75
-
76
- def handle_record(fields)
77
- record = InternalRecord.new(@run_response_handler.query_keys, fields)
78
- @record_consumer.call(record, nil)
79
- end
80
-
81
- def write_pull(n)
82
- @connection.write_and_flush(Messaging::Request::PullMessage.new(n, @run_response_handler.query_id), self)
83
- end
84
-
85
- def discard_all
86
- @connection.write_and_flush(Messaging::Request::DiscardMessage.new_discard_all_message(@run_response_handler.query_id), self)
87
- end
88
-
89
- def install_summary_consumer(&summary_consumer)
90
- raise Exceptions::IllegalStateException, 'Summary consumer already installed.' if @summary_consumer
91
-
92
- @summary_consumer = summary_consumer
93
- end
94
-
95
- def install_record_consumer(&record_consumer)
96
- raise Exceptions::IllegalStateException, 'Record consumer already installed.' if @record_consumer
97
-
98
- @record_consumer = record_consumer
99
- end
100
-
101
- def done?
102
- @state == State::SUCCEEDED_STATE || @state == State::FAILURE_STATE
103
- end
104
-
105
- private def extract_result_summary(**metadata)
106
- result_available_after = @run_response_handler.result_available_after
107
- @metadata_extractor.extract_summary(@query, @connection, result_available_after, metadata)
108
- end
109
-
110
- private def add_to_request(to_add)
111
- return if @to_request == FetchSizeUtil::UNLIMITED_FETCH_SIZE
112
-
113
- # pull all
114
- return @to_request = FetchSizeUtil::UNLIMITED_FETCH_SIZE if to_add == FetchSizeUtil::UNLIMITED_FETCH_SIZE
115
-
116
- if to_add <= 0
117
- raise ArgumentError, "Cannot request record amount that is less than or equal to 0. Request amount: #{to_add}"
118
- end
119
-
120
- @to_request += to_add
121
-
122
- # to_add is already at least 1, we hit buffer overflow
123
- @to_request = [@to_request, LONG_MAX_VALUE].min
124
- end
125
-
126
- private def assert_record_and_summary_consumer_installed
127
- # no need to check if we've finished.
128
- return if done?
129
-
130
- if @record_consumer.nil? || @summary_consumer.nil?
131
- raise Exceptions::IllegalStateException, "Access record stream without record consumer and/or summary consumer. Record consumer=#{@record_consumer}, Summary consumer=#{@summary_consumer}"
132
- end
133
- end
134
-
135
- private def complete(summary, error)
136
- # we first inform the summary consumer to ensure when streaming finished, summary is definitely available.
137
- @summary_consumer.call(summary, error)
138
- # record consumer use (nil, nil) to identify the end of record stream
139
- @record_consumer.call(nil, error)
140
- dispose
141
- end
142
-
143
- private def dispose
144
- # release the reference to the consumers who hold the reference to subscribers which shall be released when subscription is completed.
145
- @record_consumer = nil
146
- @summary_consumer = nil
147
- end
148
-
149
- module State
150
- class Ready
151
- def on_success(context, metadata)
152
- context.state = SUCCEEDED_STATE
153
- context.complete_with_success(metadata)
154
- end
155
-
156
- def on_failure(context, error)
157
- context.state = FAILURE_STATE
158
- context.complete_with_failure(error)
159
- end
160
-
161
- def on_record(context, _fields)
162
- context.state = READY_STATE
163
- end
164
-
165
- def request(context, n)
166
- context.state = STREAMING_STATE
167
- context.write_pull(n)
168
- end
169
-
170
- def cancel(context)
171
- context.state = CANCELLED_STATE
172
- context.discard_all
173
- end
174
- end
175
-
176
- READY_STATE = Ready.new
177
-
178
- class Streaming
179
- def on_success(context, metadata)
180
- if metadata[:has_more]
181
- context.state = READY_STATE
182
- context.success_has_more
183
- else
184
- context.state = SUCCEEDED_STATE
185
- context.complete_with_success(metadata)
186
- end
187
- end
188
-
189
- def on_failure(context, error)
190
- context.state = FAILURE_STATE
191
- context.complete_with_failure(error)
192
- end
193
-
194
- def on_record(context, fields)
195
- context.state = STREAMING_STATE
196
- context.handle_record(fields)
197
- end
198
-
199
- def request(context, n)
200
- context.state = STREAMING_STATE
201
- context.add_to_request(n)
202
- end
203
-
204
- def cancel(context)
205
- context.state = CANCELLED_STATE
206
- end
207
- end
208
-
209
- STREAMING_STATE = Streaming.new
210
-
211
- class Cancelled
212
- def on_success(context, metadata)
213
- if metadata[:has_more]
214
- context.state = CANCELLED_STATE
215
- context.discard_all
216
- else
217
- context.state = SUCCEEDED_STATE
218
- context.complete_with_success(metadata)
219
- end
220
- end
221
-
222
- def on_failure(context, error)
223
- context.state = FAILURE_STATE
224
- context.complete_with_failure(error)
225
- end
226
-
227
- def on_record(context, _fields)
228
- context.state = CANCELLED_STATE
229
- end
230
-
231
- def request(context, _n)
232
- context.state = CANCELLED_STATE
233
- end
234
-
235
- def cancel(context)
236
- context.state = CANCELLED_STATE
237
- end
238
- end
239
-
240
- CANCELLED_STATE = Cancelled.new
241
-
242
- class Succeeded
243
- def on_success(context, metadata)
244
- context.state = SUCCEEDED_STATE
245
- context.complete_with_success(metadata)
246
- end
247
-
248
- def on_failure(context, error)
249
- context.state = FAILURE_STATE
250
- context.complete_with_failure(error)
251
- end
252
-
253
- def on_record(context, _fields)
254
- context.state = SUCCEEDED_STATE
255
- end
256
-
257
- def request(context, _n)
258
- context.state = SUCCEEDED_STATE
259
- end
260
-
261
- def cancel(context)
262
- context.state = SUCCEEDED_STATE
263
- end
264
- end
265
-
266
- SUCCEEDED_STATE = Succeeded.new
267
-
268
- class Failed
269
- def on_success(context, metadata)
270
- context.state = SUCCEEDED_STATE
271
- context.complete_with_success(metadata)
272
- end
273
-
274
- def on_failure(context, error)
275
- context.state = FAILURE_STATE
276
- context.complete_with_failure(error)
277
- end
278
-
279
- def on_record(context, _fields)
280
- context.state = FAILURE_STATE
281
- end
282
-
283
- def request(context, _n)
284
- context.state = FAILURE_STATE
285
- end
286
-
287
- def cancel(context)
288
- context.state = FAILURE_STATE
289
- end
290
- end
291
-
292
- FAILURE_STATE = Failed.new
293
- end
294
- end
295
- end
296
- end
297
- end
298
- end
@@ -1,20 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- module Pulln
5
- class FetchSizeUtil
6
- UNLIMITED_FETCH_SIZE = -1
7
- DEFAULT_FETCH_SIZE = 1000
8
-
9
- def self.assert_valid_fetch_size(size)
10
- if size <= 0 && size != UNLIMITED_FETCH_SIZE
11
- raise ArgumentError, "The record fetch size may not be 0 or negative. Illegal record fetch size: #{size}."
12
- end
13
-
14
- size
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,34 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- class ResetResponseHandler
5
- include Spi::ResponseHandler
6
-
7
- def initialize(message_dispatcher, completion_future = nil)
8
- @message_dispatcher = message_dispatcher
9
- @completion_future = completion_future
10
- end
11
-
12
- def on_success(_metadata = {})
13
- reset_completed(true)
14
- end
15
-
16
- def on_failure(_error)
17
- reset_completed(false)
18
- end
19
-
20
- def on_record(_fields)
21
- raise java.lang.UnsupportedOperationException
22
- end
23
-
24
- private def reset_completed(_success)
25
- @message_dispatcher.clear_current_error
26
-
27
- unless @completion_future.nil?
28
- @completion_future.complete(nil)
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,25 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- class RollbackTxResponseHandler
5
- include Spi::ResponseHandler
6
-
7
- def initialize(result_holder)
8
- @result_holder = result_holder
9
- end
10
-
11
- def on_success(_metadata)
12
- @result_holder.succeed
13
- end
14
-
15
- def on_failure(error)
16
- @result_holder.fail(error)
17
- end
18
-
19
- def on_record(fields)
20
- raise "Transaction rollback is not expected to receive records: #{fields}"
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,21 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- class RouteMessageResponseHandler < Struct.new(:completion_listener)
5
- include Spi::ResponseHandler
6
-
7
- def on_success(metadata)
8
- completion_listener.routing_table = metadata[:rt]
9
- end
10
-
11
- def on_failure(error)
12
- raise error
13
- end
14
-
15
- def on_record(fields)
16
- raise "Route is not expected to receive records: #{fields}"
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,79 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- class RoutingResponseHandler
5
- include Spi::ResponseHandler
6
- delegate :on_success, :on_record, :can_manage_auto_read, :disable_auto_read_management, to: :@delegate
7
-
8
- def initialize(delegate, address, access_mode, error_handler)
9
- @delegate = delegate
10
- @address = address
11
- @access_mode = access_mode
12
- @error_handler = error_handler
13
- end
14
-
15
- def on_failure(error)
16
- new_error = handled_error(error)
17
- @delegate.on_failure(new_error)
18
- end
19
-
20
- private
21
-
22
- def handled_error(error)
23
- case error
24
- when Exceptions::ServiceUnavailableException
25
- handled_service_unavailable_exception(error)
26
- when Exceptions::ProtocolException
27
- handled_protocol_exception(error)
28
- when Exceptions::ClientException
29
- handled_client_exception(error)
30
- when Exceptions::TransientException
31
- handled_transient_exception(error)
32
- else
33
- error
34
- end
35
- end
36
-
37
- def handled_service_unavailable_exception(e)
38
- record_connection_failure
39
- Exceptions::SessionExpiredException.new("Server at #{@address} is no longer available", e)
40
- end
41
-
42
- def handled_transient_exception(e)
43
- record_connection_failure if e.code == "Neo.TransientError.General.DatabaseUnavailable"
44
- e
45
- end
46
-
47
- def handled_protocol_exception(e)
48
- record_connection_failure
49
- e
50
- end
51
-
52
- def record_connection_failure
53
- @error_handler.on_connection_failure(@address)
54
- end
55
-
56
- def handled_client_exception(e)
57
- return e unless failure_to_write?(e)
58
-
59
- # The server is unaware of the session mode, so we have to implement this logic in the driver.
60
- # In the future, we might be able to move this logic to the server.
61
- case @access_mode
62
- when AccessMode::READ
63
- Exceptions::ClientException.new('Write queries cannot be performed in READ access mode.')
64
- when AccessMode::WRITE
65
- @error_handler.on_write_failure(@address)
66
- Exceptions::SessionExpiredException.new('Server at %s no longer accepts writes' % @address)
67
- else
68
- raise ArgumentError, @accessMode + ' not supported.'
69
- end
70
- end
71
-
72
- def failure_to_write?(e)
73
- %w[Neo.ClientError.Cluster.NotALeader
74
- Neo.ClientError.General.ForbiddenOnReadOnlyDatabase].include?(e.code)
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,38 +0,0 @@
1
- module Neo4j::Driver
2
- module Internal
3
- module Handlers
4
- class RunResponseHandler
5
- include Spi::ResponseHandler
6
- attr :query_keys, :result_available_after, :query_id, :error
7
-
8
- def initialize(metadata_extractor, connection, tx)
9
- @query_keys = []
10
- @metadata_extractor = metadata_extractor
11
- @connection = connection
12
- @tx = tx
13
- end
14
-
15
- def on_success(metadata)
16
- @query_keys = @metadata_extractor.extract_query_keys(metadata)
17
- @result_available_after = @metadata_extractor.extract_result_available_after(metadata)
18
- @query_id = @metadata_extractor.extract_query_id(metadata)
19
- end
20
-
21
- def on_failure(error)
22
- if @tx
23
- @tx.mark_terminated(error)
24
- elsif error.is_a?(Exceptions::AuthorizationExpiredException)
25
- connection.terminate_and_release(Exceptions::AuthorizationExpiredException::DESCRIPTION)
26
- elsif error.is_a?(Exceptions::ConnectionReadTimeoutException)
27
- connection.terminate_and_release(error.message)
28
- end
29
- @error = error
30
- end
31
-
32
- def on_record(_fields)
33
- raise 'unsupported operation'
34
- end
35
- end
36
- end
37
- end
38
- end