module Sequel::JDBC::Transactions
Constants
- JDBC_TRANSACTION_ISOLATION_LEVELS
Public Instance Methods
freeze()
click to toggle source
Calls superclass method
# File lib/sequel/adapters/jdbc/transactions.rb 6 def freeze 7 supports_savepoints? 8 super 9 end
supports_savepoints?()
click to toggle source
Check the JDBC
DatabaseMetaData for savepoint support
# File lib/sequel/adapters/jdbc/transactions.rb 12 def supports_savepoints? 13 return @supports_savepoints if defined?(@supports_savepoints) 14 @supports_savepoints = synchronize{|c| c.getMetaData.supports_savepoints} 15 end
supports_transaction_isolation_levels?()
click to toggle source
Check the JDBC
DatabaseMetaData for support for serializable isolation, since that’s the value most people will use.
# File lib/sequel/adapters/jdbc/transactions.rb 19 def supports_transaction_isolation_levels? 20 synchronize{|conn| conn.getMetaData.supportsTransactionIsolationLevel(JavaSQL::Connection::TRANSACTION_SERIALIZABLE)} 21 end
Private Instance Methods
begin_transaction(conn, opts=OPTS)
click to toggle source
Use JDBC
connection’s setAutoCommit to false to start transactions
# File lib/sequel/adapters/jdbc/transactions.rb 52 def begin_transaction(conn, opts=OPTS) 53 if in_savepoint?(conn) 54 _trans(conn)[:savepoints][-1][:obj] = log_connection_yield('Transaction.savepoint', conn){conn.set_savepoint} 55 else 56 log_connection_yield('Transaction.begin', conn){conn.setAutoCommit(false)} 57 set_transaction_isolation(conn, opts) 58 end 59 end
commit_transaction(conn, opts=OPTS)
click to toggle source
Use JDBC
connection’s commit method to commit transactions
# File lib/sequel/adapters/jdbc/transactions.rb 62 def commit_transaction(conn, opts=OPTS) 63 if in_savepoint?(conn) 64 if supports_releasing_savepoints? 65 log_connection_yield('Transaction.release_savepoint', conn){conn.release_savepoint(savepoint_obj(conn))} 66 end 67 else 68 log_connection_yield('Transaction.commit', conn){conn.commit} 69 end 70 end
remove_transaction(conn, committed)
click to toggle source
Use JDBC
connection’s setAutoCommit to true to enable non-transactional behavior
Calls superclass method
# File lib/sequel/adapters/jdbc/transactions.rb 73 def remove_transaction(conn, committed) 74 if jdbc_level = _trans(conn)[:original_jdbc_isolation_level] 75 log_connection_yield("Transaction.restore_isolation_level", conn){conn.setTransactionIsolation(jdbc_level)} 76 end 77 unless in_savepoint?(conn) 78 conn.setAutoCommit(true) 79 end 80 ensure 81 super 82 end
rollback_transaction(conn, opts=OPTS)
click to toggle source
Use JDBC
connection’s rollback method to rollback transactions
# File lib/sequel/adapters/jdbc/transactions.rb 85 def rollback_transaction(conn, opts=OPTS) 86 if in_savepoint?(conn) 87 log_connection_yield('Transaction.rollback_savepoint', conn){conn.rollback(savepoint_obj(conn))} 88 else 89 log_connection_yield('Transaction.rollback', conn){conn.rollback} 90 end 91 end
savepoint_obj(conn)
click to toggle source
JDBC
savepoint object for the current savepoint for the connection.
# File lib/sequel/adapters/jdbc/transactions.rb 47 def savepoint_obj(conn) 48 _trans(conn)[:savepoints][-1][:obj] 49 end
set_transaction_isolation(conn, opts)
click to toggle source
Set the transaction isolation level on the given connection using the JDBC
API.
# File lib/sequel/adapters/jdbc/transactions.rb 32 def set_transaction_isolation(conn, opts) 33 level = opts.fetch(:isolation, transaction_isolation_level) 34 if (jdbc_level = JDBC_TRANSACTION_ISOLATION_LEVELS[level]) && 35 conn.getMetaData.supportsTransactionIsolationLevel(jdbc_level) 36 _trans(conn)[:original_jdbc_isolation_level] = conn.getTransactionIsolation 37 log_connection_yield("Transaction.isolation_level = #{level}", conn){conn.setTransactionIsolation(jdbc_level)} 38 end 39 end
supports_releasing_savepoints?()
click to toggle source
Most JDBC
drivers that support savepoints support releasing them.
# File lib/sequel/adapters/jdbc/transactions.rb 42 def supports_releasing_savepoints? 43 true 44 end