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]
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
|
# 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 = 2012
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) ================== #
137
138
139
140
141
142
143
144
145
146
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 137
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 ========================================== #
88
89
90
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 88
def adapter_name
ADAPTER_NAME
end
|
#auto_connect ⇒ Object
219
220
221
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 219
def auto_connect
@@auto_connect.is_a?(FalseClass) ? false : true
end
|
#auto_connect_duration ⇒ Object
223
224
225
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 223
def auto_connect_duration
@@auto_connect_duration ||= 10
end
|
#cs_equality_operator ⇒ Object
247
248
249
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 247
def cs_equality_operator
@@cs_equality_operator || 'COLLATE Latin1_General_CS_AS_WS'
end
|
#disable_referential_integrity ⇒ Object
128
129
130
131
132
133
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 128
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
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 155
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
215
216
217
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 215
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
243
244
245
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 243
def native_binary_database_type
@@native_binary_database_type || 'varbinary(max)'
end
|
#native_date_database_type ⇒ Object
239
240
241
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 239
def native_date_database_type
sqlserver_2005? ? 'datetime' : 'date'
end
|
#native_string_database_type ⇒ Object
227
228
229
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 227
def native_string_database_type
@@native_string_database_type || (enable_default_unicode_types ? 'nvarchar' : 'varchar')
end
|
#native_text_database_type ⇒ Object
231
232
233
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 231
def native_text_database_type
@@native_text_database_type || enable_default_unicode_types ? 'nvarchar(max)' : 'varchar(max)'
end
|
#native_time_database_type ⇒ Object
235
236
237
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 235
def native_time_database_type
sqlserver_2005? ? 'datetime' : 'time'
end
|
#pk_and_sequence_for(table_name) ⇒ Object
Abstract Adapter (Misc Support) =========================== #
172
173
174
175
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 172
def pk_and_sequence_for(table_name)
pk = primary_key(table_name)
pk ? [pk, nil] : nil
end
|
#primary_key(table_name) ⇒ Object
177
178
179
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 177
def primary_key(table_name)
identity_column(table_name).try(:name) || schema_cache.columns(table_name).find(&:is_primary?).try(:name)
end
|
#reconnect! ⇒ Object
148
149
150
151
152
153
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 148
def reconnect!
reset_transaction
disconnect!
connect
active?
end
|
#reset! ⇒ Object
166
167
168
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 166
def reset!
remove_database_connections_and_rollback {}
end
|
#schema_creation ⇒ Object
181
182
183
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 181
def schema_creation
Sqlserver::SchemaCreation.new self
end
|
#sqlserver? ⇒ Boolean
SQLServer Specific (DB Reflection) ======================== #
187
188
189
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 187
def sqlserver?
true
end
|
#sqlserver_2005? ⇒ Boolean
191
192
193
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 191
def sqlserver_2005?
@database_year == 2005
end
|
#sqlserver_2008? ⇒ Boolean
195
196
197
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 195
def sqlserver_2008?
@database_year == 2008
end
|
#sqlserver_2011? ⇒ Boolean
199
200
201
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 199
def sqlserver_2011?
@database_year == 2011
end
|
#sqlserver_2012? ⇒ Boolean
203
204
205
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 203
def sqlserver_2012?
@database_year == 2012
end
|
#sqlserver_azure? ⇒ Boolean
207
208
209
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 207
def sqlserver_azure?
@sqlserver_azure
end
|
#supports_bulk_alter? ⇒ Boolean
108
109
110
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 108
def supports_bulk_alter?
false
end
|
#supports_count_distinct? ⇒ Boolean
100
101
102
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 100
def supports_count_distinct?
true
end
|
#supports_ddl_transactions? ⇒ Boolean
104
105
106
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 104
def supports_ddl_transactions?
true
end
|
#supports_explain? ⇒ Boolean
124
125
126
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 124
def supports_explain?
true
end
|
#supports_index_sort_order? ⇒ Boolean
116
117
118
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 116
def supports_index_sort_order?
true
end
|
#supports_migrations? ⇒ Boolean
92
93
94
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 92
def supports_migrations?
true
end
|
#supports_partial_index? ⇒ Boolean
120
121
122
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 120
def supports_partial_index?
@database_year >= 2008
end
|
#supports_primary_key? ⇒ Boolean
96
97
98
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 96
def supports_primary_key?
true
end
|
#supports_savepoints? ⇒ Boolean
112
113
114
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 112
def supports_savepoints?
true
end
|
#version ⇒ Object
211
212
213
|
# File 'lib/active_record/connection_adapters/sqlserver_adapter.rb', line 211
def version
self.class::VERSION
end
|