On Thursday, October 25, 2012 8:39:40 AM UTC-7, Jeremy Evans wrote:
>
> On Thursday, October 25, 2012 6:00:22 AM UTC-7, Kartik Rustagi wrote:
>>
>> Hi,
>>
>> I have a table A with a column 'abc' which I want to rename to 'xyz'. 
>> Column 'abc' being primary key. I have written the following migration to 
>> do so:
>>
>> *alter_table :A do*
>> *   rename_column(:abc, :xyz)*
>> *end*
>> *This migration fails with the error: ERROR 1068 (42000): Multiple 
>> primary key defined*
>> *Mysql logs shows the query being: ALTER TABLE `A` CHANGE COLUMN `abc` 
>> `xyz` int(11) NOT NULL PRIMARY KEY*
>>
>>
>> I reckon this is because we add 'PRIMARY KEY' constraint to alter table 
>> statement. How can I avoid this?
>>
>
> The rename_column stuff on MySQL probably needs to be modified to not add 
> the PRIMARY KEY syntax.  Would be nice if MySQL supported renaming columns 
> directly instead of attempting to emulate it with CHANGE COLUMN.  You may 
> want to try this untested patch:
>
> diff --git a/lib/sequel/adapters/shared/mysql.rb 
> b/lib/sequel/adapters/shared/mysql.rb
> index 5515a03..3114cdf 100644
> --- a/lib/sequel/adapters/shared/mysql.rb
> +++ b/lib/sequel/adapters/shared/mysql.rb
> @@ -195,6 +195,7 @@ module Sequel
>            opts[:null] = o == :set_column_null ? op[:null] : 
> opts[:allow_null]
>            opts[:default] = o == :set_column_default ? op[:default] : 
> opts[:ruby_default]
>            opts.delete(:default) if opts[:default] == nil
> +          opts.delete(:primary_key) if op[:op] == :rename_column
>            "CHANGE COLUMN #{quote_identifier(op[:name])} 
> #{column_definition_sql(op.merge(opts))}"
>          when :drop_constraint
>            type = case op[:type]
>
> I'll test that later and see how it works.
>

This appears to work fine in my testing, so I've pushed it to GitHub.

Jeremy 

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/sequel-talk/-/wY2ZmwoEjNsJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=en.

Reply via email to