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.
- checksums.yaml +4 -4
- data/README.md +113 -411
- data/{ruby → lib}/neo4j/driver/access_mode.rb +2 -1
- data/lib/neo4j/driver/auth_token_managers.rb +31 -0
- data/lib/neo4j/driver/auth_tokens.rb +41 -0
- data/lib/neo4j/driver/auto_commit_retries_mode.rb +18 -0
- data/lib/neo4j/driver/bolt/bolt_version.rb +67 -0
- data/lib/neo4j/driver/bolt/connection.rb +1091 -0
- data/lib/neo4j/driver/bolt/handshake.rb +236 -0
- data/lib/neo4j/driver/bolt/message/failure.rb +139 -0
- data/lib/neo4j/driver/bolt/message/ignored.rb +27 -0
- data/lib/neo4j/driver/bolt/message/record.rb +30 -0
- data/lib/neo4j/driver/bolt/message/success.rb +34 -0
- data/lib/neo4j/driver/bolt/message.rb +112 -0
- data/lib/neo4j/driver/bolt/pool.rb +255 -0
- data/lib/neo4j/driver/bolt/protocol/base.rb +146 -0
- data/lib/neo4j/driver/bolt/protocol/v3.rb +43 -0
- data/lib/neo4j/driver/bolt/protocol/v4.rb +24 -0
- data/lib/neo4j/driver/bolt/protocol/v43.rb +28 -0
- data/lib/neo4j/driver/bolt/protocol/v44.rb +23 -0
- data/lib/neo4j/driver/bolt/protocol/v5.rb +27 -0
- data/lib/neo4j/driver/bolt/protocol/v51.rb +24 -0
- data/lib/neo4j/driver/bolt/protocol/v52.rb +28 -0
- data/lib/neo4j/driver/bolt/protocol/v53.rb +27 -0
- data/lib/neo4j/driver/bolt/protocol/v54.rb +14 -0
- data/lib/neo4j/driver/bolt/protocol/v55.rb +17 -0
- data/lib/neo4j/driver/bolt/protocol/v56.rb +14 -0
- data/lib/neo4j/driver/bolt/protocol/v57.rb +31 -0
- data/lib/neo4j/driver/bolt/protocol/v58.rb +15 -0
- data/lib/neo4j/driver/bolt/protocol/v6.rb +43 -0
- data/lib/neo4j/driver/bolt/protocol/v61.rb +21 -0
- data/lib/neo4j/driver/bolt/protocol_version_handler.rb +39 -0
- data/lib/neo4j/driver/bolt/record_buffer.rb +143 -0
- data/lib/neo4j/driver/bolt/stream_handler.rb +53 -0
- data/lib/neo4j/driver/bolt/tls_config.rb +129 -0
- data/lib/neo4j/driver/bolt/wire.rb +321 -0
- data/lib/neo4j/driver/bookmark.rb +15 -0
- data/lib/neo4j/driver/bookmark_managers.rb +39 -0
- data/lib/neo4j/driver/client_certificate.rb +19 -0
- data/lib/neo4j/driver/client_certificate_manager.rb +37 -0
- data/lib/neo4j/driver/client_certificate_managers.rb +15 -0
- data/lib/neo4j/driver/client_certificates.rb +14 -0
- data/lib/neo4j/driver/direct/connection_provider.rb +262 -0
- data/lib/neo4j/driver/driver.rb +268 -0
- data/lib/neo4j/driver/eager_result.rb +10 -0
- data/lib/neo4j/driver/exceptions/neo4j_exception.rb +16 -7
- data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +1 -1
- data/lib/neo4j/driver/exceptions/protocol_exception.rb +0 -5
- data/lib/neo4j/driver/exceptions/security_retryable_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/transaction_terminated_exception.rb +13 -0
- data/lib/neo4j/driver/graph_database.rb +29 -0
- data/lib/neo4j/driver/internal/clock.rb +20 -0
- data/lib/neo4j/driver/internal/clock_adapter.rb +21 -0
- data/lib/neo4j/driver/internal/default_bookmark_manager.rb +54 -0
- data/lib/neo4j/driver/internal/deprecator.rb +9 -5
- data/lib/neo4j/driver/internal/driver_factory.rb +128 -0
- data/lib/neo4j/driver/internal/duration_normalizer.rb +14 -39
- data/lib/neo4j/driver/internal/extras.rb +23 -0
- data/lib/neo4j/driver/internal/home_db_cache.rb +57 -0
- data/lib/neo4j/driver/internal/internal_auth_token_manager.rb +37 -0
- data/lib/neo4j/driver/internal/metrics.rb +31 -0
- data/lib/neo4j/driver/internal/security/static_auth_token_manager.rb +25 -0
- data/lib/neo4j/driver/internal/validator.rb +16 -2
- data/lib/neo4j/driver/net.rb +29 -0
- data/lib/neo4j/driver/packstream/markers.rb +49 -0
- data/lib/neo4j/driver/packstream/packer.rb +335 -0
- data/lib/neo4j/driver/packstream/structure.rb +27 -0
- data/lib/neo4j/driver/packstream/unpacker.rb +170 -0
- data/lib/neo4j/driver/record.rb +43 -0
- data/lib/neo4j/driver/result.rb +282 -0
- data/lib/neo4j/driver/routing/load_balancer.rb +706 -0
- data/lib/neo4j/driver/routing/routed_connection.rb +132 -0
- data/lib/neo4j/driver/routing/routing_table.rb +127 -0
- data/lib/neo4j/driver/routing/server_address.rb +25 -0
- data/lib/neo4j/driver/routing_control.rb +13 -0
- data/lib/neo4j/driver/session.rb +577 -0
- data/lib/neo4j/driver/summary/database_info.rb +25 -0
- data/lib/neo4j/driver/summary/gql_notification.rb +38 -0
- data/lib/neo4j/driver/summary/gql_status_object.rb +35 -0
- data/lib/neo4j/driver/summary/notification.rb +46 -0
- data/lib/neo4j/driver/summary/plan.rb +23 -0
- data/lib/neo4j/driver/summary/profile.rb +28 -0
- data/lib/neo4j/driver/summary/query.rb +19 -0
- data/lib/neo4j/driver/summary/query_type.rb +5 -1
- data/lib/neo4j/driver/summary/result_summary.rb +215 -0
- data/lib/neo4j/driver/summary/server_info.rb +33 -0
- data/lib/neo4j/driver/summary/summary_counters.rb +72 -0
- data/lib/neo4j/driver/transaction.rb +344 -0
- data/lib/neo4j/driver/types/duration.rb +76 -0
- data/lib/neo4j/driver/types/entity.rb +40 -0
- data/lib/neo4j/driver/types/local_date_time.rb +77 -8
- data/lib/neo4j/driver/types/local_time.rb +50 -7
- data/lib/neo4j/driver/types/node.rb +18 -0
- data/lib/neo4j/driver/types/offset_time.rb +78 -7
- data/lib/neo4j/driver/types/path.rb +68 -0
- data/lib/neo4j/driver/types/point.rb +38 -18
- data/lib/neo4j/driver/types/relationship.rb +32 -0
- data/lib/neo4j/driver/types/temporal_value.rb +44 -0
- data/lib/neo4j/driver/types/unbound_relationship.rb +24 -0
- data/lib/neo4j/driver/types/unresolvable_zoned_date_time.rb +38 -0
- data/lib/neo4j/driver/types/unsupported_type.rb +25 -0
- data/lib/neo4j/driver/types/uuid.rb +29 -0
- data/{ruby → lib}/neo4j/driver/version.rb +1 -1
- data/lib/neo4j/driver.rb +15 -0
- data/lib/neo4j-ruby-driver_loader.rb +34 -20
- metadata +115 -441
- data/lib/neo4j/driver/internal/bolt_server_address.rb +0 -97
- data/lib/neo4j/driver/synchronizable.rb +0 -23
- data/lib/neo4j/driver/types/time.rb +0 -45
- data/ruby/neo4j/driver/auth_tokens.rb +0 -34
- data/ruby/neo4j/driver/bookmark.rb +0 -21
- data/ruby/neo4j/driver/config.rb +0 -89
- data/ruby/neo4j/driver/graph_database.rb +0 -78
- data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
- data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
- data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
- data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
- data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
- data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
- data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
- data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
- data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
- data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
- data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
- data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
- data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
- data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
- data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
- data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
- data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
- data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
- data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
- data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
- data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
- data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
- data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
- data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
- data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -92
- data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
- data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
- data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
- data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
- data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
- data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
- data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
- data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
- data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
- data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
- data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
- data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
- data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
- data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
- data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
- data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
- data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
- data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
- data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
- data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
- data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
- data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
- data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
- data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
- data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
- data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
- data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
- data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
- data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
- data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
- data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
- data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
- data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
- data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
- data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
- data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
- data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
- data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
- data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
- data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
- data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
- data/ruby/neo4j/driver/internal/eager_result_value.rb +0 -5
- data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
- data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
- data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -23
- data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
- data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
- data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
- data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
- data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
- data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -169
- data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
- data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
- data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
- data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
- data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -79
- data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
- data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
- data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
- data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
- data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_driver.rb +0 -83
- data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
- data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
- data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
- data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
- data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
- data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
- data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
- data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
- data/ruby/neo4j/driver/internal/internal_session.rb +0 -91
- data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
- data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
- data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
- data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
- data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
- data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
- data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
- data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
- data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
- data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
- data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
- data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
- data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
- data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
- data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
- data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
- data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
- data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
- data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
- data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
- data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
- data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
- data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
- data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
- data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
- data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
- data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
- data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
- data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
- data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
- data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
- data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
- data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
- data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
- data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
- data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
- data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
- data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
- data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
- data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
- data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
- data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
- data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
- data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
- data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
- data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
- data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
- data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
- data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
- data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
- data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
- data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
- data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -324
- data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
- data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
- data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
- data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -150
- data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
- data/ruby/neo4j/driver/internal/scheme.rb +0 -32
- data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
- data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
- data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
- data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
- data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
- data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
- data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
- data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
- data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
- data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
- data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
- data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
- data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
- data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
- data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
- data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
- data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
- data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
- data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
- data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
- data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
- data/ruby/neo4j/driver/internal/util/format.rb +0 -39
- data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
- data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
- data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
- data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -101
- data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
- data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
- data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
- data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
- data/ruby/neo4j/driver/logging1.rb +0 -51
- data/ruby/neo4j/driver/net/server_address.rb +0 -9
- data/ruby/neo4j/driver/query.rb +0 -48
- data/ruby/neo4j/driver/records.rb +0 -13
- data/ruby/neo4j/driver/transaction_config.rb +0 -50
- data/ruby/neo4j/driver/values.rb +0 -26
- data/ruby/neo4j/driver.rb +0 -30
|
@@ -3,16 +3,87 @@
|
|
|
3
3
|
module Neo4j
|
|
4
4
|
module Driver
|
|
5
5
|
module Types
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
# Bolt OffsetTime — time of day with a fixed UTC offset, stored as
|
|
7
|
+
# nanoseconds-since-midnight (in local wall clock) plus offset
|
|
8
|
+
# seconds. Equivalent to java.time.OffsetTime. Was previously
|
|
9
|
+
# called Types::Time, which collided cosmetically with ::Time.
|
|
10
|
+
class OffsetTime < TemporalValue
|
|
11
|
+
attr_reader :nanoseconds, :tz_offset_seconds
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
def self.significant_fields = %i[nanoseconds tz_offset_seconds]
|
|
14
|
+
|
|
15
|
+
def initialize(nanoseconds, tz_offset_seconds)
|
|
16
|
+
@nanoseconds = nanoseconds % NANOS_PER_DAY
|
|
17
|
+
@tz_offset_seconds = tz_offset_seconds
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.from_nanos(nanoseconds, tz_offset_seconds) = new(nanoseconds, tz_offset_seconds)
|
|
21
|
+
|
|
22
|
+
# Build from a Ruby Time — its wall clock plus its UTC offset.
|
|
23
|
+
# Reuses LocalTime's field extraction. Mirrors LocalDateTime.from_time.
|
|
24
|
+
def self.from_time(time)
|
|
25
|
+
new(LocalTime.from_time(time).nanoseconds, time.utc_offset)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Accepts "12:34:56.123456789+01:00", "12:34:56Z", or any string
|
|
29
|
+
# containing such a time-with-offset component.
|
|
30
|
+
def self.parse(string)
|
|
31
|
+
match = string.match(/(\d{1,2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?([Z+-][\d:]*)?/)
|
|
32
|
+
raise ArgumentError, "Invalid OffsetTime format: #{string}" unless match
|
|
33
|
+
|
|
34
|
+
nanos = LocalTime.send(:parse_nanos,
|
|
35
|
+
match[1].to_i, match[2].to_i, (match[3] || 0).to_i, match[4] || '0')
|
|
36
|
+
new(nanos, parse_offset(match[5] || 'Z'))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.parse_offset(str)
|
|
40
|
+
return 0 if str == 'Z'
|
|
41
|
+
raise ArgumentError, "Invalid timezone offset: #{str}" unless str =~ /^([+-])(\d{2}):?(\d{2})?$/
|
|
42
|
+
|
|
43
|
+
sign = ::Regexp.last_match(1) == '+' ? 1 : -1
|
|
44
|
+
sign * (::Regexp.last_match(2).to_i * 3600 + (::Regexp.last_match(3) || 0).to_i * 60)
|
|
13
45
|
end
|
|
46
|
+
private_class_method :parse_offset
|
|
14
47
|
|
|
15
|
-
|
|
48
|
+
def hour = (@nanoseconds / NANOS_PER_HOUR) % 24
|
|
49
|
+
def minute = (@nanoseconds / NANOS_PER_MINUTE) % 60
|
|
50
|
+
def second = (@nanoseconds / NANOS_PER_SECOND) % 60
|
|
51
|
+
def nanosecond = @nanoseconds % NANOS_PER_SECOND
|
|
52
|
+
|
|
53
|
+
# Add a numeric or ActiveSupport::Duration. Sub-second precision
|
|
54
|
+
# preserved (see LocalTime#+).
|
|
55
|
+
def +(other)
|
|
56
|
+
self.class.new(@nanoseconds + (other.to_f * NANOS_PER_SECOND).round, @tz_offset_seconds)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def to_s
|
|
60
|
+
# Apply the sign to the formatted offset as a whole, not to
|
|
61
|
+
# `hours` alone — Ruby integer division for `-12600 / 3600` is
|
|
62
|
+
# -4 (floor toward -∞), which would render -03:30 as -04:30.
|
|
63
|
+
abs = @tz_offset_seconds.abs
|
|
64
|
+
sign = @tz_offset_seconds.negative? ? '-' : '+'
|
|
65
|
+
format('%02d:%02d:%02d.%09d%s%02d:%02d',
|
|
66
|
+
hour, minute, second, nanosecond,
|
|
67
|
+
sign, abs / 3600, (abs % 3600) / 60)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Order by underlying UTC instant. Two OffsetTimes representing
|
|
71
|
+
# the same UTC instant in different offsets compare equal under
|
|
72
|
+
# <=>; == still requires same fields (they're not the same value).
|
|
73
|
+
def <=>(other)
|
|
74
|
+
return nil unless other.is_a?(OffsetTime)
|
|
75
|
+
|
|
76
|
+
utc_nanos <=> other.utc_nanos
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
protected
|
|
80
|
+
|
|
81
|
+
# UTC = local − offset. Positive offset means "ahead of UTC", so
|
|
82
|
+
# the UTC instant is *earlier* (smaller nanos). The previous
|
|
83
|
+
# implementation added instead of subtracting, inverting ordering.
|
|
84
|
+
def utc_nanos
|
|
85
|
+
@nanoseconds - (@tz_offset_seconds * NANOS_PER_SECOND)
|
|
86
|
+
end
|
|
16
87
|
end
|
|
17
88
|
end
|
|
18
89
|
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# Represents a Path in the Neo4j graph
|
|
7
|
+
# A path is a sequence of alternating nodes and relationships
|
|
8
|
+
class Path
|
|
9
|
+
include Enumerable
|
|
10
|
+
|
|
11
|
+
attr_reader :nodes, :relationships
|
|
12
|
+
|
|
13
|
+
def initialize(nodes, relationships, segments)
|
|
14
|
+
@nodes = nodes
|
|
15
|
+
@relationships = relationships
|
|
16
|
+
@segments = segments
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns the start node of the path
|
|
20
|
+
def start
|
|
21
|
+
@nodes.first
|
|
22
|
+
end
|
|
23
|
+
alias start_node start
|
|
24
|
+
|
|
25
|
+
# Returns the end node of the path
|
|
26
|
+
def end
|
|
27
|
+
@nodes.last
|
|
28
|
+
end
|
|
29
|
+
alias end_node end
|
|
30
|
+
|
|
31
|
+
# Returns the number of relationships in the path (number of segments)
|
|
32
|
+
def length
|
|
33
|
+
@relationships.length
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Check if the path contains the given node
|
|
37
|
+
def contains_node?(node)
|
|
38
|
+
@nodes.any? { |n| n.id == node.id }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Check if the path contains the given relationship
|
|
42
|
+
def contains_relationship?(relationship)
|
|
43
|
+
@relationships.any? { |r| r.id == relationship.id }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Iterate over segments in the path
|
|
47
|
+
# Each segment represents a relationship and its start/end nodes
|
|
48
|
+
def each(&)
|
|
49
|
+
@segments.each(&)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Represents a segment of a path (a relationship and its start/end nodes)
|
|
53
|
+
class Segment
|
|
54
|
+
attr_reader :start_node, :end_node, :relationship
|
|
55
|
+
|
|
56
|
+
def initialize(start_node, end_node, relationship)
|
|
57
|
+
@start_node = start_node
|
|
58
|
+
@end_node = end_node
|
|
59
|
+
@relationship = relationship
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
alias start start_node
|
|
63
|
+
alias end end_node
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -3,36 +3,56 @@
|
|
|
3
3
|
module Neo4j
|
|
4
4
|
module Driver
|
|
5
5
|
module Types
|
|
6
|
+
# Point (2D or 3D)
|
|
6
7
|
class Point
|
|
7
|
-
|
|
8
|
+
attr_reader :srid, :x, :y, :z
|
|
8
9
|
|
|
9
|
-
SRID
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}.with_indifferent_access.freeze
|
|
10
|
+
# SRID constants for coordinate reference systems
|
|
11
|
+
WGS_84_2D = 4326 # Geographic 2D (longitude, latitude)
|
|
12
|
+
WGS_84_3D = 4979 # Geographic 3D (longitude, latitude, height)
|
|
13
|
+
CARTESIAN_2D = 7203 # Cartesian 2D (x, y)
|
|
14
|
+
CARTESIAN_3D = 9157 # Cartesian 3D (x, y, z)
|
|
15
15
|
|
|
16
|
-
def initialize(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
def initialize(srid: nil, x: nil, y: nil, z: nil, longitude: nil, latitude: nil, height: nil)
|
|
17
|
+
# Handle longitude/latitude aliases for x/y
|
|
18
|
+
if longitude || latitude
|
|
19
|
+
@x = (longitude || x).to_f
|
|
20
|
+
@y = (latitude || y).to_f
|
|
21
|
+
@z = (height || z)&.to_f
|
|
22
|
+
# Use WGS-84 SRID for geographic coordinates
|
|
23
|
+
@srid = srid || (@z ? WGS_84_3D : WGS_84_2D)
|
|
24
|
+
else
|
|
25
|
+
@x = x.to_f
|
|
26
|
+
@y = y.to_f
|
|
27
|
+
@z = z&.to_f
|
|
28
|
+
# Use Cartesian SRID for x/y/z coordinates
|
|
29
|
+
@srid = srid || (@z ? CARTESIAN_3D : CARTESIAN_2D)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def dimension
|
|
34
|
+
@z.nil? ? 2 : 3
|
|
21
35
|
end
|
|
22
36
|
|
|
23
37
|
def coordinates
|
|
24
38
|
[x, y, z].compact.map(&:to_f)
|
|
25
39
|
end
|
|
26
40
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if geo
|
|
31
|
-
z ? :'WGS-84-3D' : :'WGS-84'
|
|
41
|
+
def to_s
|
|
42
|
+
if @z
|
|
43
|
+
"Point{srid=#{@srid}, x=#{@x}, y=#{@y}, z=#{@z}}"
|
|
32
44
|
else
|
|
33
|
-
|
|
45
|
+
"Point{srid=#{@srid}, x=#{@x}, y=#{@y}}"
|
|
34
46
|
end
|
|
35
47
|
end
|
|
48
|
+
|
|
49
|
+
def ==(other)
|
|
50
|
+
other.is_a?(Point) &&
|
|
51
|
+
other.srid == @srid &&
|
|
52
|
+
(other.x - @x).abs < 0.00001 &&
|
|
53
|
+
(other.y - @y).abs < 0.00001 &&
|
|
54
|
+
(@z.nil? || (other.z - @z).abs < 0.00001)
|
|
55
|
+
end
|
|
36
56
|
end
|
|
37
57
|
end
|
|
38
58
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# Represents a Relationship in the Neo4j graph.
|
|
7
|
+
# Mirrors Java's org.neo4j.driver.types.Relationship — an Entity with a
|
|
8
|
+
# type and start/end node ids.
|
|
9
|
+
class Relationship < Entity
|
|
10
|
+
attr_reader :start_node_id, :end_node_id, :type,
|
|
11
|
+
:start_node_element_id, :end_node_element_id
|
|
12
|
+
|
|
13
|
+
# Bolt 4.x wire doesn't include start/end_node_element_id —
|
|
14
|
+
# PackStream hydration passes nil for those slots. Fall back to
|
|
15
|
+
# the stringified node id so callers always see a value
|
|
16
|
+
# (matches what Java's driver does for 4.x). Path-bound
|
|
17
|
+
# relationships pass the actual node element_ids from #bind,
|
|
18
|
+
# which override the fallback.
|
|
19
|
+
def initialize(id, start_node_id, end_node_id, type, properties,
|
|
20
|
+
element_id = nil, start_node_element_id = nil,
|
|
21
|
+
end_node_element_id = nil)
|
|
22
|
+
super(id, properties, element_id)
|
|
23
|
+
@start_node_id = start_node_id
|
|
24
|
+
@end_node_id = end_node_id
|
|
25
|
+
@type = type
|
|
26
|
+
@start_node_element_id = start_node_element_id || start_node_id.to_s
|
|
27
|
+
@end_node_element_id = end_node_element_id || end_node_id.to_s
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# Shared base for the Bolt temporal value types: Duration,
|
|
7
|
+
# LocalDateTime, LocalTime, OffsetTime. Each subclass declares its
|
|
8
|
+
# `significant_fields` and gets `<=>`, `==`, `eql?`, `hash` derived
|
|
9
|
+
# from them automatically. Comparable mixed in here gives `<`, `>`,
|
|
10
|
+
# `between?`, `clamp` etc. for free.
|
|
11
|
+
class TemporalValue
|
|
12
|
+
include Comparable
|
|
13
|
+
|
|
14
|
+
NANOS_PER_SECOND = 1_000_000_000
|
|
15
|
+
NANOS_PER_MINUTE = 60 * NANOS_PER_SECOND
|
|
16
|
+
NANOS_PER_HOUR = 60 * NANOS_PER_MINUTE
|
|
17
|
+
NANOS_PER_DAY = 24 * NANOS_PER_HOUR
|
|
18
|
+
|
|
19
|
+
def self.significant_fields
|
|
20
|
+
raise NotImplementedError, "#{self} must define .significant_fields"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def significant
|
|
24
|
+
self.class.significant_fields.map { send(it) }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def <=>(other)
|
|
28
|
+
return nil unless other.is_a?(self.class)
|
|
29
|
+
|
|
30
|
+
significant <=> other.significant
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def ==(other)
|
|
34
|
+
other.is_a?(self.class) && significant == other.significant
|
|
35
|
+
end
|
|
36
|
+
alias eql? ==
|
|
37
|
+
|
|
38
|
+
def hash
|
|
39
|
+
significant.hash
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# Represents an unbound relationship (used in paths before binding to
|
|
7
|
+
# nodes). An Entity with a type but no start/end nodes yet.
|
|
8
|
+
class UnboundRelationship < Entity
|
|
9
|
+
attr_reader :type
|
|
10
|
+
|
|
11
|
+
def initialize(id, type, properties, element_id = nil)
|
|
12
|
+
super(id, properties, element_id)
|
|
13
|
+
@type = type
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Bind this relationship to specific start and end nodes
|
|
17
|
+
def bind(start_node_id, end_node_id, start_node_element_id = nil, end_node_element_id = nil)
|
|
18
|
+
Relationship.new(@id, start_node_id, end_node_id, @type, @properties,
|
|
19
|
+
@element_id, start_node_element_id, end_node_element_id)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# A ZonedDateTime the driver received with a zone id its runtime's time
|
|
7
|
+
# zone database can't resolve (e.g. the server sent "Europe/Neo4j").
|
|
8
|
+
#
|
|
9
|
+
# Hydration can't build a real Time, but raising mid-record on the reader
|
|
10
|
+
# thread would break the connection and strand the whole result — so the
|
|
11
|
+
# failure is deferred into this placeholder. Any consumer that tries to
|
|
12
|
+
# interpret the value raises (naming the zone), matching the Java driver,
|
|
13
|
+
# while the record and connection stay intact so an open transaction can
|
|
14
|
+
# still roll back cleanly.
|
|
15
|
+
class UnresolvableZonedDateTime
|
|
16
|
+
attr_reader :zone_name
|
|
17
|
+
|
|
18
|
+
def initialize(zone_name)
|
|
19
|
+
@zone_name = zone_name
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# The driver error this value stands in for. Raised by any consumer
|
|
23
|
+
# that tries to use it (the testkit backend on serialize; a public-API
|
|
24
|
+
# caller via #value).
|
|
25
|
+
def error
|
|
26
|
+
Exceptions::ClientException.new(
|
|
27
|
+
"The server returned a ZonedDateTime with a zone id (#{@zone_name.inspect}) " \
|
|
28
|
+
"that this runtime's time zone database does not recognise"
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def value
|
|
33
|
+
raise error
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# A value whose Bolt struct type is newer than this driver understands
|
|
7
|
+
# (Bolt 6.0+ can push forward-compat markers, struct signature 0x3F). The
|
|
8
|
+
# driver can't materialise the real value, but it must not crash — it
|
|
9
|
+
# surfaces the type's name, the protocol version that introduced it, and
|
|
10
|
+
# an optional server message so callers can react. Mirrors the Java
|
|
11
|
+
# driver's UnsupportedType.
|
|
12
|
+
class UnsupportedType
|
|
13
|
+
attr_reader :name, :min_protocol_version, :message
|
|
14
|
+
|
|
15
|
+
# `major`/`minor` are the wire ints (e.g. 6, 10); expose them joined as
|
|
16
|
+
# "major.minor" the way testkit / the Java driver report it.
|
|
17
|
+
def initialize(name, major, minor, message = nil)
|
|
18
|
+
@name = name
|
|
19
|
+
@min_protocol_version = "#{major}.#{minor}"
|
|
20
|
+
@message = message
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
module Types
|
|
6
|
+
# A Neo4j UUID value (Bolt 6.1+). An opaque, immutable value type
|
|
7
|
+
# mirroring java.util.UUID (which JRuby uses natively) and Python's
|
|
8
|
+
# uuid.UUID — construct via `from_string`, read the canonical
|
|
9
|
+
# hyphenated form via `to_s`. `new` is private so flavor-agnostic
|
|
10
|
+
# code goes through `from_string`, the one constructor that also
|
|
11
|
+
# exists on java.util.UUID.
|
|
12
|
+
class UUID
|
|
13
|
+
def self.from_string(value) = new(value)
|
|
14
|
+
private_class_method :new
|
|
15
|
+
|
|
16
|
+
def initialize(value)
|
|
17
|
+
@value = value.to_s
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_s = @value
|
|
21
|
+
|
|
22
|
+
def ==(other) = other.is_a?(UUID) && other.to_s == @value
|
|
23
|
+
alias eql? ==
|
|
24
|
+
|
|
25
|
+
def hash = @value.hash
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/neo4j/driver.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'connection_pool'
|
|
4
|
+
require 'neo4j-ruby-driver_loader'
|
|
5
|
+
require 'openssl'
|
|
6
|
+
require 'socket'
|
|
7
|
+
require 'stringio'
|
|
8
|
+
require 'tzinfo'
|
|
9
|
+
|
|
10
|
+
module Neo4j
|
|
11
|
+
module Driver
|
|
12
|
+
Loader.load(:mri)
|
|
13
|
+
AuthTokenManager = Internal::InternalAuthTokenManager
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,32 +1,46 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'active_support/concern'
|
|
4
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
|
5
|
-
require 'active_support/isolated_execution_state' if Gem::Requirement.create('>= 7').satisfied_by?(Gem.loaded_specs["activesupport"].version) # TODO: this should not be necessary https://github.com/rails/rails/issues/43851
|
|
6
|
-
require 'active_support/deprecator' if Gem::Requirement.create('>= 7.1').satisfied_by?(Gem.loaded_specs["activesupport"].version)
|
|
7
|
-
require 'active_support/deprecation'
|
|
8
|
-
require 'active_support/core_ext/numeric/time'
|
|
9
|
-
require 'active_support/duration'
|
|
10
|
-
require 'active_support/time'
|
|
11
3
|
require 'date'
|
|
4
|
+
require 'forwardable'
|
|
5
|
+
require 'time'
|
|
12
6
|
require 'uri'
|
|
13
7
|
require 'zeitwerk'
|
|
14
8
|
|
|
15
9
|
module Neo4j
|
|
16
10
|
module Driver
|
|
17
11
|
class Loader
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
12
|
+
class << self
|
|
13
|
+
# `__dir__` resolves to:
|
|
14
|
+
# dev: lib/shared → shared_root = lib/shared
|
|
15
|
+
# installed gem: lib → shared_root = lib (the impl dir is
|
|
16
|
+
# merged in by the staged build, so
|
|
17
|
+
# impl_root below is missing and the
|
|
18
|
+
# conditional push is skipped)
|
|
19
|
+
def load(impl)
|
|
20
|
+
@impl = impl
|
|
21
|
+
shared_root = File.expand_path(__dir__)
|
|
22
|
+
impl_root = File.expand_path("../#{impl}", shared_root)
|
|
23
|
+
|
|
24
|
+
loader = Zeitwerk::Loader.new
|
|
25
|
+
loader.tag = 'neo4j-ruby-driver'
|
|
26
|
+
loader.inflector = Zeitwerk::GemInflector.new(File.expand_path('neo4j/driver', __dir__))
|
|
27
|
+
loader.inflector.inflect('packstream' => 'PackStream', 'uuid' => 'UUID')
|
|
28
|
+
loader.push_dir(shared_root)
|
|
29
|
+
loader.push_dir(impl_root) if File.directory?(impl_root)
|
|
30
|
+
yield loader if block_given?
|
|
31
|
+
# ignore the Bundler.require-friendly entry files (neo4j-ruby-driver.rb, neo4j-ruby-driver_loader.rb,
|
|
32
|
+
# neo4j_ruby_driver.rb) since Zeitwerk would otherwise try to
|
|
33
|
+
# autoload them as constants with the wrong names.
|
|
34
|
+
loader.ignore(File.expand_path(__FILE__))
|
|
35
|
+
loader.ignore(File.expand_path('neo4j-ruby-driver.rb', __dir__))
|
|
36
|
+
loader.ignore(File.expand_path('neo4j_ruby_driver.rb', __dir__))
|
|
37
|
+
loader.setup
|
|
38
|
+
loader.eager_load
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def jruby? = @impl == :jruby
|
|
42
|
+
|
|
43
|
+
def mri? = @impl == :mri
|
|
30
44
|
end
|
|
31
45
|
end
|
|
32
46
|
end
|