Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter
Overview
Defined Under Namespace
Classes: BindSubstitution
Constant Summary
collapse
- VERSION =
File.read(File.expand_path("../../../../VERSION",__FILE__)).strip
- ADAPTER_NAME =
'SQLServer'.freeze
- DATABASE_VERSION_REGEXP =
/Microsoft SQL Server\s+"?(\d{4}|\w+)"?/
- SUPPORTED_VERSIONS =
[2005,2008,2010,2011,2012]
ActiveRecord::ConnectionAdapters::Sqlserver::Errors::LOST_CONNECTION_EXCEPTIONS, ActiveRecord::ConnectionAdapters::Sqlserver::Errors::LOST_CONNECTION_MESSAGES
ActiveRecord::ConnectionAdapters::Sqlserver::Showplan::OPTIONS, ActiveRecord::ConnectionAdapters::Sqlserver::Showplan::OPTION_ALL, ActiveRecord::ConnectionAdapters::Sqlserver::Showplan::OPTION_TEXT, ActiveRecord::ConnectionAdapters::Sqlserver::Showplan::OPTION_XML
ActiveRecord::ConnectionAdapters::Sqlserver::Quoting::QUOTED_STRING_PREFIX
Instance Attribute Summary collapse
Instance Method Summary
collapse
#lost_connection_exceptions, #lost_connection_messages
#column_name_length, #columns_per_multicolumn_index, #columns_per_table, #in_clause_length, #index_name_length, #indexes_per_table, #joins_per_query, #sql_query_length, #table_alias_length, #table_name_length
#change_column, #change_column_default, #change_column_null, #columns, #columns_for_distinct, #indexes, #native_database_types, #remove_column, #remove_index!, #rename_column, #rename_index, #rename_table, #table_exists?, #tables, #type_to_sql, #views
#explain
#activity_stats, #add_limit_offset!, #begin_db_transaction, #case_sensitive_modifier, #charset, #commit_db_transaction, #create_database, #create_savepoint, #current_database, #drop_database, #empty_insert_statement_value, #exec_delete, #exec_insert, #exec_query, #exec_update, #execute, #execute_procedure, #newid_function, #newsequentialid_function, #recreate_database, #recreate_database!, #release_savepoint, #rollback_db_transaction, #rollback_to_savepoint, #run_with_isolation_level, #select_rows, #supports_statement_cache?, #use_database, #user_options, #user_options_dateformat, #user_options_isolation_level, #user_options_language
#quote, #quote_column_name, #quote_string, #quote_table_name, #quoted_date, #quoted_datetime, #quoted_false, #quoted_full_iso8601, #quoted_string_prefix, #quoted_true, #substitute_at
Constructor Details
#initialize(connection, logger, pool, config) ⇒ SQLServerAdapter
Returns a new instance of SQLServerAdapter.
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 201
def initialize(connection, logger, pool, config)
super(connection, logger, pool)
@schema_cache = Sqlserver::SchemaCache.new self
@visitor = Arel::Visitors::SQLServer.new self
@config = config
@connection_options = config
connect
@database_version = select_value 'SELECT @@version', 'SCHEMA'
@database_year = begin
if @database_version =~ /Azure/i
@sqlserver_azure = true
@database_version.match(/\s-\s([0-9.]+)/)[1]
year = 2012
else
year = DATABASE_VERSION_REGEXP.match(@database_version)[1]
year == "Denali" ? 2011 : year.to_i
end
rescue
0
end
@product_level = select_value "SELECT CAST(SERVERPROPERTY('productlevel') AS VARCHAR(128))", 'SCHEMA'
@product_version = select_value "SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR(128))", 'SCHEMA'
@edition = select_value "SELECT CAST(SERVERPROPERTY('edition') AS VARCHAR(128))", 'SCHEMA'
initialize_dateformatter
use_database
unless (@sqlserver_azure == true || SUPPORTED_VERSIONS.include?(@database_year))
raise NotImplementedError, "Currently, only #{SUPPORTED_VERSIONS.to_sentence} are supported. We got back #{@database_version}."
end
end
|
Instance Attribute Details
#database_version ⇒ Object
Returns the value of attribute database_version.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def database_version
@database_version
end
|
#database_year ⇒ Object
Returns the value of attribute database_year.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def database_year
@database_year
end
|
#edition ⇒ Object
Returns the value of attribute edition.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def edition
@edition
end
|
#product_level ⇒ Object
Returns the value of attribute product_level.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def product_level
@product_level
end
|
#product_version ⇒ Object
Returns the value of attribute product_version.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def product_version
@product_version
end
|
#spid ⇒ Object
Returns the value of attribute spid.
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def spid
@spid
end
|
Instance Method Details
#active? ⇒ Boolean
Abstract Adapter (Connection Management) ================== #
280
281
282
283
284
285
286
287
288
289
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 280
def active?
case @connection_options[:mode]
when :dblib
return @connection.active?
end
raw_connection_do("SELECT 1")
true
rescue *lost_connection_exceptions
false
end
|
#adapter_name ⇒ Object
Abstract Adapter ========================================== #
235
236
237
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 235
def adapter_name
ADAPTER_NAME
end
|
#auto_connect ⇒ Object
358
359
360
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 358
def auto_connect
@@auto_connect.is_a?(FalseClass) ? false : true
end
|
#auto_connect_duration ⇒ Object
362
363
364
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 362
def auto_connect_duration
@@auto_connect_duration ||= 10
end
|
#cs_equality_operator ⇒ Object
386
387
388
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 386
def cs_equality_operator
@@cs_equality_operator || 'COLLATE Latin1_General_CS_AS_WS'
end
|
#disable_referential_integrity ⇒ Object
271
272
273
274
275
276
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 271
def disable_referential_integrity
do_execute "EXEC sp_MSforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'"
yield
ensure
do_execute "EXEC sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT ALL'"
end
|
#disconnect! ⇒ Object
298
299
300
301
302
303
304
305
306
307
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 298
def disconnect!
reset_transaction
@spid = nil
case @connection_options[:mode]
when :dblib
@connection.close rescue nil
when :odbc
@connection.disconnect rescue nil
end
end
|
#inspect ⇒ Object
354
355
356
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 354
def inspect
"#<#{self.class} version: #{version}, year: #{@database_year}, product_level: #{@product_level.inspect}, product_version: #{@product_version.inspect}, edition: #{@edition.inspect}, connection_options: #{@connection_options.inspect}>"
end
|
#native_binary_database_type ⇒ Object
382
383
384
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 382
def native_binary_database_type
@@native_binary_database_type || 'varbinary(max)'
end
|
#native_date_database_type ⇒ Object
378
379
380
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 378
def native_date_database_type
sqlserver_2005? ? 'datetime' : 'date'
end
|
#native_string_database_type ⇒ Object
366
367
368
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 366
def native_string_database_type
@@native_string_database_type || (enable_default_unicode_types ? 'nvarchar' : 'varchar')
end
|
#native_text_database_type ⇒ Object
370
371
372
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 370
def native_text_database_type
@@native_text_database_type || enable_default_unicode_types ? 'nvarchar(max)' : 'varchar(max)'
end
|
#native_time_database_type ⇒ Object
374
375
376
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 374
def native_time_database_type
sqlserver_2005? ? 'datetime' : 'time'
end
|
#pk_and_sequence_for(table_name) ⇒ Object
Abstract Adapter (Misc Support) =========================== #
315
316
317
318
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 315
def pk_and_sequence_for(table_name)
idcol = identity_column(table_name)
idcol ? [idcol.name,nil] : nil
end
|
#primary_key(table_name) ⇒ Object
320
321
322
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 320
def primary_key(table_name)
identity_column(table_name).try(:name) || schema_cache.columns(table_name).detect(&:is_primary?).try(:name)
end
|
#reconnect! ⇒ Object
291
292
293
294
295
296
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 291
def reconnect!
reset_transaction
disconnect!
connect
active?
end
|
#reset! ⇒ Object
309
310
311
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 309
def reset!
remove_database_connections_and_rollback { }
end
|
#sqlserver? ⇒ Boolean
SQLServer Specific (DB Reflection) ======================== #
326
327
328
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 326
def sqlserver?
true
end
|
#sqlserver_2005? ⇒ Boolean
330
331
332
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 330
def sqlserver_2005?
@database_year == 2005
end
|
#sqlserver_2008? ⇒ Boolean
334
335
336
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 334
def sqlserver_2008?
@database_year == 2008
end
|
#sqlserver_2011? ⇒ Boolean
338
339
340
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 338
def sqlserver_2011?
@database_year == 2011
end
|
#sqlserver_2012? ⇒ Boolean
342
343
344
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 342
def sqlserver_2012?
@database_year == 2012
end
|
#sqlserver_azure? ⇒ Boolean
346
347
348
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 346
def sqlserver_azure?
@sqlserver_azure
end
|
#supports_bulk_alter? ⇒ Boolean
255
256
257
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 255
def supports_bulk_alter?
false
end
|
#supports_count_distinct? ⇒ Boolean
247
248
249
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 247
def supports_count_distinct?
true
end
|
#supports_ddl_transactions? ⇒ Boolean
251
252
253
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 251
def supports_ddl_transactions?
true
end
|
#supports_explain? ⇒ Boolean
267
268
269
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 267
def supports_explain?
true
end
|
#supports_index_sort_order? ⇒ Boolean
263
264
265
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 263
def supports_index_sort_order?
true
end
|
#supports_migrations? ⇒ Boolean
239
240
241
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 239
def supports_migrations?
true
end
|
#supports_primary_key? ⇒ Boolean
243
244
245
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 243
def supports_primary_key?
true
end
|
#supports_savepoints? ⇒ Boolean
259
260
261
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 259
def supports_savepoints?
true
end
|
#version ⇒ Object
350
351
352
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 350
def version
self.class::VERSION
end
|