Skip to content

Commit 0a71327

Browse files
committed
Connection tests!
1 parent 5a5dd78 commit 0a71327

File tree

6 files changed

+120
-115
lines changed

6 files changed

+120
-115
lines changed

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ module ActiveRecord
22
module ConnectionAdapters
33
module SQLServer
44
module DatabaseStatements
5+
56
def select_rows(sql, name = nil, binds = [])
67
do_exec_query sql, name, binds, fetch: :rows
78
end
@@ -56,17 +57,19 @@ def rollback_db_transaction
5657
do_execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
5758
end
5859

60+
include Savepoints
61+
5962
def create_savepoint(name = current_savepoint_name)
6063
disable_auto_reconnect { do_execute "SAVE TRANSACTION #{name}" }
6164
end
6265

63-
def release_savepoint(name = current_savepoint_name)
64-
end
65-
6666
def rollback_to_savepoint(name = current_savepoint_name)
6767
disable_auto_reconnect { do_execute "ROLLBACK TRANSACTION #{name}" }
6868
end
6969

70+
def release_savepoint(name = current_savepoint_name)
71+
end
72+
7073
def add_limit_offset!(_sql, _options)
7174
raise NotImplementedError, 'This has been moved to the SQLServerCompiler in Arel.'
7275
end
@@ -116,8 +119,8 @@ def execute_procedure(proc_name, *variables)
116119

117120
def use_database(database = nil)
118121
return if sqlserver_azure?
119-
name = SQLServer::Utils.extract_identifiers(database || @connection_options[:database])
120-
do_execute "USE #{name}" unless database.blank?
122+
name = SQLServer::Utils.extract_identifiers(database || @connection_options[:database]).quoted
123+
do_execute "USE #{name}" unless name.blank?
121124
end
122125

123126
def user_options
@@ -135,7 +138,6 @@ def user_options
135138
end
136139
end
137140

138-
# TODO: Rails 4 now supports isolation levels
139141
def user_options_dateformat
140142
if sqlserver_azure?
141143
select_value 'SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID', 'SCHEMA'
@@ -245,6 +247,7 @@ def charset
245247
select_value "SELECT SERVERPROPERTY('SqlCharSetName')"
246248
end
247249

250+
248251
protected
249252

250253
def select(sql, name = nil, binds = [])
@@ -281,7 +284,6 @@ def do_exec_query(sql, name, binds, options = {})
281284
if options[:fetch] != :rows
282285
options[:ar_result] = true
283286
end
284-
285287
explaining = name == 'EXPLAIN'
286288
names_and_types = []
287289
params = []
@@ -406,6 +408,7 @@ def finish_statement_handle(handle)
406408
end
407409
handle
408410
end
411+
409412
end
410413
end
411414
end

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class SQLServerAdapter < AbstractAdapter
3737

3838
attr_reader :spid
3939

40-
cattr_accessor :auto_connect, :cs_equality_operator,
41-
:lowercase_schema_reflection, :auto_connect_duration, :showplan_option
40+
cattr_accessor :auto_connect, :auto_connect_duration, instance_accessor: false
41+
cattr_accessor :cs_equality_operator, :lowercase_schema_reflection, :showplan_option
4242

4343
def initialize(connection, logger, pool, config)
4444
super(connection, logger, pool)
@@ -81,10 +81,6 @@ def supports_bulk_alter?
8181
false
8282
end
8383

84-
def supports_savepoints?
85-
true
86-
end
87-
8884
def supports_index_sort_order?
8985
true
9086
end
@@ -107,6 +103,7 @@ def disable_referential_integrity
107103
# === Abstract Adapter (Connection Management) ================== #
108104

109105
def active?
106+
return false unless @connection
110107
case @connection_options[:mode]
111108
when :dblib
112109
return @connection.active?
@@ -118,21 +115,21 @@ def active?
118115
end
119116

120117
def reconnect!
121-
reset_transaction
118+
super
122119
disconnect!
123120
connect
124-
active?
125121
end
126122

127123
def disconnect!
128-
reset_transaction
124+
super
129125
@spid = nil
130126
case @connection_options[:mode]
131127
when :dblib
132128
@connection.close rescue nil
133129
when :odbc
134130
@connection.disconnect rescue nil
135131
end
132+
@connection = nil
136133
end
137134

138135
def reset!
@@ -173,11 +170,11 @@ def inspect
173170
end
174171

175172
def auto_connect
176-
@@auto_connect.is_a?(FalseClass) ? false : true
173+
self.class.auto_connect.is_a?(FalseClass) ? false : true
177174
end
178175

179176
def auto_connect_duration
180-
@@auto_connect_duration ||= 10
177+
self.class.auto_connect_duration ||= 10
181178
end
182179

183180
def cs_equality_operator
@@ -380,9 +377,10 @@ def auto_reconnected?
380377
@auto_connecting = true
381378
count = 0
382379
while count <= (auto_connect_duration / 2)
383-
result = reconnect!
380+
disconnect!
381+
reconnect!
384382
ActiveRecord::Base.did_retry_sqlserver_connection(self, count)
385-
return true if result
383+
return true if active?
386384
sleep 2**count
387385
count += 1
388386
end

lib/active_record/sqlserver_base.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module ActiveRecord
22
class Base
3+
34
def self.sqlserver_connection(config) #:nodoc:
45
config = config.symbolize_keys
56
config.reverse_merge! mode: :dblib
@@ -24,5 +25,6 @@ def self.did_retry_sqlserver_connection(connection, count)
2425
def self.did_lose_sqlserver_connection(connection)
2526
logger.info "CONNECTION LOST: #{connection.class.name}"
2627
end
28+
2729
end
2830
end

test/cases/adapter_test_sqlserver.rb

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@ class AdapterTestSQLServer < ActiveRecord::TestCase
99

1010
fixtures :tasks
1111

12-
let(:connection) { ActiveRecord::Base.connection }
13-
1412
let(:basic_insert_sql) { "INSERT INTO [funny_jokes] ([name]) VALUES('Knock knock')" }
1513
let(:basic_update_sql) { "UPDATE [customers] SET [address_street] = NULL WHERE [id] = 2" }
1614
let(:basic_select_sql) { "SELECT * FROM [customers] WHERE ([customers].[id] = 1)" }
1715

18-
1916
it 'has basic and non-senstive information in the adpaters inspect method' do
2017
string = connection.inspect
2118
string.must_match %r{ActiveRecord::ConnectionAdapters::SQLServerAdapter}

0 commit comments

Comments
 (0)