Methods
S
T
Attributes
[R] connection
[R] table_name
Instance Public methods
setup()
# File activerecord/test/cases/migration/index_test.rb, line 8
def setup
  super
  @connection = ActiveRecord::Base.connection
  @table_name = :testings

  connection.create_table table_name do |t|
    t.column :foo, :string, :limit => 100
    t.column :bar, :string, :limit => 100

    t.string :first_name
    t.string :last_name, :limit => 100
    t.string :key,       :limit => 100
    t.boolean :administrator
  end
end
test_add_index()
# File activerecord/test/cases/migration/index_test.rb, line 142
def test_add_index
  connection.add_index("testings", "last_name")
  connection.remove_index("testings", "last_name")

  connection.add_index("testings", ["last_name", "first_name"])
  connection.remove_index("testings", :column => ["last_name", "first_name"])

  # Oracle adapter cannot have specified index name larger than 30 characters
  # Oracle adapter is shortening index name when just column list is given
  unless current_adapter?(:OracleAdapter)
    connection.add_index("testings", ["last_name", "first_name"])
    connection.remove_index("testings", :name => :index_testings_on_last_name_and_first_name)
    connection.add_index("testings", ["last_name", "first_name"])
    connection.remove_index("testings", "last_name_and_first_name")
  end
  connection.add_index("testings", ["last_name", "first_name"])
  connection.remove_index("testings", ["last_name", "first_name"])

  connection.add_index("testings", ["last_name"], :length => 10)
  connection.remove_index("testings", "last_name")

  connection.add_index("testings", ["last_name"], :length => {:last_name => 10})
  connection.remove_index("testings", ["last_name"])

  connection.add_index("testings", ["last_name", "first_name"], :length => 10)
  connection.remove_index("testings", ["last_name", "first_name"])

  connection.add_index("testings", ["last_name", "first_name"], :length => {:last_name => 10, :first_name => 20})
  connection.remove_index("testings", ["last_name", "first_name"])

  connection.add_index("testings", ["key"], :name => "key_idx", :unique => true)
  connection.remove_index("testings", :name => "key_idx", :unique => true)

  connection.add_index("testings", %w(last_name first_name administrator), :name => "named_admin")
  connection.remove_index("testings", :name => "named_admin")

  # Selected adapters support index sort order
  if current_adapter?(:SQLite3Adapter, :MysqlAdapter, :Mysql2Adapter, :PostgreSQLAdapter)
    connection.add_index("testings", ["last_name"], :order => {:last_name => :desc})
    connection.remove_index("testings", ["last_name"])
    connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc})
    connection.remove_index("testings", ["last_name", "first_name"])
    connection.add_index("testings", ["last_name", "first_name"], :order => {:last_name => :desc, :first_name => :asc})
    connection.remove_index("testings", ["last_name", "first_name"])
    connection.add_index("testings", ["last_name", "first_name"], :order => :desc)
    connection.remove_index("testings", ["last_name", "first_name"])
  end
end
test_add_index_attribute_length_limit()
# File activerecord/test/cases/migration/index_test.rb, line 136
def test_add_index_attribute_length_limit
  connection.add_index :testings, [:foo, :bar], :length => {:foo => 10, :bar => nil}

  assert connection.index_exists?(:testings, [:foo, :bar])
end
test_add_index_does_not_accept_too_long_index_names()
# File activerecord/test/cases/migration/index_test.rb, line 71
def test_add_index_does_not_accept_too_long_index_names
  too_long_index_name = good_index_name + 'x'

  e = assert_raises(ArgumentError) {
    connection.add_index(table_name, "foo", name: too_long_index_name)
  }
  assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)

  assert_not connection.index_name_exists?(table_name, too_long_index_name, false)
  connection.add_index(table_name, "foo", :name => good_index_name)
end
test_add_index_works_with_long_index_names()
# File activerecord/test/cases/migration/index_test.rb, line 64
def test_add_index_works_with_long_index_names
  connection.add_index(table_name, "foo", name: good_index_name)

  assert connection.index_name_exists?(table_name, good_index_name, false)
  connection.remove_index(table_name, name: good_index_name)
end
test_add_partial_index()
# File activerecord/test/cases/migration/index_test.rb, line 192
def test_add_partial_index
  connection.add_index("testings", "last_name", :where => "first_name = 'john doe'")
  assert connection.index_exists?("testings", "last_name")

  connection.remove_index("testings", "last_name")
  assert !connection.index_exists?("testings", "last_name")
