Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter

Overview

class SQLServerColumn

Constant Summary collapse

ADAPTER_NAME =
'SQLServer'.freeze
VERSION =
'3.0.3'.freeze
DATABASE_VERSION_REGEXP =
/Microsoft SQL Server\s+(\d{4})/
SUPPORTED_VERSIONS =
[2005,2008].freeze

Constants included from ActiveRecord::ConnectionAdapters::Sqlserver::Errors

ActiveRecord::ConnectionAdapters::Sqlserver::Errors::LOST_CONNECTION_EXCEPTIONS, ActiveRecord::ConnectionAdapters::Sqlserver::Errors::LOST_CONNECTION_MESSAGES

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::Errors

#lost_connection_exceptions, #lost_connection_messages

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::QueryCache

#select_one

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::DatabaseLimits

#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

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::SchemaStatements

#add_column, #change_column, #change_column_default, #change_column_null, #columns, #create_table, #drop_table, #indexes, #native_database_types, #remove_column, #remove_index!, #rename_column, #rename_table, #table_exists?, #tables, #type_to_sql, #views

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::DatabaseStatements

#add_limit_offset!, #begin_db_transaction, #case_sensitive_equality_operator, #charset, #commit_db_transaction, #create_database, #create_savepoint, #current_database, #drop_database, #empty_insert_statement_value, #execute, #execute_procedure, #limited_update_conditions, #newid_function, #newsequentialid_function, #outside_transaction?, #recreate_database, #recreate_database!, #release_savepoint, #rollback_db_transaction, #rollback_to_savepoint, #run_with_isolation_level, #select_one, #select_rows, #use_database, #user_options

Methods included from ActiveRecord::ConnectionAdapters::Sqlserver::Quoting

#quote, #quote_column_name, #quote_string, #quote_table_name, #quote_value_as_utf8?, #quoted_date, #quoted_false, #quoted_true, #quoted_utf8_value

Constructor Details

#initialize(logger, config) ⇒ SQLServerAdapter

Returns a new instance of SQLServerAdapter.



198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 198

def initialize(logger,config)
  @connection_options = config
  connect
  super(@connection, logger)
  @database_version = info_schema_query { select_value('SELECT @@version') }
  @database_year = DATABASE_VERSION_REGEXP.match(@database_version)[1].to_i rescue 0
  initialize_native_database_types
  initialize_sqlserver_caches
  use_database
  unless SUPPORTED_VERSIONS.include?(@database_year)
    raise NotImplementedError, "Currently, only #{SUPPORTED_VERSIONS.to_sentence} are supported."
  end
end

Instance Attribute Details

#connection_supports_native_typesObject (readonly)

Returns the value of attribute connection_supports_native_types.



191
192
193
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 191

def connection_supports_native_types
  @connection_supports_native_types
end

#database_versionObject (readonly)

Returns the value of attribute database_version.



191
192
193
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 191

def database_version
  @database_version
end

#database_yearObject (readonly)

Returns the value of attribute database_year.



191
192
193
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 191

def database_year
  @database_year
end

Instance Method Details

#active?Boolean

Abstract Adapter (Connection Management) ================== #

Returns:

  • (Boolean)


247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 247

def active?
  connected = case @connection_options[:mode]
              when :dblib
                !@connection.closed?
              when :odbc
                true
              else :adonet
                true
              end
  return false if !connected
  raw_connection_do("SELECT 1")
  true
rescue *lost_connection_exceptions
  false
end

#adapter_nameObject

Abstract Adapter ========================================== #



214
215
216
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 214

def adapter_name
  ADAPTER_NAME
end

#auto_connectObject



317
318
319
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 317

def auto_connect
  @@auto_connect.is_a?(FalseClass) ? false : true
end

#cs_equality_operatorObject



341
342
343
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 341

def cs_equality_operator
  @@cs_equality_operator || 'COLLATE Latin1_General_CS_AS_WS ='
end

#disable_referential_integrityObject



238
239
240
241
242
243
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 238

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



269
270
271
272
273
274
275
276
277
278
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 269

def disconnect!
  case @connection_options[:mode]
  when :dblib
    @connection.close rescue nil
  when :odbc
    @connection.disconnect rescue nil
  else :adonet
    @connection.close rescue nil
  end
end

#inspectObject



313
314
315
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 313

def inspect
  "#<#{self.class} version: #{version}, year: #{@database_year}, connection_options: #{@connection_options.inspect}>"
end

#native_binary_database_typeObject



337
338
339
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 337

def native_binary_database_type
  @@native_binary_database_type || 'varbinary(max)'
end

#native_date_database_typeObject



333
334
335
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 333

def native_date_database_type
  sqlserver_2008? ? 'date' : 'datetime'
end

#native_string_database_typeObject



321
322
323
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 321

def native_string_database_type
  @@native_string_database_type || (enable_default_unicode_types ? 'nvarchar' : 'varchar') 
end

#native_text_database_typeObject



325
326
327
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 325

def native_text_database_type
  @@native_text_database_type || enable_default_unicode_types ? 'nvarchar(max)' : 'varchar(max)'
end

#native_time_database_typeObject



329
330
331
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 329

def native_time_database_type
  sqlserver_2008? ? 'time' : 'datetime'
end

#pk_and_sequence_for(table_name) ⇒ Object

Abstract Adapter (Misc Support) =========================== #



286
287
288
289
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 286

def pk_and_sequence_for(table_name)
  idcol = identity_column(table_name)
  idcol ? [idcol.name,nil] : nil
end

#primary_key(table_name) ⇒ Object



291
292
293
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 291

def primary_key(table_name)
  identity_column(table_name).try(:name)
end

#reconnect!Object



263
264
265
266
267
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 263

def reconnect!
  disconnect!
  connect
  active?
end

#reset!Object



280
281
282
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 280

def reset!
  remove_database_connections_and_rollback { }
end

#sqlserver?Boolean

SQLServer Specific (DB Reflection) ======================== #

Returns:

  • (Boolean)


297
298
299
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 297

def sqlserver?
  true
end

#sqlserver_2005?Boolean

Returns:

  • (Boolean)


301
302
303
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 301

def sqlserver_2005?
  @database_year == 2005
end

#sqlserver_2008?Boolean

Returns:

  • (Boolean)


305
306
307
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 305

def sqlserver_2008?
  @database_year == 2008
end

#supports_count_distinct?Boolean

Returns:

  • (Boolean)


226
227
228
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 226

def supports_count_distinct?
  true
end

#supports_ddl_transactions?Boolean

Returns:

  • (Boolean)


230
231
232
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 230

def supports_ddl_transactions?
  true
end

#supports_migrations?Boolean

Returns:

  • (Boolean)


218
219
220
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 218

def supports_migrations?
  true
end

#supports_primary_key?Boolean

Returns:

  • (Boolean)


222
223
224
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 222

def supports_primary_key?
  true
end

#supports_savepoints?Boolean

Returns:

  • (Boolean)


234
235
236
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 234

def supports_savepoints?
  true
end

#versionObject



309
310
311
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 309

def version
  self.class::VERSION
end