@@ -2,7 +2,7 @@ module ActiveRecord
22 module ConnectionAdapters
33 module Sqlserver
44 module SchemaStatements
5-
5+
66 def native_database_types
77 @native_database_types ||= initialize_native_database_types . freeze
88 end
@@ -43,11 +43,11 @@ def columns(table_name, name = nil)
4343 SQLServerColumn . new ci [ :name ] , ci [ :default_value ] , ci [ :type ] , ci [ :null ] , sqlserver_options
4444 end
4545 end
46-
46+
4747 def rename_table ( table_name , new_name )
4848 do_execute "EXEC sp_rename '#{ table_name } ', '#{ new_name } '"
4949 end
50-
50+
5151 def remove_column ( table_name , *column_names )
5252 raise ArgumentError . new ( "You must specify at least one column name. Example: remove_column(:people, :first_name)" ) if column_names . empty?
5353 column_names . flatten . each do |column_name |
@@ -82,7 +82,7 @@ def rename_column(table_name, column_name, new_column_name)
8282 detect_column_for! table_name , column_name
8383 do_execute "EXEC sp_rename '#{ table_name } .#{ column_name } ', '#{ new_column_name } ', 'COLUMN'"
8484 end
85-
85+
8686 def remove_index! ( table_name , index_name )
8787 do_execute "DROP INDEX #{ quote_column_name ( index_name ) } ON #{ quote_table_name ( table_name ) } "
8888 end
@@ -112,18 +112,18 @@ def change_column_null(table_name, column_name, null, default = nil)
112112 sql << " NOT NULL" unless null
113113 do_execute sql
114114 end
115-
115+
116116 # === SQLServer Specific ======================================== #
117-
117+
118118 def views
119119 tables ( 'VIEW' )
120120 end
121-
122-
121+
122+
123123 protected
124-
124+
125125 # === SQLServer Specific ======================================== #
126-
126+
127127 def initialize_native_database_types
128128 {
129129 :primary_key => "int NOT NULL IDENTITY(1,1) PRIMARY KEY" ,
@@ -155,7 +155,7 @@ def column_definitions(table_name)
155155 table_schema = Utils . unqualify_table_schema ( table_name )
156156 table_name = Utils . unqualify_table_name ( table_name )
157157 sql = %{
158- SELECT DISTINCT
158+ SELECT DISTINCT
159159 #{ lowercase_schema_reflection_sql ( 'columns.TABLE_NAME' ) } AS table_name,
160160 #{ lowercase_schema_reflection_sql ( 'columns.COLUMN_NAME' ) } AS name,
161161 columns.DATA_TYPE AS type,
@@ -165,24 +165,24 @@ def column_definitions(table_name)
165165 columns.ordinal_position,
166166 CASE
167167 WHEN columns.DATA_TYPE IN ('nchar','nvarchar') THEN columns.CHARACTER_MAXIMUM_LENGTH
168- ELSE COL_LENGTH(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
168+ ELSE COL_LENGTH(' #{ db_name_with_period } '+ columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME, columns.COLUMN_NAME)
169169 END AS [length],
170170 CASE
171171 WHEN columns.IS_NULLABLE = 'YES' THEN 1
172172 ELSE NULL
173173 END AS [is_nullable],
174- CASE
174+ CASE
175175 WHEN KCU.COLUMN_NAME IS NOT NULL AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY' THEN 1
176176 ELSE NULL
177177 END AS [is_primary],
178- CASE
179- WHEN COLUMNPROPERTY(OBJECT_ID(columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
178+ CASE
179+ WHEN COLUMNPROPERTY(OBJECT_ID(' #{ db_name_with_period } '+ columns.TABLE_SCHEMA+'.'+columns.TABLE_NAME), columns.COLUMN_NAME, 'IsIdentity') = 1 THEN 1
180180 ELSE NULL
181181 END AS [is_identity]
182182 FROM #{ db_name_with_period } INFORMATION_SCHEMA.COLUMNS columns
183- LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
184- ON TC.TABLE_NAME = columns.TABLE_NAME
185- AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
183+ LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
184+ ON TC.TABLE_NAME = columns.TABLE_NAME
185+ AND TC.CONSTRAINT_TYPE = N'PRIMARY KEY'
186186 LEFT OUTER JOIN #{ db_name_with_period } INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
187187 ON KCU.COLUMN_NAME = columns.COLUMN_NAME
188188 AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
@@ -231,7 +231,7 @@ def column_definitions(table_name)
231231 ci
232232 end
233233 end
234-
234+
235235 def remove_check_constraints ( table_name , column_name )
236236 constraints = select_values "SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_NAME = '#{ quote_string ( table_name ) } ' and COLUMN_NAME = '#{ quote_string ( column_name ) } '" , 'SCHEMA'
237237 constraints . each do |constraint |
@@ -253,9 +253,9 @@ def remove_indexes(table_name, column_name)
253253 remove_index ( table_name , { :name => index . name } )
254254 end
255255 end
256-
256+
257257 # === SQLServer Specific (Misc Helpers) ========================= #
258-
258+
259259 def get_table_name ( sql )
260260 if sql =~ /^\s *(INSERT|EXEC sp_executesql N'INSERT)\s +INTO\s +([^\( \s ]+)\s *|^\s *update\s +([^\( \s ]+)\s */i
261261 $2 || $3
@@ -265,29 +265,29 @@ def get_table_name(sql)
265265 nil
266266 end
267267 end
268-
268+
269269 def default_constraint_name ( table_name , column_name )
270270 "DF_#{ table_name } _#{ column_name } "
271271 end
272-
272+
273273 def detect_column_for! ( table_name , column_name )
274274 unless column = schema_cache . columns [ table_name ] . detect { |c | c . name == column_name . to_s }
275275 raise ActiveRecordError , "No such column: #{ table_name } .#{ column_name } "
276276 end
277277 column
278278 end
279-
279+
280280 def lowercase_schema_reflection_sql ( node )
281281 lowercase_schema_reflection ? "LOWER(#{ node } )" : node
282282 end
283-
283+
284284 # === SQLServer Specific (View Reflection) ====================== #
285-
285+
286286 def view_table_name ( table_name )
287287 view_info = schema_cache . view_information ( table_name )
288288 view_info ? get_table_name ( view_info [ 'VIEW_DEFINITION' ] ) : table_name
289289 end
290-
290+
291291 def view_information ( table_name )
292292 table_name = Utils . unqualify_table_name ( table_name )
293293 view_info = select_one "SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '#{ table_name } '" , 'SCHEMA'
@@ -304,18 +304,18 @@ def view_information(table_name)
304304 end
305305 view_info
306306 end
307-
307+
308308 def table_name_or_views_table_name ( table_name )
309309 unquoted_table_name = Utils . unqualify_table_name ( table_name )
310310 schema_cache . view_names . include? ( unquoted_table_name ) ? view_table_name ( unquoted_table_name ) : unquoted_table_name
311311 end
312-
312+
313313 def views_real_column_name ( table_name , column_name )
314314 view_definition = schema_cache . view_information ( table_name ) [ :VIEW_DEFINITION ]
315315 match_data = view_definition . match ( /([\w -]*)\s +as\s +#{ column_name } /im )
316316 match_data ? match_data [ 1 ] : column_name
317317 end
318-
318+
319319 # === SQLServer Specific (Identity Inserts) ===================== #
320320
321321 def query_requires_identity_insert? ( sql )
@@ -327,11 +327,11 @@ def query_requires_identity_insert?(sql)
327327 false
328328 end
329329 end
330-
330+
331331 def insert_sql? ( sql )
332332 !( sql =~ /^\s *(INSERT|EXEC sp_executesql N'INSERT)/i ) . nil?
333333 end
334-
334+
335335 def with_identity_insert_enabled ( table_name )
336336 table_name = quote_table_name ( table_name_or_views_table_name ( table_name ) )
337337 set_identity_insert ( table_name , true )
0 commit comments