Skip to content

Commit a07552c

Browse files
Rails 6: Support lazy transactions (#780)
* Support lazy transactions * aaded materialize_transactions guard to connection uses. for implementing supports for lazy transactions rails/rails#32647 (comment) * Moved materialize_transactions calls * Fix typo * Materialize transaction in do_execute Co-authored-by: Yehuda Goldberg <[email protected]>
1 parent 967c93e commit a07552c

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def execute(sql, name = nil)
1414
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
1515
end
1616

17+
materialize_transactions
18+
1719
if id_insert_table_name = query_requires_identity_insert?(sql)
1820
with_identity_insert_enabled(id_insert_table_name) { do_execute(sql, name) }
1921
else
@@ -26,6 +28,8 @@ def exec_query(sql, name = 'SQL', binds = [], prepare: false)
2628
raise ActiveRecord::ReadOnlyError, "Write query attempted while in readonly mode: #{sql}"
2729
end
2830

31+
materialize_transactions
32+
2933
sp_executesql(sql, name, binds, prepare: prepare)
3034
end
3135

@@ -136,6 +140,8 @@ def default_insert_value(column)
136140
# === SQLServer Specific ======================================== #
137141

138142
def execute_procedure(proc_name, *variables)
143+
materialize_transactions
144+
139145
vars = if variables.any? && variables.first.is_a?(Hash)
140146
variables.first.map { |k, v| "@#{k} = #{quote(v)}" }
141147
else
@@ -268,6 +274,8 @@ def set_identity_insert(table_name, enable = true)
268274
# === SQLServer Specific (Executing) ============================ #
269275

270276
def do_execute(sql, name = 'SQL')
277+
materialize_transactions
278+
271279
log(sql, name) { raw_connection_do(sql) }
272280
end
273281

lib/active_record/connection_adapters/sqlserver_adapter.rb

+4
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ def supports_savepoints?
145145
true
146146
end
147147

148+
def supports_lazy_transactions?
149+
true
150+
end
151+
148152
def supports_in_memory_oltp?
149153
@version_year >= 2014
150154
end

test/cases/migration_test_sqlserver.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class MigrationTestSQLServer < ActiveRecord::TestCase
4545
Person.reset_column_information
4646
end
4747

48-
it 'not drop the default contraint if just renaming' do
48+
it 'not drop the default constraint if just renaming' do
4949
find_default = lambda do
5050
connection.execute_procedure(:sp_helpconstraint, 'sst_string_defaults', 'nomsg').select do |row|
5151
row['constraint_type'] == "DEFAULT on column string_with_pretend_paren_three"

0 commit comments

Comments
 (0)