Skip to content

Commit 18c01f7

Browse files
authored
Savepoint queries should be internally executed so that they don't clear the query cache (#1107)
1 parent ca76dc0 commit 18c01f7

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,6 @@ def exec_rollback_db_transaction
100100
execute "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION", "TRANSACTION"
101101
end
102102

103-
include Savepoints
104-
105-
def create_savepoint(name = current_savepoint_name)
106-
execute "SAVE TRANSACTION #{name}", "TRANSACTION"
107-
end
108-
109-
def exec_rollback_to_savepoint(name = current_savepoint_name)
110-
execute "ROLLBACK TRANSACTION #{name}", "TRANSACTION"
111-
end
112-
113-
def release_savepoint(name = current_savepoint_name)
114-
end
115-
116103
def case_sensitive_comparison(attribute, value)
117104
column = column_for_attribute(attribute)
118105

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# frozen_string_literal: true
2+
3+
module ActiveRecord
4+
module ConnectionAdapters
5+
module SQLServer
6+
module Savepoints
7+
def current_savepoint_name
8+
current_transaction.savepoint_name
9+
end
10+
11+
def create_savepoint(name = current_savepoint_name)
12+
internal_execute("SAVE TRANSACTION #{name}", "TRANSACTION")
13+
end
14+
15+
def exec_rollback_to_savepoint(name = current_savepoint_name)
16+
internal_execute("ROLLBACK TRANSACTION #{name}", "TRANSACTION")
17+
end
18+
19+
def release_savepoint(_name)
20+
end
21+
end
22+
end
23+
end
24+
end

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
require "active_record/connection_adapters/sqlserver/database_limits"
1818
require "active_record/connection_adapters/sqlserver/database_statements"
1919
require "active_record/connection_adapters/sqlserver/database_tasks"
20+
require "active_record/connection_adapters/sqlserver/savepoints"
2021
require "active_record/connection_adapters/sqlserver/transaction"
2122
require "active_record/connection_adapters/sqlserver/errors"
2223
require "active_record/connection_adapters/sqlserver/schema_creation"
@@ -40,7 +41,8 @@ class SQLServerAdapter < AbstractAdapter
4041
SQLServer::Showplan,
4142
SQLServer::SchemaStatements,
4243
SQLServer::DatabaseLimits,
43-
SQLServer::DatabaseTasks
44+
SQLServer::DatabaseTasks,
45+
SQLServer::Savepoints
4446

4547
ADAPTER_NAME = "SQLServer".freeze
4648

0 commit comments

Comments
 (0)