@@ -72,7 +72,6 @@ def change_column(table_name, column_name, type, options = {})
7272 sql_commands = [ ]
7373 indexes = [ ]
7474 column_object = schema_cache . columns ( table_name ) . find { |c | c . name . to_s == column_name . to_s }
75-
7675 if options_include_default? ( options ) || ( column_object && column_object . type != type . to_sym )
7776 remove_default_constraint ( table_name , column_name )
7877 indexes = indexes ( table_name ) . select { |index | index . columns . include? ( column_name . to_s ) }
@@ -84,7 +83,6 @@ def change_column(table_name, column_name, type, options = {})
8483 if options_include_default? ( options )
8584 sql_commands << "ALTER TABLE #{ quote_table_name ( table_name ) } ADD CONSTRAINT #{ default_constraint_name ( table_name , column_name ) } DEFAULT #{ quote_default_value ( options [ :default ] , column_object ) } FOR #{ quote_column_name ( column_name ) } "
8685 end
87-
8886 # Add any removed indexes back
8987 indexes . each do |index |
9088 sql_commands << "CREATE INDEX #{ quote_table_name ( index . name ) } ON #{ quote_table_name ( table_name ) } (#{ index . columns . map { |c | quote_column_name ( c ) } . join ( ', ' ) } )"
@@ -102,13 +100,16 @@ def change_column_default(table_name, column_name, default)
102100 def rename_column ( table_name , column_name , new_column_name )
103101 schema_cache . clear_table_cache! ( table_name )
104102 detect_column_for! table_name , column_name
105- do_execute "EXEC sp_rename '#{ table_name } .#{ column_name } ', '#{ new_column_name } ', 'COLUMN'"
103+ identifier = SQLServer ::Utils . extract_identifiers ( "#{ table_name } .#{ column_name } " )
104+ execute_procedure :sp_rename , identifier . quoted , new_column_name , 'COLUMN'
106105 rename_column_indexes ( table_name , column_name , new_column_name )
107106 schema_cache . clear_table_cache! ( table_name )
108107 end
109108
110109 def rename_index ( table_name , old_name , new_name )
111- execute "EXEC sp_rename N'#{ table_name } .#{ old_name } ', N'#{ new_name } ', N'INDEX'"
110+ raise ArgumentError , "Index name '#{ new_name } ' on table '#{ table_name } ' is too long; the limit is #{ allowed_index_name_length } characters" if new_name . length > allowed_index_name_length
111+ identifier = SQLServer ::Utils . extract_identifiers ( "#{ table_name } .#{ old_name } " )
112+ execute_procedure :sp_rename , identifier . quoted , new_name , 'INDEX'
112113 end
113114
114115 def remove_index! ( table_name , index_name )
0 commit comments