Class: ActiveRecord::ConnectionAdapters::OpenTransaction
- Inherits:
-
Transaction
- Object
- Transaction
- ActiveRecord::ConnectionAdapters::OpenTransaction
show all
- Defined in:
- lib/active_record/connection_adapters/abstract/transaction.rb
Overview
Instance Attribute Summary collapse
Attributes inherited from Transaction
#connection
Instance Method Summary
collapse
Methods inherited from Transaction
#state
Constructor Details
#initialize(connection, parent, options = {}) ⇒ OpenTransaction
Returns a new instance of OpenTransaction.
76
77
78
79
80
81
82
83
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 76
def initialize(connection, parent, options = {})
super connection
@parent = parent
@records = []
@finishing = false
@joinable = options.fetch(:joinable, true)
end
|
Instance Attribute Details
#joinable=(value) ⇒ Object
Sets the attribute joinable
74
75
76
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 74
def joinable=(value)
@joinable = value
end
|
#parent ⇒ Object
Returns the value of attribute parent.
73
74
75
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 73
def parent
@parent
end
|
#records ⇒ Object
Returns the value of attribute records.
73
74
75
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 73
def records
@records
end
|
Instance Method Details
#add_record(record) ⇒ Object
124
125
126
127
128
129
130
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 124
def add_record(record)
if record.has_transactional_callbacks?
records << record
else
record.set_transaction_state(@state)
end
end
|
#begin(options = {}) ⇒ Object
104
105
106
107
108
109
110
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 104
def begin(options = {})
if finishing?
parent.begin
else
SavepointTransaction.new(connection, self, options)
end
end
|
#closed? ⇒ Boolean
154
155
156
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 154
def closed?
false
end
|
#commit ⇒ Object
118
119
120
121
122
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 118
def commit
@finishing = true
perform_commit
parent
end
|
#commit_records ⇒ Object
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 143
def commit_records
@state.set_state(:committed)
records.uniq.each do |record|
begin
record.committed!
rescue => e
record.logger.error(e) if record.respond_to?(:logger) && record.logger
end
end
end
|
#finishing? ⇒ Boolean
This state is necessary so that we correctly handle stuff that might happen in a commit/rollback. But it’s kinda distasteful. Maybe we can find a better way to structure it in the future.
88
89
90
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 88
def finishing?
@finishing
end
|
#joinable? ⇒ Boolean
92
93
94
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 92
def joinable?
@joinable && !finishing?
end
|
#number ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 96
def number
if finishing?
parent.number
else
parent.number + 1
end
end
|
#open? ⇒ Boolean
158
159
160
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 158
def open?
true
end
|
#rollback ⇒ Object
112
113
114
115
116
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 112
def rollback
@finishing = true
perform_rollback
parent
end
|
#rollback_records ⇒ Object
132
133
134
135
136
137
138
139
140
141
|
# File 'lib/active_record/connection_adapters/abstract/transaction.rb', line 132
def rollback_records
@state.set_state(:rolledback)
records.uniq.each do |record|
begin
record.rolledback!(parent.closed?)
rescue => e
record.logger.error(e) if record.respond_to?(:logger) && record.logger
end
end
end
|