neo4j-ruby-driver 1.7.4 → 4.4.0

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 (342) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -42
  3. data/lib/loader.rb +5 -3
  4. data/lib/neo4j/driver/auto_closable.rb +2 -2
  5. data/lib/neo4j/driver/exceptions/authentication_exception.rb +6 -1
  6. data/lib/neo4j/driver/exceptions/authorization_expired_exception.rb +14 -0
  7. data/lib/neo4j/driver/{types/bytes.rb → exceptions/certificate_exception.rb} +2 -2
  8. data/lib/neo4j/driver/exceptions/client_exception.rb +3 -0
  9. data/lib/neo4j/driver/exceptions/connection_read_timeout_exception.rb +14 -0
  10. data/lib/neo4j/driver/exceptions/database_exception.rb +3 -0
  11. data/lib/neo4j/driver/exceptions/discovery_exception.rb +16 -0
  12. data/lib/neo4j/driver/exceptions/fatal_discovery_exception.rb +13 -0
  13. data/lib/neo4j/driver/exceptions/protocol_exception.rb +7 -0
  14. data/lib/neo4j/driver/exceptions/result_consumed_exception.rb +13 -0
  15. data/lib/neo4j/driver/exceptions/security_exception.rb +5 -1
  16. data/lib/neo4j/driver/exceptions/service_unavailable_exception.rb +2 -0
  17. data/lib/neo4j/driver/exceptions/session_expired_exception.rb +4 -0
  18. data/lib/neo4j/driver/exceptions/token_expired_exception.rb +15 -0
  19. data/lib/neo4j/driver/exceptions/transaction_nesting_exception.rb +11 -0
  20. data/lib/neo4j/driver/exceptions/transient_exception.rb +3 -0
  21. data/lib/neo4j/driver/exceptions/untrusted_server_exception.rb +1 -0
  22. data/lib/neo4j/driver/exceptions/value/lossy_coercion.rb +15 -0
  23. data/lib/neo4j/driver/exceptions/value/not_multi_valued.rb +13 -0
  24. data/lib/neo4j/driver/exceptions/value/uncoercible.rb +15 -0
  25. data/lib/neo4j/driver/exceptions/value/unsizable.rb +12 -0
  26. data/lib/neo4j/driver/exceptions/value/value_exception.rb +12 -0
  27. data/lib/neo4j/driver/internal/bolt_server_address.rb +97 -0
  28. data/lib/neo4j/driver/internal/duration_normalizer.rb +1 -1
  29. data/lib/neo4j/driver/internal/validator.rb +5 -4
  30. data/{ffi/neo4j/driver/summary/statement_type.rb → lib/neo4j/driver/summary/query_type.rb} +1 -3
  31. data/lib/neo4j/driver/synchronizable.rb +23 -0
  32. data/lib/neo4j/driver/types/time.rb +4 -2
  33. data/lib/neo4j_ruby_driver.rb +5 -10
  34. data/{ffi → ruby}/neo4j/driver/access_mode.rb +2 -2
  35. data/ruby/neo4j/driver/auth_tokens.rb +34 -0
  36. data/ruby/neo4j/driver/bookmark.rb +21 -0
  37. data/ruby/neo4j/driver/config.rb +89 -0
  38. data/ruby/neo4j/driver/graph_database.rb +80 -0
  39. data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +51 -0
  40. data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +22 -0
  41. data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +31 -0
  42. data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +32 -0
  43. data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +83 -0
  44. data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +22 -0
  45. data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +30 -0
  46. data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +83 -0
  47. data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +27 -0
  48. data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +113 -0
  49. data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +57 -0
  50. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +26 -0
  51. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +19 -0
  52. data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +36 -0
  53. data/ruby/neo4j/driver/internal/async/connection/stream.rb +12 -0
  54. data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +16 -0
  55. data/ruby/neo4j/driver/internal/async/connection_context.rb +10 -0
  56. data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +24 -0
  57. data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +30 -0
  58. data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +77 -0
  59. data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +41 -0
  60. data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +32 -0
  61. data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +17 -0
  62. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +171 -0
  63. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +42 -0
  64. data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +51 -0
  65. data/ruby/neo4j/driver/internal/async/internal_async_session.rb +98 -0
  66. data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +13 -0
  67. data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +34 -0
  68. data/ruby/neo4j/driver/internal/async/network_connection.rb +194 -0
  69. data/ruby/neo4j/driver/internal/async/network_session.rb +150 -0
  70. data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +110 -0
  71. data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +39 -0
  72. data/ruby/neo4j/driver/internal/async/pool/channel.rb +62 -0
  73. data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +31 -0
  74. data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +135 -0
  75. data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +156 -0
  76. data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +87 -0
  77. data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +52 -0
  78. data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +21 -0
  79. data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +34 -0
  80. data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +15 -0
  81. data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +17 -0
  82. data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +212 -0
  83. data/ruby/neo4j/driver/internal/bookmark_holder.rb +9 -0
  84. data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +48 -0
  85. data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +14 -0
  86. data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +122 -0
  87. data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +10 -0
  88. data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +68 -0
  89. data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +125 -0
  90. data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +13 -0
  91. data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +31 -0
  92. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +147 -0
  93. data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +43 -0
  94. data/ruby/neo4j/driver/internal/cluster/routing_context.rb +77 -0
  95. data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +60 -0
  96. data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +35 -0
  97. data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +24 -0
  98. data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +95 -0
  99. data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +121 -0
  100. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +73 -0
  101. data/ruby/neo4j/driver/internal/connection_settings.rb +16 -0
  102. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +55 -0
  103. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +24 -0
  104. data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +61 -0
  105. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +24 -0
  106. data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +110 -0
  107. data/ruby/neo4j/driver/internal/database_name_util.rb +37 -0
  108. data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +9 -0
  109. data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +11 -0
  110. data/ruby/neo4j/driver/internal/direct_connection_provider.rb +40 -0
  111. data/ruby/neo4j/driver/internal/driver_factory.rb +126 -0
  112. data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +20 -0
  113. data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +30 -0
  114. data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +25 -0
  115. data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +65 -0
  116. data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +34 -0
  117. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +199 -0
  118. data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +16 -0
  119. data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +29 -0
  120. data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +32 -0
  121. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +168 -0
  122. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +298 -0
  123. data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +20 -0
  124. data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +34 -0
  125. data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +25 -0
  126. data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +21 -0
  127. data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +70 -0
  128. data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +38 -0
  129. data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +34 -0
  130. data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +20 -0
  131. data/ruby/neo4j/driver/internal/impersonation_util.rb +22 -0
  132. data/ruby/neo4j/driver/internal/internal_bookmark.rb +36 -0
  133. data/ruby/neo4j/driver/internal/internal_database_name.rb +9 -0
  134. data/ruby/neo4j/driver/internal/internal_driver.rb +74 -0
  135. data/ruby/neo4j/driver/internal/internal_entity.rb +20 -0
  136. data/ruby/neo4j/driver/internal/internal_node.rb +21 -0
  137. data/ruby/neo4j/driver/internal/internal_pair.rb +9 -0
  138. data/ruby/neo4j/driver/internal/internal_path.rb +35 -0
  139. data/ruby/neo4j/driver/internal/internal_point2_d.rb +9 -0
  140. data/ruby/neo4j/driver/internal/internal_point3_d.rb +6 -0
  141. data/{ffi → ruby}/neo4j/driver/internal/internal_record.rb +2 -1
  142. data/ruby/neo4j/driver/internal/internal_relationship.rb +26 -0
  143. data/ruby/neo4j/driver/internal/internal_result.rb +49 -0
  144. data/ruby/neo4j/driver/internal/internal_session.rb +81 -0
  145. data/ruby/neo4j/driver/internal/internal_transaction.rb +48 -0
  146. data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +29 -0
  147. data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +17 -0
  148. data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +19 -0
  149. data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +17 -0
  150. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +23 -0
  151. data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +30 -0
  152. data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +48 -0
  153. data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +51 -0
  154. data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +31 -0
  155. data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +101 -0
  156. data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +234 -0
  157. data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +15 -0
  158. data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +14 -0
  159. data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +14 -0
  160. data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +15 -0
  161. data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +14 -0
  162. data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +15 -0
  163. data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +16 -0
  164. data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +14 -0
  165. data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +15 -0
  166. data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +14 -0
  167. data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +14 -0
  168. data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +24 -0
  169. data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +22 -0
  170. data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +16 -0
  171. data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +17 -0
  172. data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +25 -0
  173. data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +25 -0
  174. data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +20 -0
  175. data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +20 -0
  176. data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +23 -0
  177. data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +20 -0
  178. data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +31 -0
  179. data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +19 -0
  180. data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +10 -0
  181. data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +26 -0
  182. data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +23 -0
  183. data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +22 -0
  184. data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +32 -0
  185. data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +20 -0
  186. data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +28 -0
  187. data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +23 -0
  188. data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +49 -0
  189. data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +24 -0
  190. data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +40 -0
  191. data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +29 -0
  192. data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +33 -0
  193. data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +34 -0
  194. data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +82 -0
  195. data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +17 -0
  196. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +27 -0
  197. data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +29 -0
  198. data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +17 -0
  199. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +17 -0
  200. data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +25 -0
  201. data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +13 -0
  202. data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +19 -0
  203. data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +18 -0
  204. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +20 -0
  205. data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +17 -0
  206. data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +18 -0
  207. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +15 -0
  208. data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +34 -0
  209. data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +46 -0
  210. data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +105 -0
  211. data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +82 -0
  212. data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +18 -0
  213. data/ruby/neo4j/driver/internal/metrics/listener_event.rb +17 -0
  214. data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +24 -0
  215. data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +15 -0
  216. data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +12 -0
  217. data/ruby/neo4j/driver/internal/packstream/pack_input.rb +47 -0
  218. data/ruby/neo4j/driver/internal/packstream/pack_output.rb +39 -0
  219. data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +326 -0
  220. data/ruby/neo4j/driver/internal/packstream/pack_type.rb +17 -0
  221. data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +13 -0
  222. data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +35 -0
  223. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +151 -0
  224. data/ruby/neo4j/driver/internal/revocation_strategy.rb +19 -0
  225. data/ruby/neo4j/driver/internal/scheme.rb +32 -0
  226. data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +15 -0
  227. data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +48 -0
  228. data/ruby/neo4j/driver/internal/security_setting.rb +66 -0
  229. data/ruby/neo4j/driver/internal/session_factory_impl.rb +32 -0
  230. data/ruby/neo4j/driver/internal/spi/connection.rb +19 -0
  231. data/ruby/neo4j/driver/internal/spi/connection_pool.rb +9 -0
  232. data/ruby/neo4j/driver/internal/spi/response_handler.rb +23 -0
  233. data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +7 -0
  234. data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +11 -0
  235. data/ruby/neo4j/driver/internal/summary/internal_notification.rb +16 -0
  236. data/ruby/neo4j/driver/internal/summary/internal_plan.rb +41 -0
  237. data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +32 -0
  238. data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +33 -0
  239. data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +6 -0
  240. data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +18 -0
  241. data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +196 -0
  242. data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +21 -0
  243. data/ruby/neo4j/driver/internal/util/certificate_tool.rb +65 -0
  244. data/ruby/neo4j/driver/internal/util/clock.rb +29 -0
  245. data/ruby/neo4j/driver/internal/util/error_util.rb +104 -0
  246. data/ruby/neo4j/driver/internal/util/extract.rb +123 -0
  247. data/ruby/neo4j/driver/internal/util/format.rb +39 -0
  248. data/ruby/neo4j/driver/internal/util/futures.rb +99 -0
  249. data/ruby/neo4j/driver/internal/util/iterables.rb +35 -0
  250. data/ruby/neo4j/driver/internal/util/lock_util.rb +23 -0
  251. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +107 -0
  252. data/ruby/neo4j/driver/internal/util/mutex.rb +9 -0
  253. data/ruby/neo4j/driver/internal/util/preconditions.rb +16 -0
  254. data/ruby/neo4j/driver/internal/util/result_holder.rb +72 -0
  255. data/ruby/neo4j/driver/internal/util/server_version.rb +60 -0
  256. data/ruby/neo4j/driver/logging1.rb +51 -0
  257. data/ruby/neo4j/driver/net/server_address.rb +9 -0
  258. data/ruby/neo4j/driver/query.rb +48 -0
  259. data/ruby/neo4j/driver/records.rb +13 -0
  260. data/ruby/neo4j/driver/transaction_config.rb +50 -0
  261. data/ruby/neo4j/driver/values.rb +26 -0
  262. data/{lib → ruby}/neo4j/driver/version.rb +1 -1
  263. data/ruby/neo4j/driver.rb +29 -0
  264. metadata +264 -101
  265. data/ffi/bolt/address.rb +0 -11
  266. data/ffi/bolt/address_resolver.rb +0 -12
  267. data/ffi/bolt/address_set.rb +0 -9
  268. data/ffi/bolt/auth.rb +0 -10
  269. data/ffi/bolt/auto_releasable.rb +0 -22
  270. data/ffi/bolt/boolean.rb +0 -9
  271. data/ffi/bolt/bytes.rb +0 -10
  272. data/ffi/bolt/config.rb +0 -45
  273. data/ffi/bolt/connection.rb +0 -44
  274. data/ffi/bolt/connector.rb +0 -17
  275. data/ffi/bolt/dictionary.rb +0 -15
  276. data/ffi/bolt/error.rb +0 -74
  277. data/ffi/bolt/float.rb +0 -9
  278. data/ffi/bolt/integer.rb +0 -9
  279. data/ffi/bolt/library.rb +0 -12
  280. data/ffi/bolt/lifecycle.rb +0 -9
  281. data/ffi/bolt/list.rb +0 -10
  282. data/ffi/bolt/log.rb +0 -16
  283. data/ffi/bolt/socket_options.rb +0 -14
  284. data/ffi/bolt/status.rb +0 -25
  285. data/ffi/bolt/string.rb +0 -9
  286. data/ffi/bolt/structure.rb +0 -10
  287. data/ffi/bolt/value.rb +0 -35
  288. data/ffi/neo4j/driver/auth_tokens.rb +0 -18
  289. data/ffi/neo4j/driver/config.rb +0 -40
  290. data/ffi/neo4j/driver/graph_database.rb +0 -52
  291. data/ffi/neo4j/driver/internal/async/access_mode_connection.rb +0 -19
  292. data/ffi/neo4j/driver/internal/async/direct_connection.rb +0 -106
  293. data/ffi/neo4j/driver/internal/bolt_server_address.rb +0 -18
  294. data/ffi/neo4j/driver/internal/bookmarks_holder.rb +0 -30
  295. data/ffi/neo4j/driver/internal/direct_connection_provider.rb +0 -28
  296. data/ffi/neo4j/driver/internal/driver_factory.rb +0 -125
  297. data/ffi/neo4j/driver/internal/error_handling.rb +0 -112
  298. data/ffi/neo4j/driver/internal/explicit_transaction.rb +0 -146
  299. data/ffi/neo4j/driver/internal/handlers/pull_all_response_handler.rb +0 -104
  300. data/ffi/neo4j/driver/internal/handlers/response_handler.rb +0 -49
  301. data/ffi/neo4j/driver/internal/handlers/run_response_handler.rb +0 -32
  302. data/ffi/neo4j/driver/internal/handlers/session_pull_all_response_handler.rb +0 -32
  303. data/ffi/neo4j/driver/internal/handlers/transaction_pull_all_response_handler.rb +0 -23
  304. data/ffi/neo4j/driver/internal/internal_driver.rb +0 -45
  305. data/ffi/neo4j/driver/internal/internal_logger.rb +0 -32
  306. data/ffi/neo4j/driver/internal/internal_resolver.rb +0 -31
  307. data/ffi/neo4j/driver/internal/internal_statement_result.rb +0 -52
  308. data/ffi/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -24
  309. data/ffi/neo4j/driver/internal/messaging/v1/bolt_protocol_v1.rb +0 -59
  310. data/ffi/neo4j/driver/internal/messaging/v2/bolt_protocol_v2.rb +0 -16
  311. data/ffi/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -63
  312. data/ffi/neo4j/driver/internal/network_session.rb +0 -129
  313. data/ffi/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -80
  314. data/ffi/neo4j/driver/internal/session_factory_impl.rb +0 -28
  315. data/ffi/neo4j/driver/internal/summary/internal_result_summary.rb +0 -67
  316. data/ffi/neo4j/driver/internal/summary/internal_server_info.rb +0 -19
  317. data/ffi/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -23
  318. data/ffi/neo4j/driver/internal/util/metadata_extractor.rb +0 -15
  319. data/ffi/neo4j/driver/internal/value/base_time_value.rb +0 -22
  320. data/ffi/neo4j/driver/internal/value/date_value.rb +0 -25
  321. data/ffi/neo4j/driver/internal/value/duration_value.rb +0 -27
  322. data/ffi/neo4j/driver/internal/value/local_date_time_value.rb +0 -24
  323. data/ffi/neo4j/driver/internal/value/local_time_value.rb +0 -19
  324. data/ffi/neo4j/driver/internal/value/node_value.rb +0 -18
  325. data/ffi/neo4j/driver/internal/value/offset_time_value.rb +0 -25
  326. data/ffi/neo4j/driver/internal/value/path_value.rb +0 -41
  327. data/ffi/neo4j/driver/internal/value/point2_d_value.rb +0 -24
  328. data/ffi/neo4j/driver/internal/value/point3_d_value.rb +0 -24
  329. data/ffi/neo4j/driver/internal/value/relationship_value.rb +0 -18
  330. data/ffi/neo4j/driver/internal/value/structure_value.rb +0 -42
  331. data/ffi/neo4j/driver/internal/value/time_with_zone_id_value.rb +0 -25
  332. data/ffi/neo4j/driver/internal/value/time_with_zone_offset_value.rb +0 -28
  333. data/ffi/neo4j/driver/internal/value/unbound_relationship_value.rb +0 -18
  334. data/ffi/neo4j/driver/internal/value/value_adapter.rb +0 -101
  335. data/ffi/neo4j/driver/net/server_address.rb +0 -13
  336. data/ffi/neo4j/driver/statement.rb +0 -15
  337. data/ffi/neo4j/driver/types/entity.rb +0 -21
  338. data/ffi/neo4j/driver/types/node.rb +0 -16
  339. data/ffi/neo4j/driver/types/path.rb +0 -35
  340. data/ffi/neo4j/driver/types/relationship.rb +0 -19
  341. data/ffi/neo4j/driver.rb +0 -61
  342. data/lib/neo4j/driver/internal/ruby_signature.rb +0 -18
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- class DirectConnectionProvider
7
- include ErrorHandling
8
-
9
- def initialize(connector, config)
10
- @connector = connector
11
- @config = config
12
- end
13
-
14
- def acquire_connection(mode)
15
- Async::DirectConnection.new(@connector, mode, @config)
16
- end
17
-
18
- def verify_connectivity
19
- acquire_connection(AccessMode::READ).release
20
- end
21
-
22
- def close
23
- Bolt::Connector.destroy(@connector)
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,125 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- class DriverFactory
7
- include ErrorHandling
8
- BOLT_URI_SCHEME = 'bolt'
9
- BOLT_ROUTING_URI_SCHEME = 'bolt+routing'
10
- NEO4J_URI_SCHEME = 'neo4j'
11
- DEFAULT_PORT = 7687
12
-
13
- def new_instance(uri, auth_token, config)
14
- uri = URI(uri)
15
- routing_context = routing_context(uri)
16
- connector, logger, resolver = create_connector(uri, auth_token, routing_context, config)
17
- retry_logic = Retry::ExponentialBackoffRetryLogic.new(config[:max_transaction_retry_time], config[:logger])
18
- create_driver(connector, logger, resolver, retry_logic, config).tap(&:verify_connectivity)
19
- end
20
-
21
- private
22
-
23
- def create_connector(uri, auth_token, routing_context, config)
24
- address = Bolt::Address.create(host(uri).gsub(/^\[(.*)\]$/, '\\1'), port(uri).to_s)
25
- bolt_config = bolt_config(config)
26
- logger = InternalLogger.register(bolt_config, config[:logger])
27
- set_socket_options(bolt_config, config)
28
- set_routing_context(bolt_config, routing_context)
29
- set_scheme(bolt_config, uri, routing_context)
30
- resolver = InternalResolver.register(bolt_config, config[:resolver])
31
- [Bolt::Connector.create(address, auth_token, bolt_config), logger, resolver]
32
- end
33
-
34
- def bolt_config(config)
35
- bolt_config = Bolt::Config.create
36
- config.each do |key, value|
37
- case key
38
- when :max_connection_pool_size
39
- check_error Bolt::Config.set_max_pool_size(bolt_config, value)
40
- when :max_connection_life_time
41
- check_error Bolt::Config.set_max_connection_life_time(bolt_config, DurationNormalizer.milliseconds(value))
42
- when :connection_acquisition_timeout
43
- check_error Bolt::Config.set_max_connection_acquisition_time(bolt_config,
44
- DurationNormalizer.milliseconds(value))
45
- when :encryption
46
- check_error Bolt::Config.set_transport(
47
- bolt_config,
48
- value ? Bolt::Config::BOLT_TRANSPORT_ENCRYPTED : Bolt::Config::BOLT_TRANSPORT_PLAINTEXT
49
- )
50
- end
51
- end
52
- check_error Bolt::Config.set_user_agent(bolt_config, "neo4j-ruby-driver #{Neo4j::Driver::VERSION}")
53
- bolt_config
54
- end
55
-
56
- def set_socket_options(bolt_config, config)
57
- socket_options = Bolt::SocketOptions.create
58
- config.each do |key, value|
59
- case key
60
- when :connection_timeout
61
- check_error Bolt::SocketOptions.set_connect_timeout(socket_options,
62
- DurationNormalizer.milliseconds(value))
63
- when :keep_alive
64
- check_error Bolt::SocketOptions.set_keep_alive(socket_options, value ? 1 : 0)
65
- end
66
- end
67
- check_error Bolt::Config.set_socket_options(bolt_config, socket_options)
68
- end
69
-
70
- def routing_context(uri)
71
- query = uri.query
72
- return if query.blank?
73
- URI.decode_www_form(query).to_h
74
- end
75
-
76
- def set_routing_context(bolt_config, routing_context)
77
- value = Bolt::Value.create
78
- check_error Bolt::Config.set_routing_context(bolt_config, Value::ValueAdapter.to_neo(value, routing_context))
79
- end
80
-
81
- def host(uri)
82
- uri.host.tap { |host| raise ArgumentError, "Invalid address format `#{uri}`" unless host }
83
- end
84
-
85
- def port(uri)
86
- uri.port&.tap { |port| raise ArgumentError, "Illegal port: #{port}" unless (0..65_535).cover?(port) } ||
87
- DEFAULT_PORT
88
- end
89
-
90
- def set_scheme(bolt_config, uri, routing_context)
91
- check_error Bolt::Config.set_scheme(bolt_config, scheme(uri, routing_context))
92
- end
93
-
94
- def scheme(uri, routing_context)
95
- scheme = uri.scheme
96
- case scheme
97
- when BOLT_URI_SCHEME
98
- assert_no_routing_context(uri, routing_context)
99
- Bolt::Config::BOLT_SCHEME_DIRECT
100
- when BOLT_ROUTING_URI_SCHEME, NEO4J_URI_SCHEME
101
- Bolt::Config::BOLT_SCHEME_NEO4J
102
- else
103
- raise Exceptions::ClientException, "Unsupported URI scheme: #{scheme}"
104
- end
105
- end
106
-
107
- def assert_no_routing_context(uri, routing_context)
108
- if routing_context
109
- raise ArgumentError, "Routing parameters are not supported with scheme 'bolt'. Given URI: '#{uri}'"
110
- end
111
- end
112
-
113
- def create_driver(connector, logger, resolver, retry_logic, config)
114
- connection_provider = DirectConnectionProvider.new(connector, config)
115
- session_factory = create_session_factory(connection_provider, retry_logic, config)
116
- InternalDriver.new(session_factory, logger, resolver)
117
- end
118
-
119
- def create_session_factory(connection_provider, retry_logic = nil, config = nil)
120
- SessionFactoryImpl.new(connection_provider, retry_logic, config)
121
- end
122
- end
123
- end
124
- end
125
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module ErrorHandling
7
- def check_error(error_code, status = nil)
8
- case error_code
9
- # Identifies a successful operation which is defined as 0
10
- when Bolt::Error::BOLT_SUCCESS # 0
11
- nil
12
-
13
- # Permission denied
14
- when Bolt::Error::BOLT_PERMISSION_DENIED # 7
15
- throw Exceptions::AuthenticationException.new(error_code, 'Permission denied')
16
-
17
- # Connection refused
18
- when Bolt::Error::BOLT_CONNECTION_REFUSED # 11
19
- throw Exceptions::ServiceUnavailableException.new(error_code, 'unable to acquire connection')
20
-
21
- # Connection pool is full
22
- when Bolt::Error::BOLT_POOL_FULL # 0x600
23
- throw Exceptions::ClientException.new(
24
- error_code,
25
- 'Unable to acquire connection from the pool within configured maximum time of ' \
26
- "#{DurationNormalizer.milliseconds(@config[:connection_acquisition_timeout])}ms"
27
- )
28
-
29
- # Routing table retrieval failed
30
- when Bolt::Error::BOLT_ROUTING_UNABLE_TO_RETRIEVE_ROUTING_TABLE # 0x800
31
- throw Exceptions::ServiceUnavailableException.new(
32
- error_code,
33
- 'Could not perform discovery. No routing servers available.'
34
- )
35
-
36
- # Error set in connection
37
- when Bolt::Error::BOLT_CONNECTION_HAS_MORE_INFO, Bolt::Error::BOLT_STATUS_SET # 0xFFE, 0xFFF
38
- status = Bolt::Connection.status(bolt_connection)
39
- unqualified_error(error_code, status)
40
- else
41
- unqualified_error(error_code, status)
42
- end
43
- end
44
-
45
- def on_failure(_error); end
46
-
47
- def check_status(status)
48
- check_error(Bolt::Status.get_error(status), status)
49
- end
50
-
51
- def with_status
52
- status = Bolt::Status.create
53
- yield status
54
- ensure
55
- check_status(status)
56
- end
57
-
58
- def new_neo4j_error(code:, message:)
59
- case code.split('.')[1]
60
- when 'ClientError'
61
- if code.casecmp('Neo.ClientError.Security.Unauthorized').zero?
62
- Exceptions::AuthenticationException
63
- else
64
- Exceptions::ClientException
65
- end
66
- when 'TransientError'
67
- Exceptions::TransientException
68
- else
69
- Exceptions::DatabaseException
70
- end.new(code, message)
71
- end
72
-
73
- private
74
-
75
- def exception_class(state)
76
- case state
77
- when Bolt::Status::BOLT_CONNECTION_STATE_DEFUNCT
78
- Exceptions::SessionExpiredException
79
- else
80
- Exceptions::Neo4jException
81
- end
82
- end
83
-
84
- def throw(error)
85
- if @failure
86
- error.add_suppressed(@failure)
87
- else
88
- on_failure(error)
89
- end
90
- raise error
91
- end
92
-
93
- def unqualified_error(error_code, status)
94
- details = details(error_code, status)
95
- throw exception_class(details[:state]).new(error_code,
96
- details.map { |key, value| "#{key}: `#{value}`" }.join(', '))
97
- end
98
-
99
- def details(error_code, status)
100
- details = {
101
- code: error_code.to_s(16),
102
- error: Bolt::Error.get_string(error_code)
103
- }
104
- return details unless status
105
- details.merge(state: Bolt::Status.get_state(status),
106
- error: Bolt::Status.get_error(status),
107
- error_context: Bolt::Status.get_error_context(status))
108
- end
109
- end
110
- end
111
- end
112
- end
@@ -1,146 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- class ExplicitTransaction
7
- include ErrorHandling
8
-
9
- delegate :finalize, to: :@handler
10
-
11
- def initialize(connection, session)
12
- @connection = connection
13
- @protocol = connection.protocol
14
- @session = session
15
- @state = :active
16
- end
17
-
18
- def begin(initial_bookmarks, config)
19
- chain @protocol.begin_transaction(@connection, initial_bookmarks, config)
20
- finalize if initial_bookmarks.present?
21
- self
22
- rescue StandardError => e
23
- @connection.release
24
- raise e
25
- end
26
-
27
- def run(query, parameters = {})
28
- ensure_can_run_queries
29
- @result&.failure
30
- @result = @protocol.run_in_explicit_transaction(@connection, Statement.new(query, parameters), self)
31
- end
32
-
33
- def success
34
- @state = :marked_success if @state == :active
35
- end
36
-
37
- def failure
38
- @state = :marked_failed if %i[active marked_success].include? @state
39
- end
40
-
41
- def mark_terminated
42
- @state = :terminated
43
- end
44
-
45
- def close
46
- case @state
47
- when :marked_success
48
- commit
49
- when :committed, :rolled_back
50
- nil
51
- else
52
- rollback
53
- end
54
- end
55
-
56
- def open?
57
- !%i[committed rolled_back].include? @state
58
- end
59
-
60
- def chain(*handlers)
61
- handlers.each do |handler|
62
- handler.previous = @handler
63
- @handler = handler
64
- end
65
- end
66
-
67
- private
68
-
69
- def commit
70
- case @state
71
- when :committed
72
- nil
73
- when :rolled_back
74
- raise Exceptions::ClientExceptiom, "Can't commit, transaction has been rolled back"
75
- else
76
- begin
77
- do_commit
78
- # handleCommitOrRollback( error )
79
- ensure
80
- transaction_closed(:committed)
81
- end
82
- end
83
- end
84
-
85
- def do_commit
86
- if @state == :terminated
87
- raise Exceptions::ClientException, "Transaction can't be committed. " \
88
- 'It has been rolled back either because of an error or explicit termination'
89
- end
90
-
91
- # @session.bookmarks = @protocol.commit_transaction(@connection)
92
- chain @protocol.commit_transaction(@connection)
93
- finalize
94
- @session.bookmarks = @connection.last_bookmark
95
- end
96
-
97
- def rollback
98
- case @state
99
- when :committed
100
- raise ClientException, "Can't rollback, transaction has been committed"
101
- when :rolled_back
102
- nil
103
- else
104
- begin
105
- do_rollback
106
- # resultCursors.retrieveNotConsumedError()
107
- # handleCommitOrRollback( error )
108
- ensure
109
- transaction_closed(:rolled_back)
110
- end
111
- end
112
- end
113
-
114
- def do_rollback
115
- return if @state == :terminated
116
-
117
- chain @protocol.rollback_transaction(@connection)
118
- finalize
119
- end
120
-
121
- def transaction_closed(new_state)
122
- @state = new_state
123
- @session.release_connection
124
- end
125
-
126
- def ensure_can_run_queries
127
- reason =
128
- case @state
129
- when :committed
130
- 'Cannot run more statements in this transaction, it has been committed'
131
- when :rolled_back
132
- 'Cannot run more statements in this transaction, it has been rolled back'
133
- when :marked_failed
134
- 'Cannot run more statements in this transaction, it has been marked for failure. ' \
135
- 'Please either rollback or close this transaction'
136
- when :terminated
137
- 'Cannot run more statements in this transaction, ' \
138
- 'it has either experienced an fatal error or was explicitly terminated'
139
- end
140
-
141
- raise Exceptions::ClientException, reason if reason
142
- end
143
- end
144
- end
145
- end
146
- end
@@ -1,104 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module Handlers
7
- class PullAllResponseHandler < ResponseHandler
8
- delegate :bolt_connection, to: :connection
9
- delegate :statement_keys, to: :run_handler
10
- attr_reader :connection
11
-
12
- def initialize(statement, run_handler, connection, metadata_extractor)
13
- super(connection)
14
- @statement = statement
15
- @previous = run_handler
16
- @metadate_extractor = metadata_extractor
17
- @records = []
18
- end
19
-
20
- def consume
21
- @ignore_records = true
22
- @records.clear
23
- finalize
24
- @summary
25
- rescue StandardError => e
26
- on_failure(e)
27
- raise e
28
- end
29
-
30
- def summary
31
- unless @finished
32
- while (record = fetch)
33
- @records << record
34
- end
35
- end
36
- @summary ||= Summary::InternalResultSummary.new(@statement, run_handler.result_available_after,
37
- bolt_connection)
38
- end
39
-
40
- def peek
41
- @records.first || ((@records << fetch).first unless @finished)
42
- end
43
-
44
- def next
45
- peek
46
- @records.shift
47
- end
48
-
49
- def on_success
50
- @finished = true
51
- summary
52
-
53
- after_success(nil)
54
-
55
- @failure = nil
56
- end
57
-
58
- def failure
59
- summary
60
- super
61
- end
62
-
63
- def on_failure(error)
64
- @failure = error
65
- summary
66
- @finished = true
67
-
68
- after_failure(error)
69
- end
70
-
71
- def finalize
72
- summary unless @ignore_records
73
- super
74
- end
75
-
76
- private
77
-
78
- def run_handler
79
- @previous
80
- end
81
-
82
- def fetch
83
- run_handler.finalize
84
- bolt_connection_fetch = Bolt::Connection.fetch(bolt_connection, request)
85
- case bolt_connection_fetch
86
- when -1
87
- check_status(Bolt::Connection.status(bolt_connection))
88
- when 1
89
- InternalRecord.new(run_handler.statement_keys,
90
- Value::ValueAdapter.to_ruby(Bolt::Connection.field_values(bolt_connection)))
91
- else
92
- @finished = true
93
- check_summary_failure
94
- nil
95
- end
96
- rescue StandardError => e
97
- on_failure(e) unless @failure
98
- raise e
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module Handlers
7
- class ResponseHandler
8
- include ErrorHandling
9
-
10
- delegate :bolt_connection, to: :connection
11
- attr_reader :connection, :failure
12
- attr_accessor :request, :previous
13
-
14
- def initialize(connection)
15
- @connection = connection
16
- end
17
-
18
- def finalize
19
- return if @finished
20
- @finished = true
21
- begin
22
- previous&.finalize
23
- ensure
24
- Bolt::Connection.fetch_summary(bolt_connection, request)
25
- check_summary_failure
26
- end
27
- end
28
-
29
- private
30
-
31
- def check_summary_failure
32
- summary
33
- if Bolt::Connection.summary_success(bolt_connection) == 1
34
- after_success(nil)
35
- else
36
- return if previous&.failure
37
- failure = Value::ValueAdapter.to_ruby(Bolt::Connection.failure(bolt_connection))
38
- raise @failure = new_neo4j_error(**failure)
39
- end
40
- end
41
-
42
- def summary; end
43
-
44
- def after_success(metadata); end
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module Handlers
7
- class RunResponseHandler < ResponseHandler
8
- attr_reader :result_available_after
9
-
10
- def initialize(connection, metadata_extractor)
11
- super(connection)
12
- @statement_keys = []
13
- @metadata_extractor = metadata_extractor
14
- end
15
-
16
- def statement_keys
17
- finalize
18
- @statement_keys
19
- end
20
-
21
- def finalize
22
- return if @finished
23
- super
24
- @statement_keys = Value::ValueAdapter.to_ruby(Bolt::Connection.field_names(bolt_connection)).map(&:to_sym)
25
- metadata = Value::ValueAdapter.to_ruby(Bolt::Connection.metadata(bolt_connection))
26
- @result_available_after = metadata[:result_available_after] || metadata[:t_first]
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module Handlers
7
- class SessionPullAllResponseHandler < PullAllResponseHandler
8
- def initialize(statement, run_handler, connection, bookmarks_holder, metadata_extractor)
9
- super(statement, run_handler, connection, metadata_extractor)
10
- @bookmarks_holder = bookmarks_holder
11
- end
12
-
13
- def after_success(metadata)
14
- @bookmarks_holder.bookmarks = connection.last_bookmark
15
- release_connection
16
- # @bookmarks_holder.bookmarks = @metadata_extractor.extract_bookmarks(metadata)
17
- end
18
-
19
- def after_failure(_error)
20
- release_connection
21
- end
22
-
23
- private
24
-
25
- def release_connection
26
- connection.release
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- module Handlers
7
- class TransactionPullAllResponseHandler < PullAllResponseHandler
8
- def initialize(statement, run_handler, connection, tx, metadata_extractor)
9
- super(statement, run_handler, connection, metadata_extractor)
10
- @tx = tx
11
- @tx.chain run_handler, self
12
- end
13
-
14
- def after_success(_metadata); end
15
-
16
- def after_failure(_error)
17
- @tx.mark_terminated
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Neo4j
4
- module Driver
5
- module Internal
6
- class InternalDriver
7
- extend AutoClosable
8
- include ErrorHandling
9
-
10
- attr_reader :session_factory
11
- delegate :verify_connectivity, to: :session_factory
12
- auto_closable :session
13
-
14
- def initialize(session_factory, logger, resolver)
15
- @session_factory = session_factory
16
- @closed = Concurrent::AtomicBoolean.new(false)
17
- # The below hold references to callbacks called from c,
18
- # this prevents garbage collection before driver is garbage collected
19
- @logger = logger
20
- @resolver = resolver
21
- end
22
-
23
- def session(*args)
24
- new_session(*Neo4j::Driver::Internal::RubySignature.session(args))
25
- end
26
-
27
- def close
28
- session_factory.close if @closed.make_true
29
- # Bolt::Connector.destroy(@connector)
30
- end
31
-
32
- private
33
-
34
- def new_session(mode, bookmarks)
35
- assert_open
36
- session_factory.new_instance(mode, bookmarks)
37
- end
38
-
39
- def assert_open
40
- raise Exceptions::IllegalStateException, 'This driver instance has already been closed' if @closed.true?
41
- end
42
- end
43
- end
44
- end
45
- end