Class: ActiveRecord::ConnectionAdapters::SQLServerAdapter
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, 2014, 2016, 2017]
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, #create_table, #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_database_name, #quote_default_value, #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.
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 54
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 = 2016
elsif @database_version =~ /vNext/i
year = 2016
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.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def database_version
@database_version
end
|
#database_year ⇒ Object
Returns the value of attribute database_year.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def database_year
@database_year
end
|
#edition ⇒ Object
Returns the value of attribute edition.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def edition
@edition
end
|
#product_level ⇒ Object
Returns the value of attribute product_level.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def product_level
@product_level
end
|
#product_version ⇒ Object
Returns the value of attribute product_version.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def product_version
@product_version
end
|
#spid ⇒ Object
Returns the value of attribute spid.
42
43
44
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 42
def spid
@spid
end
|
Instance Method Details
#active? ⇒ Boolean
Abstract Adapter (Connection Management) ================== #
139
140
141
142
143
144
145
146
147
148
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 139
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 ========================================== #
90
91
92
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 90
def adapter_name
ADAPTER_NAME
end
|
#auto_connect ⇒ Object
225
226
227
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 225
def auto_connect
@@auto_connect.is_a?(FalseClass) ? false : true
end
|
#auto_connect_duration ⇒ Object
229
230
231
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 229
def auto_connect_duration
@@auto_connect_duration ||= 10
end
|
#cs_equality_operator ⇒ Object
253
254
255
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 253
def cs_equality_operator
@@cs_equality_operator || 'COLLATE Latin1_General_CS_AS_WS'
end
|
#disable_referential_integrity ⇒ Object
130
131
132
133
134
135
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 130
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
157
158
159
160
161
162
163
164
165
166
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 157
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
221
222
223
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 221
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
249
250
251
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 249
def native_binary_database_type
@@native_binary_database_type || 'varbinary(max)'
end
|
#native_date_database_type ⇒ Object
245
246
247
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 245
def native_date_database_type
sqlserver_2005? ? 'datetime' : 'date'
end
|
#native_string_database_type ⇒ Object
233
234
235
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 233
def native_string_database_type
@@native_string_database_type || (enable_default_unicode_types ? 'nvarchar' : 'varchar')
end
|
#native_text_database_type ⇒ Object
237
238
239
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 237
def native_text_database_type
@@native_text_database_type || (enable_default_unicode_types ? 'nvarchar(max)' : 'varchar(max)')
end
|
#native_time_database_type ⇒ Object
241
242
243
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 241
def native_time_database_type
sqlserver_2005? ? 'datetime' : 'time'
end
|
#pk_and_sequence_for(table_name) ⇒ Object
Abstract Adapter (Misc Support) =========================== #
174
175
176
177
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 174
def pk_and_sequence_for(table_name)
pk = primary_key(table_name)
pk ? [pk, nil] : nil
end
|
#primary_key(table_name) ⇒ Object
179
180
181
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 179
def primary_key(table_name)
identity_column(table_name).try(:name) || schema_cache.columns(table_name).find(&:is_primary?).try(:name)
end
|
#reconnect! ⇒ Object
150
151
152
153
154
155
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 150
def reconnect!
reset_transaction
disconnect!
connect
active?
end
|
#reset! ⇒ Object
168
169
170
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 168
def reset!
remove_database_connections_and_rollback {}
end
|
#schema_creation ⇒ Object
183
184
185
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 183
def schema_creation
Sqlserver::SchemaCreation.new self
end
|
#sqlserver? ⇒ Boolean
SQLServer Specific (DB Reflection) ======================== #
189
190
191
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 189
def sqlserver?
true
end
|
#sqlserver_2005? ⇒ Boolean
193
194
195
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 193
def sqlserver_2005?
@database_year == 2005
end
|
#sqlserver_2008? ⇒ Boolean
197
198
199
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 197
def sqlserver_2008?
@database_year == 2008
end
|
#sqlserver_2011? ⇒ Boolean
201
202
203
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 201
def sqlserver_2011?
@database_year == 2011
end
|
#sqlserver_2012? ⇒ Boolean
205
206
207
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 205
def sqlserver_2012?
@database_year == 2012
end
|
#sqlserver_2014? ⇒ Boolean
209
210
211
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 209
def sqlserver_2014?
@database_year == 2014
end
|
#sqlserver_azure? ⇒ Boolean
213
214
215
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 213
def sqlserver_azure?
@sqlserver_azure
end
|
#supports_bulk_alter? ⇒ Boolean
110
111
112
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 110
def supports_bulk_alter?
false
end
|
#supports_count_distinct? ⇒ Boolean
102
103
104
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 102
def supports_count_distinct?
true
end
|
#supports_ddl_transactions? ⇒ Boolean
106
107
108
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 106
def supports_ddl_transactions?
true
end
|
#supports_explain? ⇒ Boolean
126
127
128
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 126
def supports_explain?
true
end
|
#supports_index_sort_order? ⇒ Boolean
118
119
120
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 118
def supports_index_sort_order?
true
end
|
#supports_migrations? ⇒ Boolean
94
95
96
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 94
def supports_migrations?
true
end
|
#supports_partial_index? ⇒ Boolean
122
123
124
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 122
def supports_partial_index?
@database_year >= 2008
end
|
#supports_primary_key? ⇒ Boolean
98
99
100
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 98
def supports_primary_key?
true
end
|
#supports_savepoints? ⇒ Boolean
114
115
116
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 114
def supports_savepoints?
true
end
|
#version ⇒ Object
217
218
219
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 217
def version
self.class::VERSION
end
|