mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
More exercise the create index sql tests
This commit is contained in:
parent
c8816b4d51
commit
f380c29134
4 changed files with 79 additions and 4 deletions
|
@ -934,13 +934,13 @@ module ActiveRecord
|
|||
|
||||
def add_index_options(table_name, column_name, options = {}) #:nodoc:
|
||||
column_names = Array(column_name)
|
||||
index_name = index_name(table_name, column: column_names)
|
||||
|
||||
options.assert_valid_keys(:unique, :order, :name, :where, :length, :internal, :using, :algorithm, :type)
|
||||
|
||||
index_type = options[:unique] ? "UNIQUE" : ""
|
||||
index_type = options[:type].to_s if options.key?(:type)
|
||||
index_type ||= options[:unique] ? "UNIQUE" : ""
|
||||
index_name = options[:name].to_s if options.key?(:name)
|
||||
index_name ||= index_name(table_name, column: column_names)
|
||||
max_index_length = options.fetch(:internal, false) ? index_name_length : allowed_index_name_length
|
||||
|
||||
if options.key?(:algorithm)
|
||||
|
|
|
@ -931,8 +931,9 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
def add_index_sql(table_name, column_name, options = {})
|
||||
index_name, index_type, index_columns = add_index_options(table_name, column_name, options)
|
||||
"ADD #{index_type} INDEX #{index_name} (#{index_columns})"
|
||||
index_name, index_type, index_columns, _, index_algorithm, index_using = add_index_options(table_name, column_name, options)
|
||||
index_algorithm[0, 0] = ", " if index_algorithm.present?
|
||||
"ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_algorithm}"
|
||||
end
|
||||
|
||||
def remove_index_sql(table_name, options = {})
|
||||
|
|
|
@ -59,6 +59,43 @@ class ActiveSchemaTest < ActiveRecord::TestCase
|
|||
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15, :using => :btree)
|
||||
end
|
||||
|
||||
def test_index_in_create
|
||||
def (ActiveRecord::Base.connection).table_exists?(*); false; end
|
||||
|
||||
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
|
||||
expected = "CREATE TABLE `people` (#{type} INDEX `index_people_on_last_name` (`last_name`) ) ENGINE=InnoDB"
|
||||
actual = ActiveRecord::Base.connection.create_table(:people, id: false) do |t|
|
||||
t.index :last_name, type: type
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
expected = "CREATE TABLE `people` ( INDEX `index_people_on_last_name` USING btree (`last_name`(10)) ) ENGINE=InnoDB"
|
||||
actual = ActiveRecord::Base.connection.create_table(:people, id: false) do |t|
|
||||
t.index :last_name, length: 10, using: :btree
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
def test_index_in_bulk_change
|
||||
def (ActiveRecord::Base.connection).table_exists?(*); true; end
|
||||
def (ActiveRecord::Base.connection).index_name_exists?(*); false; end
|
||||
|
||||
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
|
||||
expected = "ALTER TABLE `people` ADD #{type} INDEX `index_people_on_last_name` (`last_name`)"
|
||||
actual = ActiveRecord::Base.connection.change_table(:people, bulk: true) do |t|
|
||||
t.index :last_name, type: type
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
expected = "ALTER TABLE `peaple` ADD INDEX `index_peaple_on_last_name` USING btree (`last_name`(10)), ALGORITHM = COPY"
|
||||
actual = ActiveRecord::Base.connection.change_table(:peaple, bulk: true) do |t|
|
||||
t.index :last_name, length: 10, using: :btree, algorithm: :copy
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
def test_drop_table
|
||||
assert_equal "DROP TABLE `people`", drop_table(:people)
|
||||
end
|
||||
|
|
|
@ -59,6 +59,43 @@ class ActiveSchemaTest < ActiveRecord::TestCase
|
|||
assert_equal expected, add_index(:people, [:last_name, :first_name], :length => 15, :using => :btree)
|
||||
end
|
||||
|
||||
def test_index_in_create
|
||||
def (ActiveRecord::Base.connection).table_exists?(*); false; end
|
||||
|
||||
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
|
||||
expected = "CREATE TABLE `people` (#{type} INDEX `index_people_on_last_name` (`last_name`) ) ENGINE=InnoDB"
|
||||
actual = ActiveRecord::Base.connection.create_table(:people, id: false) do |t|
|
||||
t.index :last_name, type: type
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
expected = "CREATE TABLE `people` ( INDEX `index_people_on_last_name` USING btree (`last_name`(10)) ) ENGINE=InnoDB"
|
||||
actual = ActiveRecord::Base.connection.create_table(:people, id: false) do |t|
|
||||
t.index :last_name, length: 10, using: :btree
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
def test_index_in_bulk_change
|
||||
def (ActiveRecord::Base.connection).table_exists?(*); true; end
|
||||
def (ActiveRecord::Base.connection).index_name_exists?(*); false; end
|
||||
|
||||
%w(SPATIAL FULLTEXT UNIQUE).each do |type|
|
||||
expected = "ALTER TABLE `people` ADD #{type} INDEX `index_people_on_last_name` (`last_name`)"
|
||||
actual = ActiveRecord::Base.connection.change_table(:people, bulk: true) do |t|
|
||||
t.index :last_name, type: type
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
expected = "ALTER TABLE `peaple` ADD INDEX `index_peaple_on_last_name` USING btree (`last_name`(10)), ALGORITHM = COPY"
|
||||
actual = ActiveRecord::Base.connection.change_table(:peaple, bulk: true) do |t|
|
||||
t.index :last_name, length: 10, using: :btree, algorithm: :copy
|
||||
end
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
||||
def test_drop_table
|
||||
assert_equal "DROP TABLE `people`", drop_table(:people)
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue