aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorEileen M. Uchitelle <eileencodes@users.noreply.github.com>2017-12-07 07:58:21 -0500
committerGitHub <noreply@github.com>2017-12-07 07:58:21 -0500
commitbbacd60048a8efa1777a01292a9392e146a7d885 (patch)
tree8b2b0cdefaf456cf6b9461d5117bf66be3ef6552 /activerecord/lib
parente2c1d5e1d73322945c6d0477c5d8a004479e6b7a (diff)
parent5ac4f4d2563e7f9c5ffaecce4be4b9e2c5b0c081 (diff)
downloadrails-bbacd60048a8efa1777a01292a9392e146a7d885.tar.gz
rails-bbacd60048a8efa1777a01292a9392e146a7d885.tar.bz2
rails-bbacd60048a8efa1777a01292a9392e146a7d885.zip
Merge pull request #31327 from aellispierce/custom-id-change-table-sqlite
Fix sqlite migrations with custom primary keys
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb6
1 files changed, 5 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 574a7b4572..65aba20052 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -404,10 +404,11 @@ module ActiveRecord
def copy_table(from, to, options = {})
from_primary_key = primary_key(from)
+ from_primary_key_column = columns(from).select { |column| column.name == from_primary_key }.first
options[:id] = false
create_table(to, options) do |definition|
@definition = definition
- @definition.primary_key(from_primary_key) if from_primary_key.present?
+ @definition.primary_key(from_primary_key, from_primary_key_column.type) if from_primary_key.present?
columns(from).each do |column|
column_name = options[:rename] ?
(options[:rename][column.name] ||
@@ -431,6 +432,9 @@ module ActiveRecord
def copy_table_indexes(from, to, rename = {})
indexes(from).each do |index|
name = index.name
+ # indexes sqlite creates for internal use start with `sqlite_` and
+ # don't need to be copied
+ next if name.starts_with?("sqlite_")
if to == "a#{from}"
name = "t#{name}"
elsif from == "a#{to}"