Skip to content

Commit 47b71d8

Browse files
Session execute_read/write implementation (#251)
* Session execute_read/write implementation * Added deprecation warning * Session specs refactoring * Used ActiveSupport for deprecation warning * Session specs refactoring * Replaced read/write_transaction with execute_read/write in specs * Moved deprecation warning implementation to /lib * Silence deprecation warning in specs, execute_write/read refactoring * Added DelegatingTransactionContext for execute_read/write * Implementation of execute_write/read for MRI --------- Co-authored-by: Heinrich Klobuczek <[email protected]>
1 parent 4624051 commit 47b71d8

22 files changed

+364
-187
lines changed

jruby/neo4j/driver.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module Types
5151
Java::OrgNeo4jDriverInternal::InternalResult.prepend Neo4j::Driver::Ext::InternalResult
5252
Java::OrgNeo4jDriverInternal::InternalSession.prepend Neo4j::Driver::Ext::InternalSession
5353
Java::OrgNeo4jDriverInternal::InternalTransaction.prepend Neo4j::Driver::Ext::InternalTransaction
54+
Java::OrgNeo4jDriverInternal::DelegatingTransactionContext.prepend Neo4j::Driver::Ext::DelegatingTransactionContext
5455
Java::OrgNeo4jDriverInternalAsync::InternalAsyncSession.prepend Neo4j::Driver::Ext::Internal::Async::InternalAsyncSession
5556
Java::OrgNeo4jDriverInternalShadedBoltConnectionRoutedImplCluster::RoutingTableRegistryImpl.include Neo4j::Driver::Ext::Internal::Cluster::RoutingTableRegistryImpl
5657
# Java::OrgNeo4jDriverInternalCursor::DisposableAsyncResultCursor.prepend Neo4j::Driver::Ext::Internal::Cursor::DisposableAsyncResultCursor
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Neo4j
4+
module Driver
5+
module Ext
6+
module DelegatingTransactionContext
7+
include ExceptionCheckable
8+
include RunOverride
9+
10+
def run(statement, **parameters)
11+
check { super(to_statement(statement, parameters)) }
12+
end
13+
end
14+
end
15+
end
16+
end

jruby/neo4j/driver/ext/internal_session.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,14 @@ module InternalSession
1414
# work around jruby issue https://github.com/jruby/jruby/issues/5603
1515
Struct.new('Wrapper', :object)
1616

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
17+
# implementation of read_transaction, write_transaction, execute_read, execute_write
18+
%i[read write].each do |mode|
19+
["#{mode}_transaction", "execute_#{mode}"].each do |method_name|
20+
define_method(method_name) do |**config, &block|
21+
Driver::Internal::Deprecator.log_warning(method_name, "execute_#{mode}".to_sym, '6.0') if method_name.include? 'transaction'
22+
check do
23+
super(->(tx) { Struct::Wrapper.new(reverse_check { block.call(tx) }) }, to_java_config(Neo4j::Driver::TransactionConfig, **config)).object
24+
end
2125
end
2226
end
2327
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module Neo4j
2+
module Driver
3+
module Internal
4+
module Deprecator
5+
def self.deprecator
6+
@deprecator ||= ActiveSupport::Deprecation.new('6.0', 'neo4j-ruby-driver')
7+
end
8+
9+
def self.log_warning(old_method, new_method, version)
10+
deprecator.deprecation_warning(old_method, new_method)
11+
end
12+
end
13+
end
14+
end
15+
end

ruby/neo4j/driver/internal/internal_session.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,20 @@ def begin_transaction(**config)
3838
end
3939

4040
def read_transaction(**config, &block)
41+
Deprecator.log_warning(:read_transaction, :execute_read, '6.0')
4142
transaction(AccessMode::READ, **config, &block)
4243
end
4344

4445
def write_transaction(**config, &block)
46+
Deprecator.log_warning(:write_transaction, :execute_write, '6.0')
47+
transaction(AccessMode::WRITE, **config, &block)
48+
end
49+
50+
def execute_read(**config, &block)
51+
transaction(AccessMode::READ, **config, &block)
52+
end
53+
54+
def execute_write(**config, &block)
4555
transaction(AccessMode::WRITE, **config, &block)
4656
end
4757

spec/integration/bookmark_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
RSpec.describe 'Bookmark' do
44
def create_node_in_tx(session)
5-
session.write_transaction { |tx| tx.run('CREATE (a:Person)') }
5+
session.execute_write { |tx| tx.run('CREATE (a:Person)') }
66
end
77

88
def preamble(session)
@@ -93,7 +93,7 @@ def expect_single_value(bookmark, value)
9393
it 'fails on invalid bookmark using tx func' do
9494
bookmark = Neo4j::Driver::Bookmark.from('hi, this is an invalid bookmark')
9595
driver.session(bookmarks: bookmark) do |session|
96-
expect { session.read_transaction { |tx| tx.run('RETURN 1').single } }
96+
expect { session.execute_read { |tx| tx.run('RETURN 1').single } }
9797
.to raise_error Neo4j::Driver::Exceptions::ClientException do |e|
9898
expect(e.code).to eq 'Neo.ClientError.Transaction.InvalidBookmark'
9999
end

spec/integration/causal_clustering_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def new_session(mode)
163163
create_driver(leader.routing_uri, routing_table_purge_delay: 3.minutes) do |driver|
164164
database = 'neo4j'
165165
driver.session(database: database) do |session|
166-
session.read_transaction { |tx| tx.run('RETURN 1').consume }
166+
session.execute_read { |tx| tx.run('RETURN 1').consume }
167167
end
168168
expect(driver.session_factory.connection_provider.routing_table_registry
169169
.routing_table_handler(database).routing_table.routers.to_a.size).to eq 3
@@ -181,7 +181,7 @@ def new_session(mode)
181181
leader.bolt_address,
182182
] }) do |driver|
183183
driver.session do |session|
184-
expect(session.read_transaction { |tx| tx.run('RETURN 1').single.first }).to eq 1
184+
expect(session.execute_read { |tx| tx.run('RETURN 1').single.first }).to eq 1
185185
end
186186
end
187187
end

0 commit comments

Comments
 (0)