Skip to content

Commit 1ebfceb

Browse files
committed
Fixing a few more tests.
PersistenceTest#test_update_all_doesnt_ignore_order ActiveRecord::Migration::IndexTest#test_rename_index_too_long 7 failures, 4 errors, 2 skips
1 parent 62bfe25 commit 1ebfceb

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

test/cases/coerced_tests.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,25 @@ class PersistenceTest < ActiveRecord::TestCase
352352
# We can not UPDATE identity columns.
353353
coerce_tests! :test_update_columns_changing_id
354354

355+
# Previous test required updating a identity column.
356+
coerce_tests! :test_update_all_doesnt_ignore_order
357+
def test_update_all_doesnt_ignore_order_coerced
358+
david, mary = authors(:david), authors(:mary)
359+
david.id.must_equal 1
360+
mary.id.must_equal 2
361+
david.name.wont_equal mary.name
362+
assert_sql(/UPDATE.*\(SELECT \[authors\].\[id\] FROM \[authors\].*ORDER BY \[authors\].\[id\]/i) do
363+
Author.where('[id] > 1').order(:id).update_all(name: 'Test')
364+
end
365+
david.reload.name.must_equal 'David'
366+
mary.reload.name.must_equal 'Test'
367+
end
368+
355369
end
356370

357371

358372

373+
359374
require 'models/topic'
360375
module ActiveRecord
361376
class PredicateBuilderTest < ActiveRecord::TestCase

0 commit comments

Comments
 (0)