Skip to content

Commit 0b638b7

Browse files
committed
Added savepoint name param to create_savepoint, release_savepoint and rollback_to_savepoint
1 parent f417421 commit 0b638b7

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ def rollback_db_transaction
5656
do_execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
5757
end
5858

59-
def create_savepoint
60-
disable_auto_reconnect { do_execute "SAVE TRANSACTION #{current_savepoint_name}" }
59+
def create_savepoint(name = current_savepoint_name)
60+
disable_auto_reconnect { do_execute "SAVE TRANSACTION #{name}" }
6161
end
6262

63-
def release_savepoint
63+
def release_savepoint(name = current_savepoint_name)
6464
end
6565

66-
def rollback_to_savepoint
67-
disable_auto_reconnect { do_execute "ROLLBACK TRANSACTION #{current_savepoint_name}" }
66+
def rollback_to_savepoint(name = current_savepoint_name)
67+
disable_auto_reconnect { do_execute "ROLLBACK TRANSACTION #{name}" }
6868
end
6969

7070
def add_limit_offset!(_sql, _options)

test/cases/transaction_test_sqlserver.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,19 @@ def assert_no_ships
4646

4747
end
4848

49+
class TransactionTest < ActiveRecord::TestCase
50+
include SqlserverCoercedTest
51+
52+
COERCED_TESTS = [:test_releasing_named_savepoints]
53+
54+
def test_coerced_releasing_named_savepoints
55+
Topic.transaction do
56+
Topic.connection.create_savepoint("another")
57+
Topic.connection.release_savepoint("another")
58+
59+
# The origin rails test tries to re-release the savepoint, but
60+
# since sqlserver doesn't have the concept of releasing, it doesn't
61+
# fail, so we just omit that part here
62+
end
63+
end
64+
end

0 commit comments

Comments
 (0)