Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter

Inherits:
AbstractAdapter
  • Object
show all
Includes:
ActiveRecord::ConnectionAdapters::SQLServer::DatabaseLimits, ActiveRecord::ConnectionAdapters::SQLServer::DatabaseStatements, ActiveRecord::ConnectionAdapters::SQLServer::DatabaseTasks, ActiveRecord::ConnectionAdapters::SQLServer::JDBCOverrides, ActiveRecord::ConnectionAdapters::SQLServer::Quoting, ActiveRecord::ConnectionAdapters::SQLServer::SchemaDumper, ActiveRecord::ConnectionAdapters::SQLServer::SchemaStatements, ActiveRecord::ConnectionAdapters::SQLServer::Showplan, ActiveRecord::ConnectionAdapters::SQLServer::Version, ArJdbc::Abstract::ConnectionManagement, ArJdbc::Abstract::Core, ArJdbc::Abstract::DatabaseStatements, ArJdbc::Abstract::StatementCache, ArJdbc::Abstract::TransactionSupport, ArJdbc::Util::QuotedCache
Defined in:
lib/active_record/connection_adapters/sqlserver_adapter.rb

Constant Summary collapse

USING_JDBC_DRIVER =
defined? JRUBY_VERSION
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

#fetch_type_metadata, #quote_column_name, #quote_default_expression, #quote_string, #quote_string_single, #quote_string_single_national, #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_comparison, #commit_db_transaction, #create_savepoint, #exec_delete, #exec_insert, #exec_query, #exec_rollback_db_transaction, #exec_rollback_to_savepoint, #exec_update, #execute, #execute_procedure, #newid_function, #newsequentialid_function, #release_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, #data_source_exists?, #drop_table, #extract_foreign_key_action, #foreign_keys, #indexes, #native_database_types, #new_column, #primary_keys, #remove_column, #remove_index!, #rename_column, #rename_index, #rename_table, #table_exists?, #tables, #type_to_sql, #update_table_definition, #view_exists?, #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

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::DatabaseTasks

#charset, #collation, #create_database, #current_database, #drop_database

Methods included from ActiveRecord::ConnectionAdapters::SQLServer::JDBCOverrides

#exec_insert, #execute, #execute_procedure, #explain, #jdbc_connection_class, #quoted_date, #select_rows

Constructor Details

#initialize(connection, logger = nil, config = {}) ⇒ SQLServerAdapter



65
66
67
68
69
70
71
72
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 65

def initialize(connection, logger = nil, config = {})
  super(connection, logger, config)
  # Our Responsibility
  @connection_options = config
  connect
  initialize_dateformatter
  use_database
end

Instance Attribute Details

#spidObject (readonly)

Returns the value of attribute spid.



55
56
57
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 55

def spid
  @spid
end

Instance Method Details

#active?Boolean

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



170
171
172
173
174
175
176
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 170

def active?
  return false unless @connection
  raw_connection_do 'SELECT 1'
  true
rescue *connection_errors
  false
end

#arel_visitorObject

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



76
77
78
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 76

def arel_visitor
  Arel::Visitors::SQLServer.new self
end

#clear_cache!Object



195
196
197
198
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 195

def clear_cache!
  @view_information = nil
  super
end

#combine_bind_parameters(from_clause: [], join_clause: [], where_clause: [], having_clause: [], limit: nil, offset: nil) ⇒ Object



253
254
255
256
257
258
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 253

def combine_bind_parameters(from_clause: [], join_clause: [], where_clause: [], having_clause: [], limit: nil, offset: nil)
  result = from_clause + join_clause + where_clause + having_clause
  result << offset if offset
  result << limit if limit
  result
end

#database_prefixObject



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

def database_prefix
  @connection_options[:database_prefix]
end

#database_prefix_remote_server?Boolean



235
236
237
238
239
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 235

