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
@@ -0,0 +1,48 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ class BoltProtocolVersion < Struct.new(:major_version, :minor_version)
5
+ include Comparable
6
+
7
+ def self.from_raw_bytes(raw_version)
8
+ major = raw_version & 0x000000FF
9
+ minor = (raw_version >> 8) & 0x000000FF
10
+ new(major, minor)
11
+ end
12
+
13
+ def to_int
14
+ shifted_minor = minor_version << 8
15
+ shifted_minor | major_version
16
+ end
17
+
18
+ def to_int_range(min_version)
19
+ if major_version != min_version.major_version
20
+ raise ArgumentError, 'Versions should be from the same major version'
21
+ elsif minor_version < min_version.minor_version
22
+ raise ArgumentError, 'Max version should be newer than min version'
23
+ end
24
+
25
+ range = minor_version - min_version.minor_version
26
+ shifted_range = range << 16
27
+ shifted_range | to_int
28
+ end
29
+
30
+ # @return the version in format X.Y where X is the major version and Y is the minor version
31
+ def to_s
32
+ values.join('.')
33
+ end
34
+
35
+ def <=>(other)
36
+ result = major_version <=> other.major_version
37
+ result == 0 ? minor_version <=> other.minor_version : result
38
+ end
39
+
40
+ def self.http?(protocol_version)
41
+ # server would respond with `HTTP..` We read 4 bytes to figure out the version. The first two are not used
42
+ # and therefore parse the `P` (80) for major and `T` (84) for minor.
43
+ protocol_version.major_version == 80 && protocol_version.minor_version == 84
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Common
5
+ class CommonMessageReader
6
+ def initialize(input)
7
+ @unpacker = input
8
+ end
9
+
10
+ def read(handler)
11
+ @unpacker.unpack_struct_header
12
+ type = @unpacker.unpack_struct_signature
13
+
14
+ case type
15
+ when Response::SuccessMessage::SIGNATURE
16
+ unpack_success_message(handler)
17
+ when Response::FailureMessage::SIGNATURE
18
+ unpack_failure_message(handler)
19
+ when Response::IgnoredMessage::SIGNATURE
20
+ unpack_ignored_message(handler)
21
+ when Response::RecordMessage::SIGNATURE
22
+ unpack_record_message(handler)
23
+ else
24
+ raise IOError, "Unknown message type: #{type}"
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def unpack_success_message(output)
31
+ map = @unpacker.unpack
32
+ output.handle_success_message(map)
33
+ end
34
+
35
+ def unpack_failure_message(output)
36
+ output.handle_failure_message(**@unpacker.unpack)
37
+ end
38
+
39
+ def unpack_ignored_message(output)
40
+ output.handle_ignored_message
41
+ end
42
+
43
+ def unpack_record_message(output)
44
+ fields = @unpacker.unpack
45
+ output.handle_record_message(fields)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,31 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Common
5
+ module CommonValue
6
+ include Packstream::PackStream::Common
7
+ DATE = 'D'
8
+ DATE_STRUCT_SIZE = 1
9
+ TIME = 'T'
10
+ TIME_STRUCT_SIZE = 2
11
+ LOCAL_TIME = 't'
12
+ LOCAL_TIME_STRUCT_SIZE = 1
13
+ LOCAL_DATE_TIME = 'd'
14
+ LOCAL_DATE_TIME_STRUCT_SIZE = 2
15
+ DATE_TIME_WITH_ZONE_OFFSET = 'F'
16
+ DATE_TIME_WITH_ZONE_ID = 'f'
17
+ DATE_TIME_STRUCT_SIZE = 3
18
+ DURATION = 'E'
19
+ DURATION_TIME_STRUCT_SIZE = 4
20
+ POINT_2D_STRUCT_TYPE = 'X'
21
+ POINT_2D_STRUCT_SIZE = 3
22
+ POINT_3D_STRUCT_TYPE = 'Y'
23
+ POINT_3D_STRUCT_SIZE = 4
24
+
25
+ EPOCH = Date.parse('1970-01-01')
26
+ NANO_FACTOR = 1_000_000_000
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,101 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Common
5
+ module CommonValuePacker
6
+ include CommonValue
7
+
8
+ def pack(value)
9
+ case value
10
+ when ActiveSupport::Duration
11
+ pack_duration(value)
12
+ when Types::Point
13
+ pack_point(value)
14
+ when Types::OffsetTime
15
+ pack_time(value)
16
+ when Types::LocalTime
17
+ pack_local_time(value)
18
+ when Types::LocalDateTime
19
+ pack_local_date_time(value)
20
+ when ActiveSupport::TimeWithZone
21
+ pack_date_time_with_zone_id(value)
22
+ when Time, DateTime
23
+ pack_date_time_with_zone_offset(value)
24
+ when Date
25
+ pack_date(value)
26
+ else
27
+ super
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def pack_date(local_date)
34
+ pack_struct_header(DATE_STRUCT_SIZE, DATE)
35
+ pack_integer((local_date - EPOCH).to_i)
36
+ end
37
+
38
+ def pack_time(offset_time)
39
+ pack_struct_header(TIME_STRUCT_SIZE, TIME)
40
+ pack_nano_of_day(offset_time)
41
+ pack_utc_offset(offset_time)
42
+ end
43
+
44
+ def pack_utc_offset(time)
45
+ pack_integer(time.utc_offset)
46
+ end
47
+
48
+ def pack_nano_of_day(local_time)
49
+ pack_integer(((local_time.hour * 60 + local_time.min) * 60 + local_time.sec) * NANO_FACTOR + local_time.nsec)
50
+ end
51
+
52
+ def pack_local_time(local_time)
53
+ pack_struct_header(LOCAL_TIME_STRUCT_SIZE, LOCAL_TIME)
54
+ pack_nano_of_day(local_time)
55
+ end
56
+
57
+ def pack_local_date_time(local_date_time)
58
+ pack_struct_header(LOCAL_DATE_TIME_STRUCT_SIZE, LOCAL_DATE_TIME)
59
+ pack_integer(local_date_time.to_i)
60
+ pack_integer(local_date_time.nsec)
61
+ end
62
+
63
+ def pack_date_time_with_zone_id(time)
64
+ pack_struct_header(DATE_TIME_STRUCT_SIZE, DATE_TIME_WITH_ZONE_ID)
65
+ pack_date_time(time)
66
+ pack_string(time.time_zone.tzinfo.identifier)
67
+ end
68
+
69
+ def pack_date_time(time)
70
+ pack_integer(time.to_i + time.utc_offset)
71
+ pack_integer(time.nsec)
72
+ end
73
+
74
+ def pack_date_time_with_zone_offset(time)
75
+ pack_struct_header(DATE_TIME_STRUCT_SIZE, DATE_TIME_WITH_ZONE_OFFSET)
76
+ pack_date_time(time)
77
+ pack_utc_offset(time)
78
+ end
79
+
80
+ def pack_duration(duration)
81
+ pack_struct_header(DURATION_TIME_STRUCT_SIZE, DURATION)
82
+ DurationNormalizer.normalize(duration).each(&method(:pack_integer))
83
+ end
84
+
85
+ def pack_point(point)
86
+ case point.coordinates.size
87
+ when 2
88
+ pack_struct_header(POINT_2D_STRUCT_SIZE, POINT_2D_STRUCT_TYPE)
89
+ when 3
90
+ pack_struct_header(POINT_3D_STRUCT_SIZE, POINT_3D_STRUCT_TYPE)
91
+ else
92
+ raise IOError, "Unknown type: type: #{point.class}, value: #{point.to_s}"
93
+ end
94
+ pack_integer(point.srid.to_i)
95
+ point.coordinates.each(&method(:pack_float))
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,234 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Common
5
+ module CommonValueUnpacker
6
+ include CommonValue
7
+ NODE = 'N'
8
+ RELATIONSHIP = 'R'
9
+ UNBOUND_RELATIONSHIP = 'r'
10
+ PATH = 'P'
11
+ NODE_FIELDS = 3
12
+
13
+ def unpack_map(size)
14
+ size.times.to_h { [unpack.to_sym, unpack] }
15
+ end
16
+
17
+ def unpack_array(size)
18
+ size.times.map { unpack }
19
+ end
20
+
21
+ def unpack
22
+ marker_byte = read_byte
23
+ marker_high_nibble = marker_byte & 0xF0
24
+ marker_low_nibble = marker_byte & 0x0F
25
+
26
+ case marker_high_nibble
27
+ when TINY_STRING
28
+ return unpack_string(marker_low_nibble)
29
+ when TINY_LIST
30
+ return unpack_array(marker_low_nibble)
31
+ when TINY_MAP
32
+ return unpack_map(marker_low_nibble)
33
+ when TINY_STRUCT
34
+ return unpack_struct(marker_low_nibble, read_char)
35
+ end
36
+
37
+ case marker_byte & 0xFF # we read a signed byte but markers are unsigned
38
+ when NULL
39
+ nil
40
+ when TRUE
41
+ true
42
+ when FALSE
43
+ false
44
+ when FLOAT_64
45
+ unpack_double
46
+ when BYTES_8
47
+ unpack_bytes(read_ubyte)
48
+ when BYTES_16
49
+ unpack_bytes(read_ushort)
50
+ when BYTES_32
51
+ unpack_bytes(read_uint)
52
+ when STRING_8
53
+ unpack_string(read_ubyte)
54
+ when STRING_16
55
+ unpack_string(read_ushort)
56
+ when STRING_32
57
+ unpack_string(read_uint)
58
+ when LIST_8
59
+ unpack_array(read_ubyte)
60
+ when LIST_16
61
+ unpack_array(read_ushort)
62
+ when LIST_32
63
+ unpack_array(read_uint)
64
+ when MAP_8
65
+ unpack_map(read_ubyte)
66
+ when MAP_16
67
+ unpack_map(read_ushort)
68
+ when STRUCT_8
69
+ unpack_struct(read_ubyte, read_char)
70
+ when STRUCT_16
71
+ unpack_struct(read_ushort, read_char)
72
+ else
73
+ unpack_long(marker_byte)
74
+ end
75
+ end
76
+
77
+ def unpack_struct(size, type)
78
+ case type
79
+ when DATE
80
+ ensure_correct_struct_size(:DATE, DATE_STRUCT_SIZE, size)
81
+ unpack_date
82
+ when TIME
83
+ ensure_correct_struct_size(:TIME, TIME_STRUCT_SIZE, size)
84
+ unpack_time
85
+ when LOCAL_TIME
86
+ ensure_correct_struct_size(:LOCAL_TIME, LOCAL_TIME_STRUCT_SIZE, size)
87
+ unpack_local_time
88
+ when LOCAL_DATE_TIME
89
+ ensure_correct_struct_size(:LOCAL_DATE_TIME, LOCAL_DATE_TIME_STRUCT_SIZE, size)
90
+ unpack_local_date_time
91
+ when DATE_TIME_WITH_ZONE_OFFSET
92
+ ensure_correct_struct_size(:DATE_TIME_WITH_ZONE_OFFSET, DATE_TIME_STRUCT_SIZE, size)
93
+ unpack_date_time_with_zone_offset
94
+ when DATE_TIME_WITH_ZONE_ID
95
+ ensure_correct_struct_size(:DATE_TIME_WITH_ZONE_ID, DATE_TIME_STRUCT_SIZE, size)
96
+ unpack_date_time_with_zone_id
97
+ when DURATION
98
+ ensure_correct_struct_size(:DURATION, DURATION_TIME_STRUCT_SIZE, size)
99
+ unpack_duration
100
+ when POINT_2D_STRUCT_TYPE
101
+ ensure_correct_struct_size(:POINT, POINT_2D_STRUCT_SIZE, size)
102
+ unpack_point2_d
103
+ when POINT_3D_STRUCT_TYPE
104
+ ensure_correct_struct_size(:POINT, POINT_3D_STRUCT_SIZE, size)
105
+ unpack_point3_d
106
+ when NODE
107
+ ensure_correct_struct_size(:NODE, NODE_FIELDS, size)
108
+ adapted = unpack_node
109
+ when RELATIONSHIP
110
+ ensure_correct_struct_size(:RELATIONSHIP, 5, size)
111
+ unpack_relationship
112
+ when UNBOUND_RELATIONSHIP
113
+ ensure_correct_struct_size(:RELATIONSHIP, 3, size)
114
+ unpack_unbound_relationship
115
+ when PATH
116
+ ensure_correct_struct_size(:PATH, 3, size)
117
+ unpack_path
118
+ else
119
+ raise IOError, "Unknown struct type: #{type}"
120
+ end
121
+ end
122
+
123
+ private
124
+
125
+ def unpack_relationship
126
+ InternalRelationship.new(*4.times.map { unpack }, **unpack)
127
+ end
128
+
129
+ def unpack_unbound_relationship
130
+ InternalRelationship.new(unpack, nil, nil, unpack, **unpack)
131
+ end
132
+
133
+ def unpack_node
134
+ InternalNode.new(unpack, *unpack.map(&:to_sym), **unpack)
135
+ end
136
+
137
+ def unpack_path
138
+ uniq_nodes = unpack
139
+ uniq_rels = unpack
140
+ sequence = unpack
141
+ prev_node = uniq_nodes.first
142
+ nodes = [prev_node] # Start node is always 0, and isn't encoded in the sequence
143
+ rels = []
144
+ path = Types::Path.new(nodes, rels)
145
+ sequence.in_groups_of(2) do |rel_idx, node_idx|
146
+ node = uniq_nodes[node_idx]
147
+ nodes << node
148
+ rel = uniq_rels[rel_idx.abs - 1] # -1 because rel idx are 1-indexed
149
+ update(rel, prev_node, node, rel_idx.negative?)
150
+ rels << rel
151
+ path << Types::Path::Segment.new(prev_node, rel, node)
152
+ prev_node = node
153
+ end
154
+ path
155
+ end
156
+
157
+ def update(rel, prev_node, node, inversed)
158
+ # Negative rel index means this rel was traversed "inversed" from its direction
159
+ prev_node, node = node, prev_node if inversed
160
+ rel.start_node_id = prev_node.id
161
+ rel.end_node_id = node.id
162
+ end
163
+
164
+ def ensure_correct_struct_size(type_constructor, expected, actual)
165
+ if expected != actual
166
+ struct_name = type_constructor.to_s
167
+ raise Neo4j::Driver::Exceptions::ClientException, "Invalid message received, serialized #{struct_name} structures should have #{expected} fields, received #{struct_name} structure has #{actual} fields."
168
+ end
169
+ end
170
+
171
+ private
172
+
173
+ def ensure_correct_struct_signature(struct_name, expected, actual)
174
+ if expected != actual
175
+ struct_name = type_constructor.to_s
176
+ raise Neo4j::Driver::Exceptions::ClientException, "Invalid message received, expected a `#{struct_name}`, signature 0x#{expected.to_i.to_s(16)}. Received signature was 0x#{actual.to_i.to_s(16)}."
177
+ end
178
+ end
179
+
180
+ def unpack_date
181
+ EPOCH + unpack
182
+ end
183
+
184
+ def time(nano_of_day_local, offset_seconds = nil)
185
+ min, sec = Rational(nano_of_day_local, NANO_FACTOR).divmod(60)
186
+ Time.new(0, 1, 1, *min.divmod(60), sec, offset_seconds)
187
+ end
188
+
189
+ def unpack_time
190
+ Types::OffsetTime.new(time(unpack, unpack))
191
+ end
192
+
193
+ def unpack_local_time
194
+ Types::LocalTime.new(time(unpack))
195
+ end
196
+
197
+ def unpack_local_date_time
198
+ Types::LocalDateTime.new(Time.at(unpack, unpack, :nsec).utc)
199
+ end
200
+
201
+ def unpack_date_time_with_zone_offset
202
+ # Time.at(unpack, unpack, :nsec, in: unpack)
203
+ sec = unpack
204
+ nsec = unpack
205
+ offset = unpack
206
+ time = Time.at(sec, nsec, :nsec).utc
207
+ Time.new(time.year, time.month, time.mday, time.hour, time.min, time.sec + Rational(nsec, 1_000_000_000),
208
+ offset)
209
+ end
210
+
211
+ def unpack_date_time_with_zone_id
212
+ time = Time.at(unpack, unpack, :nsec).in_time_zone(TZInfo::Timezone.get(unpack))
213
+ time - time.utc_offset
214
+ end
215
+
216
+ def unpack_duration
217
+ ActiveSupport::Duration.months(unpack) +
218
+ ActiveSupport::Duration.days(unpack) +
219
+ ActiveSupport::Duration.seconds(unpack) +
220
+ ActiveSupport::Duration.seconds(unpack * BigDecimal('1e-9'))
221
+ end
222
+
223
+ def unpack_point2_d
224
+ Types::Point.new(srid: unpack, x: unpack, y: unpack)
225
+ end
226
+
227
+ def unpack_point3_d
228
+ Types::Point.new(srid: unpack, x: unpack, y: unpack, z: unpack)
229
+ end
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,15 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class BeginMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::BeginMessage)
8
+ packer.pack_struct_header(1, message.signature)
9
+ packer.pack(message.metadata)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class CommitMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::CommitMessage)
8
+ packer.pack_struct_header(0, Request::CommitMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class DiscardAllMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::DiscardAllMessage)
8
+ packer.pack_struct_header(0, Request::DiscardAllMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class DiscardMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::DiscardMessage)
8
+ packer.pack_struct_header(1, Request::DiscardMessage::SIGNATURE)
9
+ packer.pack(message.metadata)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class GoodbyeMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::GoodbyeMessage)
8
+ packer.pack_struct_header(0, Request::GoodbyeMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class HelloMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::HelloMessage)
8
+ packer.pack_struct_header(1, message.class::SIGNATURE)
9
+ packer.pack(message.metadata)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class InitMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::InitMessage)
8
+ packer.pack_struct_header(2, message.signature)
9
+ packer.pack(message.user_agent)
10
+ packer.pack(message.auth_token)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class PullAllMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::PullAllMessage)
8
+ packer.pack_struct_header(0, Request::PullAllMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class PullMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::PullMessage)
8
+ packer.pack_struct_header(1, Request::PullMessage::SIGNATURE)
9
+ packer.pack(message.metadata)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class ResetMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::ResetMessage)
8
+ packer.pack_struct_header(0, Request::ResetMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ class RollbackMessageEncoder
6
+ def encode(message, packer)
7
+ Util::Preconditions.check_argument(message, Request::RollbackMessage)
8
+ packer.pack_struct_header(0, Request::RollbackMessage::SIGNATURE)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ # Encodes the ROUTE message to the stream
6
+ class RouteMessageEncoder
7
+ def encode(message, packer)
8
+ Util::Preconditions.check_argument(message, Request::RouteMessage)
9
+ packer.pack_struct_header(3, message.signature)
10
+ packer.pack(message.routing_context)
11
+ packer.pack(message.bookmark&.values || [])
12
+ packer.pack(option(message))
13
+ end
14
+
15
+ private
16
+
17
+ def option(message)
18
+ message.database_name
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module Neo4j::Driver
2
+ module Internal
3
+ module Messaging
4
+ module Encode
5
+ # Encodes the ROUTE message to the stream
6
+ class RouteV44MessageEncoder < RouteMessageEncoder
7
+ private
8
+
9
+ def option(message)
10
+ if message.impersonated_user && !message.database_name
11
+ { imp_user: message.impersonated_user }
12
+ elsif message.database_name
13
+ { db: message.database_name }
14
+ else
15
+ {}
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end