method
indexes
v5.2.3 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::MySQL::SchemaStatements
indexes(table_name)public
Returns an array of indexes for the given table.
# File activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb, line 8
def indexes(table_name)
indexes = []
current_index = nil
execute_and_free("SHOW KEYS FROM #{quote_table_name(table_name)}", "SCHEMA") do |result|
each_hash(result) do |row|
if current_index != row[:Key_name]
next if row[:Key_name] == "PRIMARY" # skip the primary key
current_index = row[:Key_name]
mysql_index_type = row[:Index_type].downcase.to_sym
case mysql_index_type
when :fulltext, :spatial
index_type = mysql_index_type
when :btree, :hash
index_using = mysql_index_type
end
indexes << [
row[:Table],
row[:Key_name],
row[:Non_unique].to_i == 0,
[],
lengths: {},
orders: {},
type: index_type,
using: index_using,
comment: row[:Index_comment].presence
]
end
indexes.last[-2] << row[:Column_name]
indexes.last[-1][:lengths].merge!(row[:Column_name] => row[:Sub_part].to_i) if row[:Sub_part]
indexes.last[-1][:orders].merge!(row[:Column_name] => :desc) if row[:Collation] == "D"
end
end
indexes.map { |index| IndexDefinition.new(*index) }
end Related methods
- Instance methods
- create_schema_dumper
- indexes
- internal_string_options_for_primary_key
- remove_column
- update_table_definition
- Private methods
-
add_index_length -
add_options_for_index_columns -
create_table_definition -
data_source_sql -
extract_foreign_key_action -
extract_schema_qualified_name -
fetch_type_metadata -
new_column_from_field -
quoted_scope -
schema_creation