diff options
author | Sean Scally <sean.scally@gmail.com> | 2012-05-14 14:47:25 -0500 |
---|---|---|
committer | Sean Scally <sean.scally@gmail.com> | 2012-05-14 14:47:25 -0500 |
commit | 3188f81199bdfa0d1660c4e2664d822544f9e04e (patch) | |
tree | 00d8ee067654af4c45e736330aa56ff95c3f9d25 | |
parent | c5bcb0de6b5a805a3c9556684715b5cd463dc0c8 (diff) | |
download | rails-3188f81199bdfa0d1660c4e2664d822544f9e04e.tar.gz rails-3188f81199bdfa0d1660c4e2664d822544f9e04e.tar.bz2 rails-3188f81199bdfa0d1660c4e2664d822544f9e04e.zip |
Set the primary key during #copy_table if necessary. Fixes [#2312]
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/adapters/sqlite3/copy_table_test.rb | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index 44e407a561..7b4be67131 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -522,7 +522,11 @@ module ActiveRecord end def copy_table(from, to, options = {}) #:nodoc: - options = options.merge(:id => (!columns(from).detect{|c| c.name == 'id'}.nil? && 'id' == primary_key(from).to_s)) + from_primary_key = primary_key(from) + options[:primary_key] = from_primary_key if from_primary_key != 'id' + unless options[:primary_key] + options[:id] = columns(from).detect{|c| c.name == 'id'}.present? && from_primary_key == 'id' + end create_table(to, options) do |definition| @definition = definition columns(from).each do |column| diff --git a/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb b/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb index 575b4806c1..7eef4ace81 100644 --- a/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb +++ b/activerecord/test/cases/adapters/sqlite3/copy_table_test.rb @@ -57,6 +57,14 @@ class CopyTableTest < ActiveRecord::TestCase end end + def test_copy_table_with_unconventional_primary_key + test_copy_table('owners', 'owners_unconventional') do |from, to, options| + original_pk = @connection.primary_key('owners') + copied_pk = @connection.primary_key('owners_unconventional') + assert_equal original_pk, copied_pk + end + end + protected def copy_table(from, to, options = {}) @connection.copy_table(from, to, {:temporary => true}.merge(options)) |