Skip to content

Commit 868d859

Browse files
committed
Merge pull request rails#26687 from kamipo/fix_add_index_to_normalize_options
Fix `add_index` to normalize column names and options
1 parent 56d970c commit 868d859

File tree

5 files changed

+20
-3
lines changed

5 files changed

+20
-3
lines changed

activerecord/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
* Support index length and order options using both string and symbol
2+
column names.
3+
4+
Fixes #27243.
5+
6+
*Ryuta Kamizono*
7+
8+
19
## Rails 5.0.1.rc1 (December 01, 2016) ##
210

311
* Fix that unsigned with zerofill is treated as signed.

activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,6 +1169,7 @@ def add_index_sort_order(quoted_columns, **options)
11691169
if order = options[:order]
11701170
case order
11711171
when Hash
1172+
order = order.symbolize_keys
11721173
quoted_columns.each { |name, column| column << " #{order[name].upcase}" if order[name].present? }
11731174
when String
11741175
quoted_columns.each { |name, column| column << " #{order.upcase}" if order.present? }

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ def add_index_length(quoted_columns, **options)
716716
if length = options[:length]
717717
case length
718718
when Hash
719+
length = length.symbolize_keys
719720
quoted_columns.each { |name, column| column << "(#{length[name]})" if length[name].present? }
720721
when Integer
721722
quoted_columns.each { |name, column| column << "(#{length})" }

activerecord/test/cases/adapters/mysql2/active_schema_test.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@ def (ActiveRecord::Base.connection).index_name_exists?(*); false; end
2727
assert_equal expected, add_index(:people, :last_name, :length => 10)
2828

2929
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`(15)) "
30-
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15)
30+
assert_equal expected, add_index(:people, [:last_name, :first_name], length: 15)
31+
assert_equal expected, add_index(:people, ["last_name", "first_name"], length: 15)
3132

3233
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`) "
33-
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => {:last_name => 15})
34+
assert_equal expected, add_index(:people, [:last_name, :first_name], length: { last_name: 15 })
35+
assert_equal expected, add_index(:people, ["last_name", "first_name"], length: { last_name: 15 })
3436

3537
expected = "CREATE INDEX `index_people_on_last_name_and_first_name` ON `people` (`last_name`(15), `first_name`(10)) "
36-
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => {:last_name => 15, :first_name => 10})
38+
assert_equal expected, add_index(:people, [:last_name, :first_name], length: { last_name: 15, first_name: 10 })
39+
assert_equal expected, add_index(:people, ["last_name", :first_name], length: { last_name: 15, "first_name" => 10 })
3740

3841
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
3942
expected = "CREATE #{type} INDEX `index_people_on_last_name` ON `people` (`last_name`) "

activerecord/test/cases/adapters/postgresql/active_schema_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ def test_add_index
3939
expected = %(CREATE INDEX CONCURRENTLY "index_people_on_last_name" ON "people" ("last_name"))
4040
assert_equal expected, add_index(:people, :last_name, algorithm: :concurrently)
4141

42+
expected = %(CREATE INDEX "index_people_on_last_name_and_first_name" ON "people" ("last_name" DESC, "first_name" ASC))
43+
assert_equal expected, add_index(:people, [:last_name, :first_name], order: { last_name: :desc, first_name: :asc })
44+
assert_equal expected, add_index(:people, ["last_name", :first_name], order: { last_name: :desc, "first_name" => :asc })
45+
4246
%w(gin gist hash btree).each do |type|
4347
expected = %(CREATE INDEX "index_people_on_last_name" ON "people" USING #{type} ("last_name"))
4448
assert_equal expected, add_index(:people, :last_name, using: type)

0 commit comments

Comments
 (0)