diff options
author | Dan McClain <git@danmcclain.net> | 2013-03-25 22:41:29 -0400 |
---|---|---|
committer | Dan McClain <git@danmcclain.net> | 2013-03-26 10:14:15 -0400 |
commit | 203e0e0e4a863a25fedfe6985b371c3f4cfc6839 (patch) | |
tree | a9ab67493cec101c24806cbfaf513948964943ae | |
parent | e199dc1a570d4f0d9a07628268835bce5aab2732 (diff) | |
download | rails-203e0e0e4a863a25fedfe6985b371c3f4cfc6839.tar.gz rails-203e0e0e4a863a25fedfe6985b371c3f4cfc6839.tar.bz2 rails-203e0e0e4a863a25fedfe6985b371c3f4cfc6839.zip |
Checks :algorithm argument for valid values
4 files changed, 18 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb index 35f1112798..d5ae4058ed 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -757,7 +757,13 @@ module ActiveRecord index_type = options[:unique] ? "UNIQUE" : "" index_name = options[:name].to_s if options.key?(:name) max_index_length = options.fetch(:internal, false) ? index_name_length : allowed_index_name_length - algorithm = index_algorithms[options[:algorithm]] + + if index_algorithms.key?(options[:algorithm]) + algorithm = index_algorithms[options[:algorithm]] + elsif options[:algorithm].present? + raise ArgumentError.new("Algorithm must be one of the following: #{index_algorithms.keys.map(&:inspect).join(', ')}") + end + using = "USING #{options[:using]}" if options[:using].present? if supports_partial_index? diff --git a/activerecord/test/cases/adapters/mysql/active_schema_test.rb b/activerecord/test/cases/adapters/mysql/active_schema_test.rb index ca6478f6ac..9050ae3fe3 100644 --- a/activerecord/test/cases/adapters/mysql/active_schema_test.rb +++ b/activerecord/test/cases/adapters/mysql/active_schema_test.rb @@ -47,6 +47,10 @@ class ActiveSchemaTest < ActiveRecord::TestCase expected = "CREATE INDEX `index_people_on_last_name` USING btree ON `people` (`last_name`(10)) ALGORITHM = COPY" assert_equal expected, add_index(:people, :last_name, :length => 10, using: :btree, algorithm: :copy) + assert_raise ArgumentError do + add_index(:people, :last_name, algorithm: :coyp) + end + expected = "CREATE INDEX `index_people_on_last_name_and_first_name` USING btree ON `people` (`last_name`(15), `first_name`(15)) " assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15, :using => :btree) diff --git a/activerecord/test/cases/adapters/mysql2/active_schema_test.rb b/activerecord/test/cases/adapters/mysql2/active_schema_test.rb index 9b10d23465..48d63aeef5 100644 --- a/activerecord/test/cases/adapters/mysql2/active_schema_test.rb +++ b/activerecord/test/cases/adapters/mysql2/active_schema_test.rb @@ -47,6 +47,10 @@ class ActiveSchemaTest < ActiveRecord::TestCase expected = "CREATE INDEX `index_people_on_last_name` USING btree ON `people` (`last_name`(10)) ALGORITHM = COPY" assert_equal expected, add_index(:people, :last_name, :length => 10, using: :btree, algorithm: :copy) + assert_raise ArgumentError do + add_index(:people, :last_name, algorithm: :coyp) + end + expected = "CREATE INDEX `index_people_on_last_name_and_first_name` USING btree ON `people` (`last_name`(15), `first_name`(15)) " assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15, :using => :btree) diff --git a/activerecord/test/cases/adapters/postgresql/active_schema_test.rb b/activerecord/test/cases/adapters/postgresql/active_schema_test.rb index 41e9bb912e..16329689c0 100644 --- a/activerecord/test/cases/adapters/postgresql/active_schema_test.rb +++ b/activerecord/test/cases/adapters/postgresql/active_schema_test.rb @@ -43,6 +43,9 @@ class PostgresqlActiveSchemaTest < ActiveRecord::TestCase assert_equal expected, add_index(:people, :last_name, using: type, algorithm: :concurrently) end + assert_raise ArgumentError do + add_index(:people, :last_name, algorithm: :copy) + end expected = %(CREATE UNIQUE INDEX "index_people_on_last_name" ON "people" USING gist ("last_name")) assert_equal expected, add_index(:people, :last_name, :unique => true, :using => :gist) |