Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter
Constant Summary
collapse
- ADAPTER_NAME =
"SQLServer".freeze
- DEFAULT_TIME_PRECISION =
7
ActiveRecord::ConnectionAdapters::SQLServer::Version::VERSION
ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_FALSE, ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_STRING_PREFIX, ActiveRecord::ConnectionAdapters::SQLServer::Quoting::QUOTED_TRUE
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
Class Method Summary
collapse
Instance Method Summary
collapse
#column_name_matcher, #column_name_with_order_matcher, #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
#begin_db_transaction, #begin_isolated_db_transaction, #build_insert_sql, #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, #insert_fixtures_set, #newid_function, #newsequentialid_function, #release_savepoint, #set_transaction_isolation_level, #transaction_isolation_levels, #use_database, #user_options, #user_options_dateformat, #user_options_isolation_level, #user_options_language, #with_identity_insert_enabled, #write_query?
#explain
#change_column, #change_column_default, #change_column_null, #change_table_schema, #columns, #columns_for_distinct, #create_schema, #create_schema_dumper, #create_table, #drop_schema, #drop_table, #extract_foreign_key_action, #foreign_keys, #indexes, #native_database_types, #new_column, #primary_keys, #primary_keys_select, #remove_column, #remove_index!, #rename_column, #rename_index, #rename_table, #type_to_sql, #update_table_definition
#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
#charset, #collation, #create_database, #current_database, #drop_database
Constructor Details
#initialize(connection, logger = nil, config = {}) ⇒ SQLServerAdapter
Returns a new instance of SQLServerAdapter.
62
63
64
65
66
67
68
69
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 62
def initialize(connection, logger = nil, config = {})
super(connection, logger, config)
@connection_options = config
connect
initialize_dateformatter
use_database
end
|
Instance Attribute Details
#spid ⇒ Object
Returns the value of attribute spid.
50
51
52
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 50
def spid
@spid
end
|
Class Method Details
.database_exists?(config) ⇒ Boolean
85
86
87
88
89
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 85
def self.database_exists?(config)
!!ActiveRecord::Base.sqlserver_connection(config)
rescue ActiveRecord::NoDatabaseError
false
end
|
Instance Method Details
#active? ⇒ Boolean
Abstract Adapter (Connection Management) ================== #
193
194
195
196
197
198
199
200
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 193
def active?
return false unless @connection
raw_connection_do "SELECT 1"
true
rescue *connection_errors
false
end
|
#arel_visitor ⇒ Object
Abstract Adapter ========================================== #
73
74
75
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 73
def arel_visitor
Arel::Visitors::SQLServer.new self
end
|
#clear_cache! ⇒ Object
219
220
221
222
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 219
def clear_cache!
@view_information = nil
super
end
|
#combine_bind_parameters(from_clause: [], join_clause: [], where_clause: [], having_clause: [], limit: nil, offset: nil) ⇒ Object
286
287
288
289
290
291
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 286
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_prefix ⇒ Object
266
267
268
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 266
def database_prefix
@connection_options[:database_prefix]
end
|
#database_prefix_identifier(name) ⇒ Object
270
271
272
273
274
275
276
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 270
def database_prefix_identifier(name)
if database_prefix_remote_server?
SQLServer::Utils.("#{database_prefix}#{name}")
else
SQLServer::Utils.(name)
end
end
|
#database_prefix_remote_server? ⇒ Boolean
259
260
261
262
263
264
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 259
def database_prefix_remote_server?
return false if database_prefix.blank?
name = SQLServer::Utils.(database_prefix)
name.fully_qualified? && name.object.blank?
end
|
#disable_referential_integrity ⇒ Object
183
184
185
186
187
188
189
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 183
def disable_referential_integrity
tables = tables_with_referential_integrity
tables.each { |t| do_execute "ALTER TABLE #{quote_table_name(t)} NOCHECK CONSTRAINT ALL" }
yield
ensure
tables.each { |t| do_execute "ALTER TABLE #{quote_table_name(t)} CHECK CONSTRAINT ALL" }
end
|
#disconnect! ⇒ Object
208
209
210
211
212
213
214
215
216
217
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 208
def disconnect!
super
case @connection_options[:mode]
when :dblib
@connection.close rescue nil
end
@connection = nil
@spid = nil
@collation = nil
end
|
#get_database_version ⇒ Object
293
294
295
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 293
def get_database_version version_year
end
|
#inspect ⇒ Object
282
283
284
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 282
def inspect
"#<#{self.class} version: #{version}, mode: #{@connection_options[:mode]}, azure: #{sqlserver_azure?.inspect}>"
end
|
#pk_and_sequence_for(table_name) ⇒ Object
244
245
246
247
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 244
def pk_and_sequence_for(table_name)
pk = primary_key(table_name)
pk ? [pk, nil] : nil
end
|
#reconnect! ⇒ Object
202
203
204
205
206
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 202
def reconnect!
super
disconnect!
connect
end
|
#reset! ⇒ Object
224
225
226
227
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 224
def reset!
reset_transaction
do_execute "IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION"
end
|
#schema_creation ⇒ Object
81
82
83
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 81
def schema_creation
SQLServer::SchemaCreation.new self
end
|
#sqlserver? ⇒ Boolean
SQLServer Specific (DB Reflection) ======================== #
251
252
253
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 251
def sqlserver?
true
end
|
#sqlserver_azure? ⇒ Boolean
255
256
257
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 255
def sqlserver_azure?
!!(sqlserver_version =~ /Azure/i)
end
|
#supports_advisory_locks? ⇒ Boolean
99
100
101
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 99
def supports_advisory_locks?
false
end
|
#supports_bulk_alter? ⇒ Boolean
95
96
97
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 95
def supports_bulk_alter?
false
end
|
143
144
145
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 143
def
false
end
|
147
148
149
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 147
def
false
end
|
#supports_datetime_with_precision? ⇒ Boolean
135
136
137
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 135
def supports_datetime_with_precision?
true
end
|
#supports_ddl_transactions? ⇒ Boolean
91
92
93
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 91
def supports_ddl_transactions?
true
end
|
#supports_explain? ⇒ Boolean
115
116
117
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 115
def supports_explain?
true
end
|
#supports_expression_index? ⇒ Boolean
111
112
113
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 111
def supports_expression_index?
false
end
|
#supports_foreign_keys? ⇒ Boolean
127
128
129
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 127
def supports_foreign_keys?
true
end
|
#supports_in_memory_oltp? ⇒ Boolean
163
164
165
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 163
def supports_in_memory_oltp?
@version_year >= 2014
end
|
#supports_index_sort_order? ⇒ Boolean
103
104
105
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 103
def supports_index_sort_order?
true
end
|
#supports_indexes_in_create? ⇒ Boolean
123
124
125
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 123
def supports_indexes_in_create?
false
end
|
#supports_insert_conflict_target? ⇒ Boolean
179
180
181
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 179
def supports_insert_conflict_target?
false
end
|
#supports_insert_on_duplicate_skip? ⇒ Boolean
171
172
173
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 171
def supports_insert_on_duplicate_skip?
false
end
|
#supports_insert_on_duplicate_update? ⇒ Boolean
175
176
177
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 175
def supports_insert_on_duplicate_update?
false
end
|
#supports_insert_returning? ⇒ Boolean
167
168
169
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 167
def supports_insert_returning?
true
end
|
#supports_json? ⇒ Boolean
139
140
141
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 139
def supports_json?
@version_year >= 2016
end
|
#supports_lazy_transactions? ⇒ Boolean
159
160
161
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 159
def supports_lazy_transactions?
true
end
|
#supports_optimizer_hints? ⇒ Boolean
155
156
157
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 155
def supports_optimizer_hints?
true
end
|
#supports_partial_index? ⇒ Boolean
107
108
109
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 107
def supports_partial_index?
true
end
|
#supports_savepoints? ⇒ Boolean
151
152
153
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 151
def supports_savepoints?
true
end
|
#supports_transaction_isolation? ⇒ Boolean
119
120
121
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 119
def supports_transaction_isolation?
true
end
|
#supports_views? ⇒ Boolean
131
132
133
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 131
def supports_views?
true
end
|
#tables_with_referential_integrity ⇒ Object
Abstract Adapter (Misc Support) =========================== #
231
232
233
234
235
236
237
238
239
240
241
242
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 231
def tables_with_referential_integrity
schemas_and_tables = select_rows <<~SQL.squish
SELECT DISTINCT s.name, o.name
FROM sys.foreign_keys i
INNER JOIN sys.objects o ON i.parent_object_id = o.OBJECT_ID
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
SQL
schemas_and_tables.map do |schema_table|
schema, table = schema_table
"#{SQLServer::Utils.quoted_raw(schema)}.#{SQLServer::Utils.quoted_raw(table)}"
end
end
|
#valid_type?(type) ⇒ Boolean
77
78
79
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 77
def valid_type?(type)
!native_database_types[type].nil?
end
|
#version ⇒ Object
278
279
280
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 278
def version
self.class::VERSION
end
|