@@ -1601,7 +1601,7 @@ class TransactionTest < ActiveRecord::TestCase
16011601 def test_releasing_named_savepoints_coerced
16021602 Topic . transaction do
16031603 Topic . connection . materialize_transactions
1604-
1604+
16051605 Topic . connection . create_savepoint ( "another" )
16061606 Topic . connection . release_savepoint ( "another" )
16071607 # We do not have a notion of releasing, so this does nothing vs raise an error.
@@ -1647,6 +1647,44 @@ def test_nested_transactions_after_disable_lazy_transactions_coerced
16471647 assert_match expected , actual
16481648 end
16491649 end
1650+
1651+ # SQL Server does not have query for release_savepoint.
1652+ coerce_tests! :test_nested_transactions_skip_excess_savepoints
1653+ def test_nested_transactions_skip_excess_savepoints_coerced
1654+ capture_sql do
1655+ # RealTransaction (begin..commit)
1656+ Topic . transaction ( requires_new : true ) do
1657+ # ResetParentTransaction (no queries)
1658+ Topic . transaction ( requires_new : true ) do
1659+ Topic . delete_all
1660+ # SavepointTransaction (savepoint..release)
1661+ Topic . transaction ( requires_new : true ) do
1662+ # ResetParentTransaction (no queries)
1663+ Topic . transaction ( requires_new : true ) do
1664+ Topic . delete_all
1665+ end
1666+ end
1667+ end
1668+ Topic . delete_all
1669+ end
1670+ end
1671+
1672+ actual_queries = ActiveRecord ::SQLCounter . log_all
1673+
1674+ expected_queries = [
1675+ /BEGIN/i ,
1676+ /DELETE/i ,
1677+ /^SAVE TRANSACTION/i ,
1678+ /DELETE/i ,
1679+ /DELETE/i ,
1680+ /COMMIT/i ,
1681+ ]
1682+
1683+ assert_equal expected_queries . size , actual_queries . size
1684+ expected_queries . zip ( actual_queries ) do |expected , actual |
1685+ assert_match expected , actual
1686+ end
1687+ end
16501688end
16511689
16521690require "models/tag"
0 commit comments