Sqlite adapter's copy_table should not set :id => true if :id is not a primary key.
We had a legacy table with a string id. Changing the table was not a good option, according to people more important than me. We had to maintain this structure in development, so created an id column that was not a primary_key.
Later I tried to call: remove_column :table, :value
And upon calling remove_column, the whole thing blew up. When SQLiteAdapter tried to call copy_table, it set :id => true and wrote over the original id column.
The patch will set :id => false if there is an :id column, but it's not a primary_key.