aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/migration
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-01-20 10:56:17 +0900
committerRyuta Kamizono <kamipo@gmail.com>2019-01-20 11:09:00 +0900
commit4a0e3809be480cd3e0ca503d451b966259b232e9 (patch)
tree9cec6f46802f636c04d0c3239de13a36fa6bbd96 /activerecord/lib/active_record/migration
parentdd8d37881c936d22acbc244e7e3b9b3a26e441b8 (diff)
downloadrails-4a0e3809be480cd3e0ca503d451b966259b232e9.tar.gz
rails-4a0e3809be480cd3e0ca503d451b966259b232e9.tar.bz2
rails-4a0e3809be480cd3e0ca503d451b966259b232e9.zip
Fix type casting column default in `change_column`
Since #31230, `change_column` is executed as a bulk statement. That caused incorrect type casting column default by looking up the before changed type, not the after changed type. In a bulk statement, we can't use `change_column_default_for_alter` if the statement changes the column type. This fixes the type casting to use the constructed target sql_type. Fixes #34938.
Diffstat (limited to 'activerecord/lib/active_record/migration')
-rw-r--r--activerecord/lib/active_record/migration/compatibility.rb4
1 files changed, 1 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/migration/compatibility.rb b/activerecord/lib/active_record/migration/compatibility.rb
index 8f6fcfcaea..608182e363 100644
--- a/activerecord/lib/active_record/migration/compatibility.rb
+++ b/activerecord/lib/active_record/migration/compatibility.rb
@@ -36,9 +36,7 @@ module ActiveRecord
class V5_1 < V5_2
def change_column(table_name, column_name, type, options = {})
if adapter_name == "PostgreSQL"
- clear_cache!
- sql = connection.send(:change_column_sql, table_name, column_name, type, options)
- execute "ALTER TABLE #{quote_table_name(table_name)} #{sql}"
+ super(table_name, column_name, type, options.except(:default, :null, :comment))
change_column_default(table_name, column_name, options[:default]) if options.key?(:default)
change_column_null(table_name, column_name, options[:null], options[:default]) if options.key?(:null)
change_column_comment(table_name, column_name, options[:comment]) if options.key?(:comment)