def database_prefix_remote_server?
  return false if database_prefix.blank?
  name = SQLServer::Utils.extract_identifiers(database_prefix)
  name.fully_qualified? && name.object.blank?
end

#disable_referential_integrityObject



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

def disable_referential_integrity
  tables = tables_with_referential_integrity
  tables.each { |t| do_execute "ALTER TABLE #{t} NOCHECK CONSTRAINT ALL" }
  yield
ensure
  tables.each { |t| do_execute "ALTER TABLE #{t} CHECK CONSTRAINT ALL" }
end

#disconnect!Object



184
185
186
187
188
189
190
191
192
193
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 184

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

#inspectObject



249
250
251
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 249

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

#pk_and_sequence_for(table_name) ⇒ Object



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

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

#reconnect!Object

Core takes care of this



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

def reconnect!
  super
  disconnect! unless USING_JDBC_DRIVER # Don't need to disconnect in JDBC
  connect
end

#reset!Object



200
201
202
203
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 200

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

#schema_creationObject



84
85
86
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 84

def schema_creation
  SQLServer::SchemaCreation.new self
end

#sqlserver?Boolean

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



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

def sqlserver?
  true
end

#sqlserver_azure?Boolean



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

def sqlserver_azure?
  @sqlserver_azure ||= !!(select_value('SELECT @@version', 'SCHEMA') =~ /Azure/i)
end

#supports_advisory_locks?Boolean



104
105
106
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 104

def supports_advisory_locks?
  false
end

#supports_bulk_alter?Boolean



100
101
102
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 100

def supports_bulk_alter?
  false
end

#supports_comments?Boolean



148
149
150
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 148

def supports_comments?
  false
end

#supports_comments_in_create?Boolean



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

def supports_comments_in_create?
  false
end

#supports_datetime_with_precision?Boolean



140
141
142
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 140

def supports_datetime_with_precision?
  true
end

#supports_ddl_transactions?Boolean



96
97
98
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 96

def supports_ddl_transactions?
  true
end

#supports_explain?Boolean



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

def supports_explain?
  true
end

#supports_expression_index?Boolean



116
117
118
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 116

def supports_expression_index?
  false
end

#supports_foreign_keys?Boolean



132
133
134
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 132

def supports_foreign_keys?
  true
end

#supports_in_memory_oltp?Boolean



156
157
158
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 156

def supports_in_memory_oltp?
  @version_year >= 2014
end

#supports_index_sort_order?Boolean



108
109
110
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 108

def supports_index_sort_order?
  true
end

#supports_indexes_in_create?Boolean



128
129
130
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 128

def supports_indexes_in_create?
  false
end

#supports_json?Boolean



144
145
146
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 144

def supports_json?
  @version_year >= 2016
end

#supports_migrations?Boolean



88
89
90
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 88

def supports_migrations?
  true
end

#supports_partial_index?Boolean



112
113
114
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 112

def supports_partial_index?
  true
end

#supports_primary_key?Boolean



92
93
94
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 92

def supports_primary_key?
  true
end

#supports_transaction_isolation?Boolean



124
125
126
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 124

def supports_transaction_isolation?
  true
end

#supports_views?Boolean



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

def supports_views?
  true
end

#tables_with_referential_integrityObject

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



207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 207

def tables_with_referential_integrity
  schemas_and_tables = select_rows "    SELECT s.name AS schema_name, o.name AS table_name\n    FROM sys.foreign_keys i\n    INNER JOIN sys.objects o ON i.parent_object_id = o.OBJECT_ID\n    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id\n  SQL\n  schemas_and_tables.map do |schema_table|\n    schema, table = schema_table\n    \"\#{SQLServer::Utils.quoted_raw(schema)}.\#{SQLServer::Utils.quoted_raw(table)}\"\n  end\nend\n".strip_heredoc

#valid_type?(type) ⇒ Boolean



80
81
82
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 80

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

#versionObject



245
246
247
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 245

def version
  self.class::VERSION
end