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
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Neo4j
|
|
4
|
+
module Driver
|
|
5
|
+
# Represents the result of running a Cypher statement.
|
|
6
|
+
#
|
|
7
|
+
# Records arrive through a Bolt::RecordBuffer that the connection's dedicated
|
|
8
|
+
# reader fills (via the StreamHandler the RUN's PULL registered). The cursor
|
|
9
|
+
# shifts from that buffer and, as it drains past the low watermark, issues the
|
|
10
|
+
# next PULL — so the reader keeps a batch or two ahead (watermark prefetch).
|
|
11
|
+
# The terminal SUCCESS's metadata becomes the Summary; a stream FAILURE is
|
|
12
|
+
# re-raised (classified) on the next read.
|
|
13
|
+
class Result
|
|
14
|
+
include Enumerable
|
|
15
|
+
|
|
16
|
+
def initialize(connection, keys = [], buffer:, handler:, query_text: nil, parameters: {},
|
|
17
|
+
run_metadata: {}, fetch_size: 1000, qid: nil, terminated_error: nil,
|
|
18
|
+
on_summary: nil, on_release: nil)
|
|
19
|
+
@connection = connection
|
|
20
|
+
@keys = keys
|
|
21
|
+
@buffer = buffer # Bolt::RecordBuffer, filled by the reader
|
|
22
|
+
@handler = handler # the StreamHandler registered for this result's PULLs
|
|
23
|
+
@query_text = query_text
|
|
24
|
+
@parameters = parameters
|
|
25
|
+
@run_metadata = run_metadata
|
|
26
|
+
@fetch_size = fetch_size
|
|
27
|
+
# Bolt query id (explicit-tx RUN reply). A PULL/DISCARD targets the *last*
|
|
28
|
+
# opened query when qid is omitted, so we only send it once this result is
|
|
29
|
+
# no longer the transaction's current one — see #demote! and #request_more.
|
|
30
|
+
@qid = qid
|
|
31
|
+
@demoted = false
|
|
32
|
+
# Callable returning the error that terminated the owning transaction
|
|
33
|
+
# (a failure in a *sibling* result or a tx method), or nil. Once set,
|
|
34
|
+
# this result must raise it on access rather than pull — a terminated tx
|
|
35
|
+
# leaves the connection FAILED, so more wire traffic is invalid. nil for
|
|
36
|
+
# auto-commit results (no enclosing transaction).
|
|
37
|
+
@terminated_error = terminated_error
|
|
38
|
+
@failure = nil # this result's own classified stream failure, if any
|
|
39
|
+
@on_summary = on_summary # called with the built Summary when the stream ends in SUCCESS
|
|
40
|
+
@on_release = on_release # called once when the connection is no longer needed
|
|
41
|
+
@records = [] # records pulled into memory by #buffer (not by iteration)
|
|
42
|
+
@had_record = false # any RECORD arrived on this stream — drives the GQL outcome status
|
|
43
|
+
@summary = nil
|
|
44
|
+
@consumed = false # stream fully drained (terminal seen)
|
|
45
|
+
@discarded = false # records explicitly released; further access raises
|
|
46
|
+
@failed = false # stream ended with a server FAILURE; connection needs RESET
|
|
47
|
+
@cancelling = false # consume(): abandon the rest — DISCARD the next batch instead of PULL
|
|
48
|
+
@list_mode = false # to_a/list: pull all remaining in one PULL {n: -1}, ignoring fetch_size
|
|
49
|
+
@peeked_record = nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
attr_reader :connection, :keys
|
|
53
|
+
|
|
54
|
+
def has_next?
|
|
55
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
56
|
+
return true if @records.any?
|
|
57
|
+
return true if @peeked_record
|
|
58
|
+
return false if @consumed
|
|
59
|
+
|
|
60
|
+
@peeked_record = next_record
|
|
61
|
+
!@peeked_record.nil?
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def next
|
|
65
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
66
|
+
return @records.shift if @records.any?
|
|
67
|
+
raise Exceptions::NoSuchRecordException, 'No more records' unless has_next?
|
|
68
|
+
|
|
69
|
+
record = @peeked_record
|
|
70
|
+
@peeked_record = nil
|
|
71
|
+
record
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def peek
|
|
75
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
76
|
+
return @records.first if @records.any?
|
|
77
|
+
raise Exceptions::NoSuchRecordException, 'No more records' unless has_next?
|
|
78
|
+
|
|
79
|
+
@peeked_record
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def single
|
|
83
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
84
|
+
|
|
85
|
+
unless has_next?
|
|
86
|
+
raise Exceptions::NoSuchRecordException,
|
|
87
|
+
'Cannot retrieve a single record, because this result is empty.'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
record = self.next
|
|
91
|
+
|
|
92
|
+
if has_next?
|
|
93
|
+
raise Exceptions::NoSuchRecordException,
|
|
94
|
+
'Expected a result with a single record, but this result contains at least one more. ' \
|
|
95
|
+
'Ensure your query returns only one record.'
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
record
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def each(&)
|
|
102
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
103
|
+
return to_enum(:each) unless block_given?
|
|
104
|
+
|
|
105
|
+
yield(self.next) while has_next?
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def to_a
|
|
109
|
+
raise Exceptions::ResultConsumedException if @discarded
|
|
110
|
+
|
|
111
|
+
# Result.list ignores the configured fetch size: pull everything still on
|
|
112
|
+
# the server in a single PULL {n: -1} instead of paging (Optimization:
|
|
113
|
+
# ResultListFetchAll). The next watermark pull picks this up.
|
|
114
|
+
@list_mode = true
|
|
115
|
+
records = []
|
|
116
|
+
records << self.next while has_next?
|
|
117
|
+
records
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def consume
|
|
121
|
+
return @summary if @discarded
|
|
122
|
+
|
|
123
|
+
@peeked_record = nil
|
|
124
|
+
# Abandon the rest: the watermark path (request_more) now DISCARDs instead
|
|
125
|
+
# of PULLing the next batch, so the server stops shipping records and the
|
|
126
|
+
# stream ends on its terminating SUCCESS. We must still drain the records
|
|
127
|
+
# already in flight (dropping them) so the connection is left clean.
|
|
128
|
+
@cancelling = true
|
|
129
|
+
begin
|
|
130
|
+
nil while next_record unless @consumed
|
|
131
|
+
ensure
|
|
132
|
+
@records.clear
|
|
133
|
+
@discarded = true
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
@summary
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Pull all remaining records into memory so the underlying connection can be
|
|
140
|
+
# reused for another query. Unlike #consume, records stay accessible.
|
|
141
|
+
def buffer
|
|
142
|
+
return if @consumed
|
|
143
|
+
|
|
144
|
+
if @peeked_record
|
|
145
|
+
@records << @peeked_record
|
|
146
|
+
@peeked_record = nil
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
while (record = next_record)
|
|
150
|
+
@records << record
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def none?
|
|
155
|
+
!has_next?
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def failed?
|
|
159
|
+
@failed
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# This result's own classified stream failure (nil unless it failed). The
|
|
163
|
+
# transaction reads it to surface the terminating error to sibling results.
|
|
164
|
+
attr_reader :failure
|
|
165
|
+
|
|
166
|
+
# A later RUN in the same transaction made another query current; from now
|
|
167
|
+
# on this result's PULL/DISCARD must name its qid explicitly (see
|
|
168
|
+
# #request_more). Called by Transaction#run when it opens the next result.
|
|
169
|
+
def demote! = @demoted = true
|
|
170
|
+
|
|
171
|
+
# Mark this result as released without touching the wire — the connection is
|
|
172
|
+
# being returned/reset by the caller. Callers drain (consume/buffer) or RESET
|
|
173
|
+
# before this, so the stream is already finished; further access raises.
|
|
174
|
+
def discard!
|
|
175
|
+
@peeked_record = nil
|
|
176
|
+
@discarded = true
|
|
177
|
+
release_connection
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
private
|
|
181
|
+
|
|
182
|
+
# Next record from the buffer (reader-filled), or nil at end of stream.
|
|
183
|
+
# Records arrive incrementally, so take one the moment it's buffered and
|
|
184
|
+
# prefetch (request_more) once we drain past the low watermark. When the
|
|
185
|
+
# buffer is momentarily empty but the stream is still open, issue any due
|
|
186
|
+
# PULL then #await — a single wait that wakes on the next record (mid-batch)
|
|
187
|
+
# or the batch promise resolving (batch-end, so we PULL the next batch
|
|
188
|
+
# rather than block forever). A stream FAILURE surfaces as a raise from
|
|
189
|
+
# try_shift — classified (routing's ServiceUnavailable→SessionExpired etc.)
|
|
190
|
+
# and marked @failed so the caller RESETs.
|
|
191
|
+
def next_record
|
|
192
|
+
raise_if_terminated
|
|
193
|
+
loop do
|
|
194
|
+
record = take_from_buffer
|
|
195
|
+
case record
|
|
196
|
+
when :empty
|
|
197
|
+
request_more
|
|
198
|
+
@buffer.await
|
|
199
|
+
when :ended
|
|
200
|
+
finalize_stream
|
|
201
|
+
return nil
|
|
202
|
+
else
|
|
203
|
+
request_more
|
|
204
|
+
return build_record(record)
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# try_shift, but turn a stream failure into the classified exception and
|
|
210
|
+
# finalize a summary from run metadata so a later #consume still returns it
|
|
211
|
+
# (matches main's on_failure, which finalized on the failure).
|
|
212
|
+
def take_from_buffer
|
|
213
|
+
@buffer.try_shift
|
|
214
|
+
rescue StandardError => e
|
|
215
|
+
@failed = true
|
|
216
|
+
@consumed = true
|
|
217
|
+
finalize({})
|
|
218
|
+
raise(@failure = @connection.classify_failure(e))
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# A sibling result or a tx method failed, terminating the transaction: the
|
|
222
|
+
# connection is now FAILED, so raise that error instead of pulling. Our own
|
|
223
|
+
# failure (@failed) surfaces through take_from_buffer, not here.
|
|
224
|
+
def raise_if_terminated
|
|
225
|
+
return if @failed
|
|
226
|
+
|
|
227
|
+
error = @terminated_error&.call
|
|
228
|
+
raise error if error
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Watermark autopull: once the buffer has drained to/below the low watermark
|
|
232
|
+
# and the server has confirmed (via a completed batch) it has more, request
|
|
233
|
+
# the next batch — PULL normally, or DISCARD once consume() has cancelled
|
|
234
|
+
# (abandon the rest). Driving DISCARD through the same gate is what avoids a
|
|
235
|
+
# premature DISCARD before the in-flight PULL's reply has even arrived.
|
|
236
|
+
def request_more
|
|
237
|
+
return unless @buffer.pull_ready?
|
|
238
|
+
|
|
239
|
+
@buffer.note_pull_issued
|
|
240
|
+
# Omit qid while this is the transaction's current query (the server
|
|
241
|
+
# defaults to the last opened one); include it explicitly once a later
|
|
242
|
+
# RUN has demoted us, so the pull still targets *this* stream. Auto-commit
|
|
243
|
+
# and single-result transactions never demote, so they keep sending the
|
|
244
|
+
# bare {n} the stub scripts expect (qid is optional there).
|
|
245
|
+
extra = @demoted && @qid ? { qid: @qid } : {}
|
|
246
|
+
# list mode pulls all remaining records at once (n: -1); otherwise page by fetch_size.
|
|
247
|
+
n = @list_mode ? -1 : @fetch_size
|
|
248
|
+
message = @cancelling ? @connection.protocol.build_discard(extra) : @connection.protocol.build_pull(extra.merge(n:))
|
|
249
|
+
@connection.send_message(message, @handler)
|
|
250
|
+
@connection.flush
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# End of stream: a terminating SUCCESS carries summary metadata (build the
|
|
254
|
+
# Summary, harvest the bookmark); a bare finish (IGNORED) carries none.
|
|
255
|
+
def finalize_stream
|
|
256
|
+
if (metadata = @buffer.summary)
|
|
257
|
+
finalize(metadata)
|
|
258
|
+
@on_summary&.call(@summary)
|
|
259
|
+
else
|
|
260
|
+
@consumed = true
|
|
261
|
+
end
|
|
262
|
+
release_connection
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def build_record(msg)
|
|
266
|
+
@had_record = true
|
|
267
|
+
Record.new(@keys, msg.fields)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def finalize(metadata)
|
|
271
|
+
@summary = Summary::ResultSummary.new(@run_metadata.merge(metadata), @query_text, @parameters, @connection,
|
|
272
|
+
had_record: @had_record)
|
|
273
|
+
@consumed = true
|
|
274
|
+
end
|
|
275
|
+
|
|
276
|
+
def release_connection
|
|
277
|
+
@on_release&.call
|
|
278
|
+
@on_release = nil # idempotent
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|