Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter

Constant Summary collapse

ADAPTER_NAME =
'SQLServer'.freeze

Constants included from ActiveRecord::ConnectionAdapters::SQLServer::Version

ActiveRecord::ConnectionAdapters::SQLServer::Version::VERSION

Constants included from ActiveRecord::ConnectionAdapters::SQLServer::Quoting

ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_FALSE, ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_STRING_PREFIX, ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_TRUE

Constants included from ActiveRecord::ConnectionAdapters::SQLServer::Showplan

ActiveRecord::ConnectionAdapters::SQLServer::Showplan::OPTIONS, ActiveRecord::ConnectionAdapters::SQLServer::Showplan::OPTION_ALL, ActiveRecord::ConnectionAdapters::SQLServer::Showplan::OPTION_TEXT, ActiveRecord::ConnectionAdapters::SQLServer::Showplan::OPTION_XML

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::Quoting

#quote_column_name, #quote_default_value, #quote_string, #quoted_date, #quoted_false, #quoted_true, #unquoted_false, #unquoted_true

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::DatabaseStatements

#begin_db_transaction, #begin_isolated_db_transaction, #case_sensitive_modifier, #charset, #commit_db_transaction, #create_database, #create_savepoint, #current_database, #drop_database, #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, #select_rows, #set_transaction_isolation_level, #supports_statement_cache?, #transaction_isolation_levels, #use_database, #user_options, #user_options_dateformat, #user_options_isolation_level, #user_options_language, #with_identity_insert_enabled

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::Showplan

#explain

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::SchemaStatements

#change_column, #change_column_default, #change_column_null, #columns, #columns_for_distinct, #create_table, #extract_foreign_key_action, #foreign_keys, #indexes, #native_database_types, #new_column, #remove_column, #remove_index!, #rename_column, #rename_index, #rename_table, #table_exists?, #tables, #type_to_sql, #views

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

Constructor Details

#initialize(connection, logger, pool, config) ⇒ SQLServerAdapter

Returns a new instance of SQLServerAdapter.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 45

def initialize(connection, logger, pool, config)
  super(connection, logger, pool)
  # AbstractAdapter Responsibility
  @schema_cache = SQLServer::SchemaCache.new self
  @visitor = Arel::Visitors::SQLServer.new self
  @prepared_statements = true
  # Our Responsibility
  @config = config
  @connection_options = config
  connect
  @sqlserver_azure = !!(select_value('SELECT @@version', 'SCHEMA') =~ /Azure/i)
  initialize_dateformatter
  use_database
end

Instance Attribute Details

#spidObject (readonly)

Returns the value of attribute spid.



38
39
40
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 38

def spid
  @spid
end

Instance Method Details

#active?Boolean

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

Returns:

  • (Boolean)


127
128
129
130
131
132
133
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 127

def active?
  return false unless @connection
  raw_connection_do 'SELECT 1'
  true
rescue TinyTds::Error, ODBC::Error
  false
end

#adapter_nameObject



70
71
72
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 70

def adapter_name
  ADAPTER_NAME
end

#disable_referential_integrityObject



118
119
120
121
122
123
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 118

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



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 141

def disconnect!
  super
  @spid = nil
  case @connection_options[:mode]
  when :dblib
    @connection.close rescue nil
  when :odbc
    @connection.disconnect rescue nil
  end
  @connection = nil
end

#inspectObject



183
184
185
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 183

def inspect
  "#<#{self.class} version: #{version}, mode: #{@connection_options[:mode]}, azure: #{sqlserver_azure?.inspect}>"
end

#pk_and_sequence_for(table_name) ⇒ Object

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



160
161
162
163
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 160

def pk_and_sequence_for(table_name)
  pk = primary_key(table_name)
  pk ? [pk, nil] : nil
end

#primary_key(table_name) ⇒ Object



165
166
167
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 165

def primary_key(table_name)
  identity_column(table_name).try(:name) || schema_cache.columns(table_name).find(&:is_primary?).try(:name)
end

#reconnect!Object



135
136
137
138
139
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 135

def reconnect!
  super
  disconnect!
  connect
end

#reset!Object



153
154
155
156
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 153

def reset!
  reset_transaction
  do_execute 'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION'
end

#schema_creationObject



66
67
68
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 66

def schema_creation
  SQLServer::SchemaCreation.new self
end

#sqlserver?Boolean

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

Returns:

  • (Boolean)


171
172
173
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 171

def sqlserver?
  true
end

#sqlserver_azure?Boolean

Returns:

  • (Boolean)


175
176
177
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 175

def sqlserver_azure?
  @sqlserver_azure
end

#supports_bulk_alter?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 90

def supports_bulk_alter?
  false
end

#supports_count_distinct?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 82

def supports_count_distinct?
  true
end

#supports_ddl_transactions?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 86

def supports_ddl_transactions?
  true
end

#supports_explain?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 102

def supports_explain?
  true
end

#supports_foreign_keys?Boolean

Returns:

  • (Boolean)


114
115
116
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 114

def supports_foreign_keys?
  true
end

#supports_index_sort_order?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 94

def supports_index_sort_order?
  true
end

#supports_migrations?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 74

def supports_migrations?
  true
end

#supports_partial_index?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 98

def supports_partial_index?
  true
end

#supports_primary_key?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 78

def supports_primary_key?
  true
end

#supports_transaction_isolation?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 106

def supports_transaction_isolation?
  true
end

#supports_views?Boolean

Returns:

  • (Boolean)


110
111
112
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 110

def supports_views?
  true
end

#valid_type?(type) ⇒ Boolean

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

Returns:

  • (Boolean)


62
63
64
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 62

def valid_type?(type)
  !native_database_types[type].nil?
end

#versionObject



179
180
181
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 179

def version
  self.class::VERSION
end