diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2015-10-11 18:12:23 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2015-10-11 18:12:23 +0900 |
commit | 11fc84c0137408c22222925f8e16a4e28a60c9c5 (patch) | |
tree | 960004e6aa1f72aac364b7bb02a4099f67f85842 /activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb | |
parent | 5d5de61f452faed47e6d5442a834d5f884b7e40b (diff) | |
download | rails-11fc84c0137408c22222925f8e16a4e28a60c9c5.tar.gz rails-11fc84c0137408c22222925f8e16a4e28a60c9c5.tar.bz2 rails-11fc84c0137408c22222925f8e16a4e28a60c9c5.zip |
Move schema creation class into `mysql/schema_creation.rb`
Current master branch includes many schema creation improvements in
MySQL. It extract these features to the appropriate file.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb b/activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb new file mode 100644 index 0000000000..1e2c859af9 --- /dev/null +++ b/activerecord/lib/active_record/connection_adapters/mysql/schema_creation.rb @@ -0,0 +1,57 @@ +module ActiveRecord + module ConnectionAdapters + module MySQL + class SchemaCreation < AbstractAdapter::SchemaCreation + private + + def visit_DropForeignKey(name) + "DROP FOREIGN KEY #{name}" + end + + def visit_ColumnDefinition(o) + o.sql_type = type_to_sql(o.type, o.limit, o.precision, o.scale, o.unsigned) + super + end + + def visit_AddColumnDefinition(o) + add_column_position!(super, column_options(o.column)) + end + + def visit_ChangeColumnDefinition(o) + change_column_sql = "CHANGE #{quote_column_name(o.name)} #{accept(o.column)}" + add_column_position!(change_column_sql, column_options(o.column)) + end + + def column_options(o) + column_options = super + column_options[:charset] = o.charset + column_options + end + + def add_column_options!(sql, options) + if options[:charset] + sql << " CHARACTER SET #{options[:charset]}" + end + if options[:collation] + sql << " COLLATE #{options[:collation]}" + end + super + end + + def add_column_position!(sql, options) + if options[:first] + sql << " FIRST" + elsif options[:after] + sql << " AFTER #{quote_column_name(options[:after])}" + end + sql + end + + def index_in_create(table_name, column_name, options) + index_name, index_type, index_columns, _, _, index_using = @conn.add_index_options(table_name, column_name, options) + "#{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns}) " + end + end + end + end +end |