Skip to content

Commit 046c181

Browse files
committed
Remove our log_info_schema_queries config since we are not hooking properly into AR's 'SCHEMA' names.
1 parent 179ba2c commit 046c181

File tree

7 files changed

+37
-57
lines changed

7 files changed

+37
-57
lines changed

CHANGELOG

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
* 3.2.0 *
33

4+
* Remove our log_info_schema_queries config since we are not hooking properly into AR's 'SCHEMA' names.
5+
46
* Properly use 'SCHEMA' name arguement in DB statements to comply with ActiveRecord::ExplainSubscriber::IGNORED_PAYLOADS.
57

68
* Make use of the new ConnectionAdapters::SchemaCache for our needs.

README.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,6 @@ ActiveRecord::Base.table_name_prefix = 'dbo.'
139139
```
140140

141141

142-
#### Schema Information Logging
143-
144-
By default all queries to the INFORMATION_SCHEMA table is silenced. If you think logging these queries are useful, you can enable it by adding this like to a initializer file.
145-
146-
```ruby
147-
ActiveRecord::ConnectionAdapters::SQLServerAdapter.log_info_schema_queries = true
148-
```
149-
150-
151142
#### Auto Connecting
152143

153144
By default the adapter will auto connect to lost DB connections. For every query it will retry at intervals of 2, 4, 8, 16 and 32 seconds. During each retry it will callback out to ActiveRecord::Base.did_retry_sqlserver_connection(connection,count). When all retries fail, it will callback to ActiveRecord::Base.did_lose_sqlserver_connection(connection). Both implementations of these methods are to write to the rails logger, however, they make great override points for notifications like Hoptoad. If you want to disable automatic reconnections use the following in an initializer.

lib/active_record/connection_adapters/sqlserver/database_statements.rb

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def exec_update(sql, name, binds)
4040
end
4141

4242
def outside_transaction?
43-
info_schema_query { select_value('SELECT @@TRANCOUNT', 'SCHEMA') == 0 }
43+
select_value('SELECT @@TRANCOUNT', 'SCHEMA') == 0
4444
end
4545

4646
def supports_statement_cache?
@@ -131,46 +131,42 @@ def use_database(database=nil)
131131

132132
def user_options
133133
return {} if sqlserver_azure?
134-
info_schema_query do
135-
select_rows("dbcc useroptions").inject(HashWithIndifferentAccess.new) do |values,row|
136-
set_option = row[0].gsub(/\s+/,'_')
137-
user_value = row[1]
138-
values[set_option] = user_value
139-
values
140-
end
134+
select_rows("dbcc useroptions",'SCHEMA').inject(HashWithIndifferentAccess.new) do |values,row|
135+
set_option = row[0].gsub(/\s+/,'_')
136+
user_value = row[1]
137+
values[set_option] = user_value
138+
values
141139
end
142140
end
143141

144142
def user_options_dateformat
145143
if sqlserver_azure?
146-
info_schema_query { select_value 'SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID', 'SCHEMA' }
144+
select_value 'SELECT [dateformat] FROM [sys].[syslanguages] WHERE [langid] = @@LANGID', 'SCHEMA'
147145
else
148146
user_options['dateformat']
149147
end
150148
end
151149

152150
def user_options_isolation_level
153151
if sqlserver_azure?
154-
info_schema_query do
155-
sql = %|SELECT CASE [transaction_isolation_level]
156-
WHEN 0 THEN NULL
157-
WHEN 1 THEN 'READ UNCOMITTED'
158-
WHEN 2 THEN 'READ COMITTED'
159-
WHEN 3 THEN 'REPEATABLE'
160-
WHEN 4 THEN 'SERIALIZABLE'
161-
WHEN 5 THEN 'SNAPSHOT' END AS [isolation_level]
162-
FROM [sys].[dm_exec_sessions]
163-
WHERE [session_id] = @@SPID|.squish
164-
select_value(sql)
165-
end
152+
sql = %|SELECT CASE [transaction_isolation_level]
153+
WHEN 0 THEN NULL
154+
WHEN 1 THEN 'READ UNCOMITTED'
155+
WHEN 2 THEN 'READ COMITTED'
156+
WHEN 3 THEN 'REPEATABLE'
157+
WHEN 4 THEN 'SERIALIZABLE'
158+
WHEN 5 THEN 'SNAPSHOT' END AS [isolation_level]
159+
FROM [sys].[dm_exec_sessions]
160+
WHERE [session_id] = @@SPID|.squish
161+
select_value sql, 'SCHEMA'
166162
else
167163
user_options['isolation_level']
168164
end
169165
end
170166

171167
def user_options_language
172168
if sqlserver_azure?
173-
info_schema_query { select_value 'SELECT @@LANGUAGE AS [language]', 'SCHEMA' }
169+
select_value 'SELECT @@LANGUAGE AS [language]', 'SCHEMA'
174170
else
175171
user_options['language']
176172
end

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ def native_database_types
88
end
99

1010
def tables(table_type = 'BASE TABLE')
11-
info_schema_query do
12-
select_values "SELECT #{lowercase_schema_reflection_sql('TABLE_NAME')} FROM INFORMATION_SCHEMA.TABLES #{"WHERE TABLE_TYPE = '#{table_type}'" if table_type} ORDER BY TABLE_NAME"
13-
end
11+
select_values "SELECT #{lowercase_schema_reflection_sql('TABLE_NAME')} FROM INFORMATION_SCHEMA.TABLES #{"WHERE TABLE_TYPE = '#{table_type}'" if table_type} ORDER BY TABLE_NAME", 'SCHEMA'
1412
end
1513

1614
def table_exists?(table_name)
@@ -196,7 +194,7 @@ def column_definitions(table_name)
196194
}.gsub(/[ \t\r\n]+/,' ')
197195
binds = [['table_name', table_name]]
198196
binds << ['table_schema',table_schema] unless table_schema.blank?
199-
results = info_schema_query { do_exec_query(sql, 'SCHEMA', binds) }
197+
results = do_exec_query(sql, 'SCHEMA', binds)
200198
results.collect do |ci|
201199
ci = ci.symbolize_keys
202200
ci[:type] = case ci[:type]
@@ -215,7 +213,7 @@ def column_definitions(table_name)
215213
real_table_name = table_name_or_views_table_name(table_name)
216214
real_column_name = views_real_column_name(table_name,ci[:name])
217215
col_default_sql = "SELECT c.COLUMN_DEFAULT FROM #{db_name_with_period}INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = '#{real_table_name}' AND c.COLUMN_NAME = '#{real_column_name}'"
218-
ci[:default_value] = info_schema_query { select_value col_default_sql, 'SCHEMA' }
216+
ci[:default_value] = select_value col_default_sql, 'SCHEMA'
219217
end
220218
ci[:default_value] = case ci[:default_value]
221219
when nil, '(null)', '(NULL)'
@@ -235,7 +233,7 @@ def column_definitions(table_name)
235233
end
236234

237235
def remove_check_constraints(table_name, column_name)
238-
constraints = info_schema_query { select_values "SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_NAME = '#{quote_string(table_name)}' and COLUMN_NAME = '#{quote_string(column_name)}'", 'SCHEMA' }
236+
constraints = select_values "SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_NAME = '#{quote_string(table_name)}' and COLUMN_NAME = '#{quote_string(column_name)}'", 'SCHEMA'
239237
constraints.each do |constraint|
240238
do_execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(constraint)}"
241239
end
@@ -258,10 +256,6 @@ def remove_indexes(table_name, column_name)
258256

259257
# === SQLServer Specific (Misc Helpers) ========================= #
260258

261-
def info_schema_query
262-
log_info_schema_queries ? yield : ActiveRecord::Base.silence{ yield }
263-
end
264-
265259
def get_table_name(sql)
266260
if sql =~ /^\s*(INSERT|EXEC sp_executesql N'INSERT)\s+INTO\s+([^\(\s]+)\s*|^\s*update\s+([^\(\s]+)\s*/i
267261
$2 || $3
@@ -296,17 +290,15 @@ def view_table_name(table_name)
296290

297291
def view_information(table_name)
298292
table_name = Utils.unqualify_table_name(table_name)
299-
view_info = info_schema_query { select_one "SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '#{table_name}'", 'SCHEMA' }
293+
view_info = select_one "SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '#{table_name}'", 'SCHEMA'
300294
if view_info
301295
view_info = view_info.with_indifferent_access
302296
if view_info[:VIEW_DEFINITION].blank? || view_info[:VIEW_DEFINITION].length == 4000
303-
view_info[:VIEW_DEFINITION] = info_schema_query do
304-
begin
305-
select_values("EXEC sp_helptext #{quote_table_name(table_name)}", 'SCHEMA').join
306-
rescue
307-
warn "No view definition found, possible permissions problem.\nPlease run GRANT VIEW DEFINITION TO your_user;"
308-
nil
309-
end
297+
view_info[:VIEW_DEFINITION] = begin
298+
select_values("EXEC sp_helptext #{quote_table_name(table_name)}", 'SCHEMA').join
299+
rescue
300+
warn "No view definition found, possible permissions problem.\nPlease run GRANT VIEW DEFINITION TO your_user;"
301+
nil
310302
end
311303
end
312304
end

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ class SQLServerAdapter < AbstractAdapter
181181
attr_reader :database_version, :database_year, :spid, :product_level, :product_version, :edition
182182

183183
cattr_accessor :native_text_database_type, :native_binary_database_type, :native_string_database_type,
184-
:log_info_schema_queries, :enable_default_unicode_types, :auto_connect, :retry_deadlock_victim,
184+
:enable_default_unicode_types, :auto_connect, :retry_deadlock_victim,
185185
:cs_equality_operator, :lowercase_schema_reflection, :auto_connect_duration
186186

187187
self.enable_default_unicode_types = true
@@ -195,7 +195,7 @@ def initialize(connection, logger, pool, config)
195195
# Our Responsibility
196196
@connection_options = config
197197
connect
198-
@database_version = info_schema_query { select_value 'SELECT @@version', 'SCHEMA' }
198+
@database_version = select_value 'SELECT @@version', 'SCHEMA'
199199
@database_year = begin
200200
if @database_version =~ /Microsoft SQL Azure/i
201201
@sqlserver_azure = true
@@ -207,9 +207,9 @@ def initialize(connection, logger, pool, config)
207207
rescue
208208
0
209209
end
210-
@product_level = info_schema_query { select_value "SELECT CAST(SERVERPROPERTY('productlevel') AS VARCHAR(128))", 'SCHEMA' }
211-
@product_version = info_schema_query { select_value "SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR(128))", 'SCHEMA' }
212-
@edition = info_schema_query { select_value "SELECT CAST(SERVERPROPERTY('edition') AS VARCHAR(128))", 'SCHEMA' }
210+
@product_level = select_value "SELECT CAST(SERVERPROPERTY('productlevel') AS VARCHAR(128))", 'SCHEMA'
211+
@product_version = select_value "SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR(128))", 'SCHEMA'
212+
@edition = select_value "SELECT CAST(SERVERPROPERTY('edition') AS VARCHAR(128))", 'SCHEMA'
213213
initialize_dateformatter
214214
use_database
215215
unless SUPPORTED_VERSIONS.include?(@database_year)

test/cases/adapter_test_sqlserver.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,12 +400,12 @@ def setup
400400
context "finding out what user_options are available" do
401401

402402
should "run the database consistency checker useroptions command" do
403-
@connection.expects(:select_rows).with(regexp_matches(/^dbcc\s+useroptions$/i)).returns []
403+
@connection.expects(:select_rows).with(regexp_matches(/^dbcc\s+useroptions$/i), 'SCHEMA').returns []
404404
@connection.user_options
405405
end
406406

407407
should "return a underscored key hash with indifferent access of the results" do
408-
@connection.expects(:select_rows).with(regexp_matches(/^dbcc\s+useroptions$/i)).returns [['some', 'thing'], ['isolation level', 'read uncommitted']]
408+
@connection.expects(:select_rows).with(regexp_matches(/^dbcc\s+useroptions$/i), 'SCHEMA').returns [['some', 'thing'], ['isolation level', 'read uncommitted']]
409409
uo = @connection.user_options
410410
assert_equal 2, uo.keys.size
411411
assert_equal 'thing', uo['some']

test/cases/sqlserver_helper.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
ActiveRecord::Migration.verbose = false
2727
ActiveRecord::Base.logger = Logger.new(File.expand_path(File.join(SQLSERVER_TEST_ROOT,'debug.log')))
2828
ActiveRecord::Base.logger.level = 0
29-
ActiveRecord::ConnectionAdapters::SQLServerAdapter.log_info_schema_queries = false
3029

3130
# Defining our classes in one place as well as soem core tests that need coercing date/time types.
3231

0 commit comments

Comments
 (0)