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 47 def begin_transaction(conn, opts=OPTS) 48 if supports_savepoints? 49 th = _trans(conn) 50 if sps = th[:savepoint_objs] 51 sps << log_connection_yield('Transaction.savepoint', conn){conn.set_savepoint} 52 else 53 log_connection_yield('Transaction.begin', conn){conn.setAutoCommit(false)} 54 th[:savepoint_objs] = [] 55 set_transaction_isolation(conn, opts) 56 end 57 else 58 log_connection_yield('Transaction.begin', conn){conn.setAutoCommit(false)} 59 set_transaction_isolation(conn, opts) 60 end 61 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 64 def commit_transaction(conn, opts=OPTS) 65 if supports_savepoints? 66 sps = _trans(conn)[:savepoint_objs] 67 if sps.empty? 68 log_connection_yield('Transaction.commit', conn){conn.commit} 69 elsif supports_releasing_savepoints? 70 log_connection_yield('Transaction.release_savepoint', conn){supports_releasing_savepoints? ? conn.release_savepoint(sps.last) : sps.last} 71 end 72 else 73 log_connection_yield('Transaction.commit', conn){conn.commit} 74 end 75 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 78 def remove_transaction(conn, committed) 79 if jdbc_level = _trans(conn)[:original_jdbc_isolation_level] 80 conn.setTransactionIsolation(jdbc_level) 81 end 82 if supports_savepoints? 83 sps = _trans(conn)[:savepoint_objs] 84 conn.setAutoCommit(true) if sps.empty? 85 sps.pop 86 else 87 conn.setAutoCommit(true) 88 end 89 ensure 90 super 91 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 94 def rollback_transaction(conn, opts=OPTS) 95 if supports_savepoints? 96 sps = _trans(conn)[:savepoint_objs] 97 if sps.empty? 98 log_connection_yield('Transaction.rollback', conn){conn.rollback} 99 else 100 log_connection_yield('Transaction.rollback_savepoint', conn){conn.rollback(sps.last)} 101 end 102 else 103 log_connection_yield('Transaction.rollback', conn){conn.rollback} 104 end 105 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