Module: Neo4j::Transaction

Extended by:
Transaction
Included in:
Transaction
Defined in:
lib/neo4j/transaction.rb

Defined Under Namespace

Modules: Instance

Instance Method Summary collapse

Instance Method Details

#currentNeo4j::Transaction

Returns:



92
93
94
# File 'lib/neo4j/transaction.rb', line 92

def current
  Thread.current[:neo4j_curr_tx]
end

#new(current = Session.current!) ⇒ Neo4j::Transaction::Instance



69
70
71
# File 'lib/neo4j/transaction.rb', line 69

def new(current = Session.current!)
  current.begin_tx
end


97
98
99
100
101
102
# File 'lib/neo4j/transaction.rb', line 97

def print_exception_cause(exception)
  return if !exception.respond_to?(:cause) || !exception.cause.respond_to?(:print_stack_trace)

  puts "Java Exception in a transaction, cause: #{exception.cause}"
  exception.cause.print_stack_trace
end

#register(tx) ⇒ Object



110
111
112
113
114
# File 'lib/neo4j/transaction.rb', line 110

def register(tx)
  # we don't support running more then one transaction per thread
  fail 'Already running a transaction' if current
  Thread.current[:neo4j_curr_tx] = tx
end

#run(run_in_tx = true) ⇒ Object

Runs the given block in a new transaction. @@yield [Neo4j::Transaction::Instance]

Parameters:

  • run_in_tx (Boolean) (defaults to: true)

    if true a new transaction will not be created, instead if will simply yield to the given block



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/neo4j/transaction.rb', line 76

def run(run_in_tx = true)
  fail ArgumentError, 'Expected a block to run in Transaction.run' unless block_given?

  return yield(nil) unless run_in_tx

  tx = Neo4j::Transaction.new
  yield tx
rescue Exception => e # rubocop:disable Lint/RescueException
  print_exception_cause(e)
  tx.mark_failed unless tx.nil?
  raise
ensure
  tx.close unless tx.nil?
end

#unregister(tx) ⇒ Object



105
106
107
# File 'lib/neo4j/transaction.rb', line 105

def unregister(tx)
  Thread.current[:neo4j_curr_tx] = nil if tx == Thread.current[:neo4j_curr_tx]
end

#unregister_currentObject



117
118
119
# File 'lib/neo4j/transaction.rb', line 117

def unregister_current
  Thread.current[:neo4j_curr_tx] = nil
end