neo4j-ruby-driver 4.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/jruby/neo4j/driver/ext/async_converter.rb +55 -0
- data/jruby/neo4j/driver/ext/auth_tokens.rb +20 -0
- data/jruby/neo4j/driver/ext/bookmark.rb +15 -0
- data/jruby/neo4j/driver/ext/config_converter.rb +69 -0
- data/jruby/neo4j/driver/ext/exception_checkable.rb +34 -0
- data/jruby/neo4j/driver/ext/exception_mapper.rb +89 -0
- data/jruby/neo4j/driver/ext/graph_database.rb +29 -0
- data/jruby/neo4j/driver/ext/internal/async/internal_async_session.rb +23 -0
- data/jruby/neo4j/driver/ext/internal/cluster/routing_table_registry_impl.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/cursor/disposable_async_result_cursor.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/metrics/internal_connection_pool_metrics.rb +17 -0
- data/jruby/neo4j/driver/ext/internal/summary/internal_result_summary.rb +32 -0
- data/jruby/neo4j/driver/ext/internal_driver.rb +34 -0
- data/jruby/neo4j/driver/ext/internal_entity.rb +21 -0
- data/jruby/neo4j/driver/ext/internal_keys.rb +15 -0
- data/jruby/neo4j/driver/ext/internal_node.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_record.rb +29 -0
- data/jruby/neo4j/driver/ext/internal_relationship.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_result.rb +23 -0
- data/jruby/neo4j/driver/ext/internal_session.rb +40 -0
- data/jruby/neo4j/driver/ext/internal_transaction.rb +24 -0
- data/jruby/neo4j/driver/ext/logger.rb +60 -0
- data/jruby/neo4j/driver/ext/map_converter.rb +14 -0
- data/jruby/neo4j/driver/ext/neo_converter.rb +59 -0
- data/jruby/neo4j/driver/ext/query.rb +13 -0
- data/jruby/neo4j/driver/ext/ruby_converter.rb +57 -0
- data/jruby/neo4j/driver/ext/run_override.rb +22 -0
- data/jruby/neo4j/driver/ext/start_end_naming.rb +17 -0
- data/jruby/neo4j/driver.rb +54 -0
- data/lib/loader.rb +19 -0
- data/lib/neo4j/driver/auto_closable.rb +32 -0
- data/lib/neo4j/driver/exceptions/authentication_exception.rb +15 -0
- data/lib/neo4j/driver/exceptions/authorization_expired_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/certificate_exception.rb +10 -0
- data/lib/neo4j/driver/exceptions/client_exception.rb +18 -0
- data/lib/neo4j/driver/exceptions/connection_read_timeout_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/database_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/discovery_exception.rb +16 -0
- data/lib/neo4j/driver/exceptions/fatal_discovery_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/illegal_state_exception.rb +10 -0
- data/lib/neo4j/driver/exceptions/neo4j_exception.rb +22 -0
- data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +33 -0
- data/lib/neo4j/driver/exceptions/protocol_exception.rb +17 -0
- data/lib/neo4j/driver/exceptions/result_consumed_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/security_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/service_unavailable_exception.rb +12 -0
- data/lib/neo4j/driver/exceptions/session_expired_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/token_expired_exception.rb +15 -0
- data/lib/neo4j/driver/exceptions/transaction_nesting_exception.rb +11 -0
- data/lib/neo4j/driver/exceptions/transient_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/untrusted_server_exception.rb +11 -0
- data/lib/neo4j/driver/exceptions/value/lossy_coercion.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/not_multi_valued.rb +13 -0
- data/lib/neo4j/driver/exceptions/value/uncoercible.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/unsizable.rb +12 -0
- data/lib/neo4j/driver/exceptions/value/value_exception.rb +12 -0
- data/lib/neo4j/driver/internal/bolt_server_address.rb +97 -0
- data/lib/neo4j/driver/internal/duration_normalizer.rb +47 -0
- data/lib/neo4j/driver/internal/validator.rb +29 -0
- data/lib/neo4j/driver/summary/query_type.rb +12 -0
- data/lib/neo4j/driver/synchronizable.rb +23 -0
- data/lib/neo4j/driver/types/local_date_time.rb +20 -0
- data/lib/neo4j/driver/types/local_time.rb +19 -0
- data/lib/neo4j/driver/types/offset_time.rb +19 -0
- data/lib/neo4j/driver/types/point.rb +39 -0
- data/lib/neo4j/driver/types/time.rb +43 -0
- data/lib/neo4j/driver/version.rb +7 -0
- data/lib/neo4j_ruby_driver.rb +15 -0
- metadata +336 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalSession
|
7
|
+
extend AutoClosable
|
8
|
+
include ConfigConverter
|
9
|
+
include ExceptionCheckable
|
10
|
+
include RunOverride
|
11
|
+
|
12
|
+
auto_closable :begin_transaction
|
13
|
+
|
14
|
+
# work around jruby issue https://github.com/jruby/jruby/issues/5603
|
15
|
+
Struct.new('Wrapper', :object)
|
16
|
+
|
17
|
+
%i[read write].each do |prefix|
|
18
|
+
define_method("#{prefix}_transaction") do |**config, &block|
|
19
|
+
check do
|
20
|
+
super(->(tx) { Struct::Wrapper.new(reverse_check { block.call(tx) }) }, to_java_config(Neo4j::Driver::TransactionConfig, config)).object
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# end work around
|
26
|
+
|
27
|
+
def run(statement, parameters = {}, config = {})
|
28
|
+
check do
|
29
|
+
java_method(:run, [org.neo4j.driver.Query, org.neo4j.driver.TransactionConfig])
|
30
|
+
.call(to_statement(statement, parameters), to_java_config(Neo4j::Driver::TransactionConfig, config))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def begin_transaction(**config)
|
35
|
+
check { super(to_java_config(Neo4j::Driver::TransactionConfig, config)) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalTransaction
|
7
|
+
include ExceptionCheckable
|
8
|
+
include RunOverride
|
9
|
+
|
10
|
+
def run(statement, **parameters)
|
11
|
+
check { super(to_statement(statement, parameters)) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def commit
|
15
|
+
check { super }
|
16
|
+
end
|
17
|
+
|
18
|
+
def rollback
|
19
|
+
check { super }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
class Logger
|
7
|
+
include org.neo4j.driver.Logger
|
8
|
+
include org.neo4j.driver.Logging
|
9
|
+
|
10
|
+
delegate :debug?, to: :@active_support_logger
|
11
|
+
|
12
|
+
def initialize(active_support_logger)
|
13
|
+
@active_support_logger = active_support_logger
|
14
|
+
end
|
15
|
+
|
16
|
+
def getLog(_name)
|
17
|
+
self
|
18
|
+
end
|
19
|
+
alias get_log getLog
|
20
|
+
|
21
|
+
def error(*args)
|
22
|
+
add(::Logger::ERROR, format(*args))
|
23
|
+
end
|
24
|
+
|
25
|
+
def info(*args)
|
26
|
+
add(::Logger::INFO, format(*args))
|
27
|
+
end
|
28
|
+
|
29
|
+
def warn(*args)
|
30
|
+
add(::Logger::WARN, format(*args))
|
31
|
+
end
|
32
|
+
|
33
|
+
def debug(*args)
|
34
|
+
add(::Logger::DEBUG, format(*args))
|
35
|
+
end
|
36
|
+
|
37
|
+
alias trace debug
|
38
|
+
|
39
|
+
def trace_enabled?
|
40
|
+
debug?
|
41
|
+
end
|
42
|
+
|
43
|
+
def debug_enabled
|
44
|
+
debug?
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def add(level, *args)
|
50
|
+
@active_support_logger.add(level) { format(*args) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def format(*args)
|
54
|
+
args.unshift('%s%n%s') if args.last.is_a? java.lang.Throwable
|
55
|
+
java.lang.String.format(*args)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module MapConverter
|
7
|
+
def to_h
|
8
|
+
java_method(:asMap, [java.util.function.Function]).call(&:itself).to_hash
|
9
|
+
.transform_values!(&:as_ruby_object).symbolize_keys!
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module NeoConverter
|
7
|
+
private
|
8
|
+
|
9
|
+
def to_neo(object, skip_unknown: false)
|
10
|
+
case object
|
11
|
+
when Hash
|
12
|
+
object.map { |key, value| [key.to_s, to_neo(value)] }.to_h
|
13
|
+
when Types::Path
|
14
|
+
Exceptions::ClientException.unable_to_convert(object)
|
15
|
+
when Enumerable
|
16
|
+
object.map(&method(:to_neo))
|
17
|
+
when String
|
18
|
+
object.encoding == Encoding::BINARY ? object.to_java_bytes : object
|
19
|
+
when ActiveSupport::Duration
|
20
|
+
Java::OrgNeo4jDriverInternal::InternalIsoDuration.new(
|
21
|
+
*Driver::Internal::DurationNormalizer.normalize(object)
|
22
|
+
)
|
23
|
+
when Types::Point
|
24
|
+
Java::OrgNeo4jDriver::Values.point(object.srid, *object.coordinates)
|
25
|
+
when Types::OffsetTime
|
26
|
+
Java::JavaTime::OffsetTime.of(object.hour, object.min, object.sec,
|
27
|
+
object.nsec, Java::JavaTime::ZoneOffset.of_total_seconds(object.utc_offset))
|
28
|
+
when Types::LocalTime
|
29
|
+
Java::JavaTime::LocalTime.of(object.hour, object.min, object.sec, object.nsec)
|
30
|
+
when Types::LocalDateTime
|
31
|
+
Java::JavaTime::LocalDateTime.of(object.year, object.month, object.day, object.hour, object.min, object.sec,
|
32
|
+
object.nsec)
|
33
|
+
when ActiveSupport::TimeWithZone
|
34
|
+
to_zoned_date_time(object, object.time_zone.tzinfo.identifier)
|
35
|
+
when Time, DateTime
|
36
|
+
to_zoned_date_time(object, object.formatted_offset)
|
37
|
+
when Date
|
38
|
+
Java::JavaTime::LocalDate.of(object.year, object.month, object.day)
|
39
|
+
when Symbol
|
40
|
+
object.to_s
|
41
|
+
when nil, true, false, Integer, Float
|
42
|
+
object
|
43
|
+
else
|
44
|
+
if skip_unknown
|
45
|
+
object
|
46
|
+
else
|
47
|
+
raise Exceptions::ClientException.unable_to_convert(object)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_zoned_date_time(object, zone)
|
53
|
+
Java::JavaTime::ZonedDateTime.of(object.year, object.month, object.day, object.hour, object.min, object.sec,
|
54
|
+
object.nsec, Java::JavaTime::ZoneId.of(zone))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module RubyConverter
|
7
|
+
include MapConverter
|
8
|
+
|
9
|
+
def as_ruby_object
|
10
|
+
case type_constructor
|
11
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::LIST
|
12
|
+
values(&:itself).map(&:as_ruby_object)
|
13
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::MAP
|
14
|
+
to_h
|
15
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::DATE
|
16
|
+
date = as_local_date
|
17
|
+
Date.new(date.year, date.month_value, date.day_of_month)
|
18
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::DURATION
|
19
|
+
ActiveSupport::Duration.parse(as_iso_duration.to_s)
|
20
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::POINT
|
21
|
+
point = as_point
|
22
|
+
Types::Point.new(srid: point.srid, x: point.x, y: point.y, z: nullable(point.z))
|
23
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::BYTES
|
24
|
+
String.from_java_bytes(as_byte_array).force_encoding(Encoding::BINARY)
|
25
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::TIME
|
26
|
+
Types::OffsetTime.parse(as_offset_time.to_string)
|
27
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::LOCAL_TIME
|
28
|
+
Types::LocalTime.parse(as_local_time.to_string)
|
29
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::LOCAL_DATE_TIME
|
30
|
+
Types::LocalDateTime.parse(as_local_date_time.to_string)
|
31
|
+
when Java::OrgNeo4jDriverInternalTypes::TypeConstructor::DATE_TIME
|
32
|
+
to_time
|
33
|
+
else
|
34
|
+
as_object
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def to_time
|
41
|
+
time = as_zoned_date_time
|
42
|
+
zone_id = time.zone.id
|
43
|
+
if /^Z|[+\-][0-9]{2}:[0-9]{2}$/.match?(zone_id)
|
44
|
+
Time.parse(time.to_string)
|
45
|
+
else
|
46
|
+
instant = time.to_instant
|
47
|
+
Time.at(instant.epoch_second, instant.nano, :nsec).in_time_zone(TZInfo::Timezone.get(zone_id))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def nullable(double)
|
52
|
+
double unless double == java.lang.Double::NaN
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module RunOverride
|
7
|
+
include NeoConverter
|
8
|
+
|
9
|
+
def close
|
10
|
+
check { super }
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def to_statement(text, parameters)
|
16
|
+
Neo4j::Driver::Internal::Validator.require_hash_parameters!(parameters)
|
17
|
+
Neo4j::Driver::Query.new(text, to_neo(parameters || {}))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/keys'
|
4
|
+
require 'date'
|
5
|
+
require 'loader'
|
6
|
+
require 'neo4j-ruby-driver_jars'
|
7
|
+
|
8
|
+
Loader.load
|
9
|
+
|
10
|
+
module Neo4j
|
11
|
+
module Driver
|
12
|
+
include_package 'org.neo4j.driver'
|
13
|
+
|
14
|
+
Record = Java::OrgNeo4jDriverInternal::InternalRecord
|
15
|
+
Result = Java::OrgNeo4jDriverInternal::InternalResult
|
16
|
+
Transaction = Java::OrgNeo4jDriverInternal::InternalTransaction
|
17
|
+
|
18
|
+
module Net
|
19
|
+
include_package 'org.neo4j.driver.net'
|
20
|
+
end
|
21
|
+
|
22
|
+
module Summary
|
23
|
+
include_package 'org.neo4j.driver.summary'
|
24
|
+
end
|
25
|
+
|
26
|
+
module Types
|
27
|
+
Entity = Java::OrgNeo4jDriverInternal::InternalEntity
|
28
|
+
Node = Java::OrgNeo4jDriverInternal::InternalNode
|
29
|
+
Path = Java::OrgNeo4jDriverInternal::InternalPath
|
30
|
+
Relationship = Java::OrgNeo4jDriverInternal::InternalRelationship
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Java::OrgNeo4jDriver::AuthTokens.singleton_class.prepend Neo4j::Driver::Ext::AuthTokens
|
36
|
+
Java::OrgNeo4jDriver::Bookmark.singleton_class.prepend Neo4j::Driver::Ext::Bookmark::ClassMethods
|
37
|
+
Java::OrgNeo4jDriver::GraphDatabase.singleton_class.prepend Neo4j::Driver::Ext::GraphDatabase
|
38
|
+
Java::OrgNeo4jDriver::Query.prepend Neo4j::Driver::Ext::Query
|
39
|
+
Java::OrgNeo4jDriverInternal::InternalDriver.prepend Neo4j::Driver::Ext::InternalDriver
|
40
|
+
Java::OrgNeo4jDriverInternal::InternalEntity.include Neo4j::Driver::Ext::InternalEntity
|
41
|
+
Java::OrgNeo4jDriverInternal::InternalNode.prepend Neo4j::Driver::Ext::InternalNode
|
42
|
+
Java::OrgNeo4jDriverInternal::InternalPath.include Neo4j::Driver::Ext::StartEndNaming
|
43
|
+
Java::OrgNeo4jDriverInternal::InternalPath::SelfContainedSegment.include Neo4j::Driver::Ext::StartEndNaming
|
44
|
+
Java::OrgNeo4jDriverInternal::InternalRecord.prepend Neo4j::Driver::Ext::InternalRecord
|
45
|
+
Java::OrgNeo4jDriverInternal::InternalRelationship.prepend Neo4j::Driver::Ext::InternalRelationship
|
46
|
+
Java::OrgNeo4jDriverInternal::InternalResult.prepend Neo4j::Driver::Ext::InternalResult
|
47
|
+
Java::OrgNeo4jDriverInternal::InternalSession.prepend Neo4j::Driver::Ext::InternalSession
|
48
|
+
Java::OrgNeo4jDriverInternal::InternalTransaction.prepend Neo4j::Driver::Ext::InternalTransaction
|
49
|
+
Java::OrgNeo4jDriverInternalAsync::InternalAsyncSession.prepend Neo4j::Driver::Ext::Internal::Async::InternalAsyncSession
|
50
|
+
Java::OrgNeo4jDriverInternalCluster::RoutingTableRegistryImpl.include Neo4j::Driver::Ext::Internal::Cluster::RoutingTableRegistryImpl
|
51
|
+
Java::OrgNeo4jDriverInternalCursor::DisposableAsyncResultCursor.prepend Neo4j::Driver::Ext::Internal::Cursor::DisposableAsyncResultCursor
|
52
|
+
Java::OrgNeo4jDriverInternalMetrics::InternalConnectionPoolMetrics.include Neo4j::Driver::Ext::Internal::Metrics::InternalConnectionPoolMetrics
|
53
|
+
Java::OrgNeo4jDriverInternalSummary::InternalResultSummary.prepend Neo4j::Driver::Ext::Internal::Summary::InternalResultSummary
|
54
|
+
Java::OrgNeo4jDriverInternalValue::ValueAdapter.include Neo4j::Driver::Ext::RubyConverter
|
data/lib/loader.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'zeitwerk'
|
4
|
+
|
5
|
+
class Loader
|
6
|
+
def self.load
|
7
|
+
loader = Zeitwerk::Loader.new
|
8
|
+
loader.tag = 'neo4j-ruby-driver'
|
9
|
+
loader.push_dir(File.expand_path(__dir__))
|
10
|
+
loader.push_dir(File.dirname(File.dirname(caller_locations(1..1).first.path)))
|
11
|
+
yield loader if block_given?
|
12
|
+
loader.ignore(File.expand_path('neo4j-*-driver_jars.rb', __dir__))
|
13
|
+
loader.ignore(File.expand_path('neo4j_ruby_driver.rb', __dir__))
|
14
|
+
loader.ignore(File.expand_path('org', __dir__))
|
15
|
+
loader.inflector = Zeitwerk::GemInflector.new(File.expand_path('neo4j/driver', __dir__))
|
16
|
+
loader.setup
|
17
|
+
loader.eager_load
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module AutoClosable
|
6
|
+
def auto_closable(*methods)
|
7
|
+
prepend with_block_definer(methods)
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def with_block_definer(methods)
|
13
|
+
Module.new do
|
14
|
+
methods.each do |method|
|
15
|
+
define_method(method) do |*args, **kwargs, &block|
|
16
|
+
closable = super(*args, **kwargs)
|
17
|
+
if block
|
18
|
+
begin
|
19
|
+
block.arity.zero? ? closable.instance_eval(&block) : block.call(closable)
|
20
|
+
ensure
|
21
|
+
closable&.close
|
22
|
+
end
|
23
|
+
else
|
24
|
+
closable
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# Failed to authenticate the driver to the server due to bad credentials provided.
|
7
|
+
# When this error happens, the error could be recovered by closing the current driver and restart a new driver with
|
8
|
+
# the correct credentials.
|
9
|
+
|
10
|
+
# @since 1.1
|
11
|
+
class AuthenticationException < SecurityException
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# The authorization info maintained on the server has expired. The client should reconnect.
|
7
|
+
# <p>
|
8
|
+
# Error code: Neo.ClientError.Security.AuthorizationExpired
|
9
|
+
class AuthorizationExpiredException < SecurityException
|
10
|
+
DESCRIPTION = 'Authorization information kept on the server has expired, this connection is no longer valid.'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# A <em>ClientException</em> indicates that the client has carried out an operation incorrectly.
|
7
|
+
# The error code provided can be used to determine further detail for the problem.
|
8
|
+
# @since 1.0
|
9
|
+
class ClientException < Neo4jException
|
10
|
+
class << self
|
11
|
+
def unable_to_convert(object)
|
12
|
+
raise self, "Unable to convert #{object.class.name} to Neo4j Value."
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# Indicates that read timed out due to it taking longer than the server-supplied timeout value via the {@code connection.recv_timeout_seconds} configuration
|
7
|
+
# hint. The server might provide this value to clients to let them know when a given connection may be considered broken if client does not get any
|
8
|
+
# communication from the server within the specified timeout period. This results in the server being removed from the routing table.
|
9
|
+
class ConnectionReadTimeoutException < ServiceUnavailableException
|
10
|
+
INSTANCE = new('Connection read timed out due to it taking longer than the server-supplied timeout value via configuration hint.')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# A <em>DatabaseException</em> indicates that there is a problem within the underlying database.
|
7
|
+
# The error code provided can be used to determine further detail for the problem.
|
8
|
+
# @since 1.0
|
9
|
+
class DatabaseException < Neo4jException
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# An error has happened while getting routing table with a remote server.
|
7
|
+
# While this error is not fatal and we might be able to recover if we continue trying on another server.
|
8
|
+
# If we fail to get a valid routing table from all routing servers known to this driver,
|
9
|
+
# then we will end up with a fatal error {@link ServiceUnavailableException}.
|
10
|
+
|
11
|
+
# If you see this error in your logs, it is safe to ignore if your cluster is temporarily changing structure during that time.
|
12
|
+
class DiscoveryException < Neo4jException
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# This error indicate a fatal problem to obtain routing tables such as the routing table for a specified database does not exist.
|
7
|
+
# This exception should not be retried.
|
8
|
+
# @since 4.0
|
9
|
+
class FatalDiscoveryException < ClientException
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
class Neo4jException < RuntimeError
|
7
|
+
attr_reader :code, :suppressed
|
8
|
+
|
9
|
+
def initialize(*args)
|
10
|
+
@code = args.shift if args.count > 1
|
11
|
+
message = args.shift
|
12
|
+
@suppressed = args.shift
|
13
|
+
super(message)
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_suppressed(exception)
|
17
|
+
(@suppressed ||= []) << exception
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
class NoSuchRecordException < RuntimeError
|
7
|
+
EMPTY = 'Cannot retrieve a single record, because this result is empty.'
|
8
|
+
TOO_MANY = 'Expected a result with a single record, but this result ' \
|
9
|
+
'contains at least one more. Ensure your query returns only one record.'
|
10
|
+
NO_MORE = 'No more records'
|
11
|
+
NO_PEEK_PAST = 'Cannot peek past the last record'
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def empty
|
15
|
+
new(EMPTY)
|
16
|
+
end
|
17
|
+
|
18
|
+
def too_many
|
19
|
+
new(TOO_MANY)
|
20
|
+
end
|
21
|
+
|
22
|
+
def no_more
|
23
|
+
new(NO_MORE)
|
24
|
+
end
|
25
|
+
|
26
|
+
def no_peek_past
|
27
|
+
new(NO_PEEK_PAST)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# A signal that the contract for client-server communication has broken down.
|
7
|
+
# The user should contact support and cannot resolve this his or herself.
|
8
|
+
class ProtocolException < Neo4jException
|
9
|
+
CODE = "Protocol violation: "
|
10
|
+
|
11
|
+
def initialize(message, e)
|
12
|
+
super("#{CODE}message", e)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# A user is trying to access resources that are no longer valid due to
|
7
|
+
# the resources have already been consumed or
|
8
|
+
# the {@link QueryRunner} where the resources are created has already been closed.
|
9
|
+
class ResultConsumedException < ClientException
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# Failed to communicate with the server due to security errors.
|
7
|
+
# When this type of error happens, the security cause of the error should be fixed to ensure the safety of your data.
|
8
|
+
# Restart of server/driver/cluster might be required to recover from this error.
|
9
|
+
# @since 1.1
|
10
|
+
class SecurityException < ClientException
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Exceptions
|
6
|
+
# An <em>ServiceUnavailableException</em> indicates that the driver cannot communicate with the cluster.
|
7
|
+
# @since 1.1
|
8
|
+
class ServiceUnavailableException < Neo4jException
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|