Permalink
Browse files

Merge pull request #13597 from prathamesh-sonpatki/hstore_migration

Make change_table use object of current database adapter
Conflicts:
	activerecord/CHANGELOG.md
	activerecord/test/cases/adapters/postgresql/hstore_test.rb
  • Loading branch information...
1 parent 3307346 commit aa887c141deb82ee50b971dc1d52082cd7d98f91 @senny senny committed with rafaelfranca Jan 7, 2014
@@ -3,6 +3,15 @@
*Dylan Thacker-Smith*
+* `change_table` now uses the current adapter's `update_table_definition`
+ method to retrieve a specific table definition.
+ This ensures that `change_table` and `create_table` will use
+ similar objects.
+
+ Fixes #13577 and #13503.
+
+ *Nishant Modak*, *Prathamesh Sonpatki*, *Rafael Mendonça França*
+
* Fixed ActiveRecord::Store nil conversion TypeError when using YAML coder.
In case the YAML passed as paramter is nil, uses an empty string.
@@ -719,7 +719,7 @@ def distinct(columns, order_by)
# require the order columns appear in the SELECT.
#
# columns_for_distinct("posts.id", ["posts.created_at desc"])
- def columns_for_distinct(columns, orders) # :nodoc:
+ def columns_for_distinct(columns, orders) #:nodoc:
columns
end
@@ -741,6 +741,10 @@ def remove_timestamps(table_name)
remove_column table_name, :created_at
end
+ def update_table_definition(table_name, base) #:nodoc:
+ Table.new(table_name, base)
+ end
+
protected
def add_index_sort_order(option_strings, column_names, options = {})
if options.is_a?(Hash) && order = options[:order]
@@ -873,10 +877,6 @@ def create_table_definition(name, temporary, options)
def create_alter_table(name)
AlterTable.new create_table_definition(name, false, {})
end
-
- def update_table_definition(table_name, base)
- Table.new(table_name, base)
- end
end
end
end
@@ -714,6 +714,10 @@ def valid_type?(type)
!native_database_types[type].nil?
end
+ def update_table_definition(table_name, base) #:nodoc:
+ Table.new(table_name, base)
+ end
+
protected
# Returns the version of the connected PostgreSQL server.
@@ -776,7 +780,7 @@ def initialize_type_map
end
end
- FEATURE_NOT_SUPPORTED = "0A000" # :nodoc:
+ FEATURE_NOT_SUPPORTED = "0A000" #:nodoc:
def exec_no_cache(sql, binds)
@connection.async_exec(sql)
@@ -955,10 +959,6 @@ def extract_table_ref_from_insert_sql(sql)
def create_table_definition(name, temporary, options)
TableDefinition.new native_database_types, name, temporary, options
end
-
- def update_table_definition(table_name, base)
- Table.new(table_name, base)
- end
end
end
end
@@ -86,7 +86,7 @@ def #{method}(*args, &block) # def create_table(*args, &block)
alias :remove_belongs_to :remove_reference
def change_table(table_name, options = {})
- yield ConnectionAdapters::Table.new(table_name, self)
+ yield delegate.update_table_definition(table_name, self)
end
private
@@ -158,9 +158,11 @@ def invert_remove_index(args)
# Forwards any missing method call to the \target.
def method_missing(method, *args, &block)
- @delegate.send(method, *args, &block)
- rescue NoMethodError => e
- raise e, e.message.sub(/ for #<.*$/, " via proxy for #{@delegate}")
+ if @delegate.respond_to?(method)
+ @delegate.send(method, *args, &block)
+ else
+ super
+ end
end
end
end
@@ -70,6 +70,24 @@ def test_change_table_supports_hstore
Hstore.reset_column_information
end
+ def test_hstore_migration
+ hstore_migration = Class.new(ActiveRecord::Migration) do
+ def change
+ change_table("hstores") do |t|
+ t.hstore :keys
+ end
+ end
+ end
+
+ hstore_migration.new.suppress_messages do
+ hstore_migration.migrate(:up)
+ assert_includes @connection.columns(:hstores).map(&:name), "keys"
+ hstore_migration.migrate(:down)
+ assert_not_includes @connection.columns(:hstores).map(&:name), "keys"
+ end
+ end
+
+
def test_type_cast_hstore
assert @column
@@ -4,7 +4,8 @@ module ActiveRecord
class Migration
class CommandRecorderTest < ActiveRecord::TestCase
def setup
- @recorder = CommandRecorder.new
+ connection = ActiveRecord::Base.connection
+ @recorder = CommandRecorder.new(connection)
end
def test_respond_to_delegates

0 comments on commit aa887c1

Please sign in to comment.