aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
diff options
context:
space:
mode:
authorEmili Parreno <emili@eparreno.com>2010-05-08 12:35:39 +0100
committerPratik Naik <pratiknaik@gmail.com>2010-05-08 12:39:46 +0100
commit5b95730edc33ee97f53da26a3868eb983305a771 (patch)
treeec4f10dd6d8c2048b1a6770d62bb11fc6bfd0702 /activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
parent9aaef5935660ba13531512fb7def4b8bdf14511d (diff)
downloadrails-5b95730edc33ee97f53da26a3868eb983305a771.tar.gz
rails-5b95730edc33ee97f53da26a3868eb983305a771.tar.bz2
rails-5b95730edc33ee97f53da26a3868eb983305a771.zip
Add index length support for MySQL [#1852 state:resolved]
Example: add_index(:accounts, :name, :name => 'by_name', :length => 10) => CREATE INDEX by_name ON accounts(name(10)) add_index(:accounts, [:name, :surname], :name => 'by_name_surname', :length => {:name => 10, :surname => 15}) => CREATE INDEX by_name_surname ON accounts(name(10), surname(15)) Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql_adapter.rb15
1 files changed, 14 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index 55d9d20bb5..470ff8d767 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -461,10 +461,11 @@ module ActiveRecord
if current_index != row[2]
next if row[2] == "PRIMARY" # skip the primary key
current_index = row[2]
- indexes << IndexDefinition.new(row[0], row[2], row[1] == "0", [])
+ indexes << IndexDefinition.new(row[0], row[2], row[1] == "0", [], [])
end
indexes.last.columns << row[4]
+ indexes.last.lengths << row[7]
end
result.free
indexes
@@ -594,6 +595,18 @@ module ActiveRecord
end
protected
+ def quoted_columns_for_index(column_names, options = {})
+ length = options[:length] if options.is_a?(Hash)
+
+ quoted_column_names = case length
+ when Hash
+ column_names.map {|name| length[name] ? "#{quote_column_name(name)}(#{length[name]})" : quote_column_name(name) }
+ when Fixnum
+ column_names.map {|name| "#{quote_column_name(name)}(#{length})"}
+ else
+ column_names.map {|name| quote_column_name(name) }
+ end
+ end
def translate_exception(exception, message)
return super unless exception.respond_to?(:errno)