end
test_double_add_index()
# File activerecord/test/cases/migration/index_test.rb, line 53
def test_double_add_index
  connection.add_index(table_name, [:foo], :name => 'some_idx')
  assert_raises(ArgumentError) {
    connection.add_index(table_name, [:foo], :name => 'some_idx')
  }
end
test_index_exists()
# File activerecord/test/cases/migration/index_test.rb, line 99
def test_index_exists
  connection.add_index :testings, :foo

  assert connection.index_exists?(:testings, :foo)
  assert !connection.index_exists?(:testings, :bar)
end
test_index_exists_on_multiple_columns()
# File activerecord/test/cases/migration/index_test.rb, line 106
def test_index_exists_on_multiple_columns
  connection.add_index :testings, [:foo, :bar]

  assert connection.index_exists?(:testings, [:foo, :bar])
end
test_index_exists_with_custom_name_checks_columns()
# File activerecord/test/cases/migration/index_test.rb, line 112
def test_index_exists_with_custom_name_checks_columns
  connection.add_index :testings, [:foo, :bar], name: "my_index"
  assert connection.index_exists?(:testings, [:foo, :bar], name: "my_index")
  assert_not connection.index_exists?(:testings, [:foo], name: "my_index")
end
test_index_symbol_names()
# File activerecord/test/cases/migration/index_test.rb, line 91
def test_index_symbol_names
  connection.add_index table_name, :foo, :name => :symbol_index_name
  assert connection.index_exists?(table_name, :foo, :name => :symbol_index_name)

  connection.remove_index table_name, :name => :symbol_index_name
  assert_not connection.index_exists?(table_name, :foo, :name => :symbol_index_name)
end
test_internal_index_with_name_matching_database_limit()
# File activerecord/test/cases/migration/index_test.rb, line 83
def test_internal_index_with_name_matching_database_limit
  good_index_name = 'x' * connection.index_name_length
  connection.add_index(table_name, "foo", name: good_index_name, internal: true)

  assert connection.index_name_exists?(table_name, good_index_name, false)
  connection.remove_index(table_name, name: good_index_name)
end
test_named_index_exists()
# File activerecord/test/cases/migration/index_test.rb, line 130
def test_named_index_exists
  connection.add_index :testings, :foo, :name => "custom_index_name"

  assert connection.index_exists?(:testings, :foo, :name => "custom_index_name")
end
test_remove_nonexistent_index()
# File activerecord/test/cases/migration/index_test.rb, line 60
def test_remove_nonexistent_index
  assert_raise(ArgumentError) { connection.remove_index(table_name, "no_such_index") }
end
test_rename_index()
# File activerecord/test/cases/migration/index_test.rb, line 29
def test_rename_index
  # keep the names short to make Oracle and similar behave
  connection.add_index(table_name, [:foo], :name => 'old_idx')
  connection.rename_index(table_name, 'old_idx', 'new_idx')

  # if the adapter doesn't support the indexes call, pick defaults that let the test pass
  assert_not connection.index_name_exists?(table_name, 'old_idx', false)
  assert connection.index_name_exists?(table_name, 'new_idx', true)
end
test_rename_index_too_long()
# File activerecord/test/cases/migration/index_test.rb, line 39
def test_rename_index_too_long
  too_long_index_name = good_index_name + 'x'
  # keep the names short to make Oracle and similar behave
  connection.add_index(table_name, [:foo], :name => 'old_idx')
  e = assert_raises(ArgumentError) {
    connection.rename_index(table_name, 'old_idx', too_long_index_name)
  }
  assert_match(/too long; the limit is #{connection.allowed_index_name_length} characters/, e.message)

  # if the adapter doesn't support the indexes call, pick defaults that let the test pass
  assert connection.index_name_exists?(table_name, 'old_idx', false)
end
test_unique_index_exists()
# File activerecord/test/cases/migration/index_test.rb, line 124
def test_unique_index_exists
  connection.add_index :testings, :foo, :unique => true

  assert connection.index_exists?(:testings, :foo, :unique => true)
end
test_valid_index_options()
# File activerecord/test/cases/migration/index_test.rb, line 118
def test_valid_index_options
  assert_raise ArgumentError do
    connection.add_index :testings, :foo, unqiue: true
  end
end