Ha! So it wasn't me AND it wasn't a bug. It was MySQL being dumb (or
non-standard anyway).

I was thinking the same thing. "Shouldn't it figure I'm talking about
the primary key?"

If I don't get too overwhelmed, I'll look into that patch. It seems,
for the sake of database independent migrations, that it wouldn't be a
bad idea.

On Feb 21, 2:23 pm, Jeremy Evans <[email protected]> wrote:
> On Feb 21, 2:09 pm, cult hero <[email protected]> wrote:
>
>
>
> > I dunno if I've found a bug or... what.
>
> > I have the following migration:
>
> > create_table :assets do
> >   primary_key :id
> >   foreign_key :type_id, :types, :null => false
> >   String :name, :length => 255, :null => false
> >   String :slug, :length => 255, :null => false
> >   DateTime :date_created, :null => false
> >   DateTime :date_modified, :null => false
> >   Fixnum :precedence, :default => 1, :null => false
> >   text :description, :null => false
> >   text :notes, :null => false
> > end
>
> > The types table is already created and working fine. Here's the SQL
> > this migration generates:
>
> > CREATE TABLE `assets` (`id` integer PRIMARY KEY AUTO_INCREMENT,
> > `type_id` integer NOT NULL, FOREIGN KEY (`type_id`) REFERENCES
> > `types`, `name` varchar(255) NOT NULL, `slug` varchar(255) NOT NULL,
> > `date_created` datetime NOT NULL, `date_modified` datetime NOT NULL,
> > `precedence` integer NOT NULL DEFAULT 1, `description` text NOT NULL,
> > `notes` text NOT NULL) ENGINE=InnoDB
>
> > Unfortunately, that produces the following error:
>
> > ERROR 1005 (HY000): Can't create table './database/assets.frm' (errno:
> > 150)
>
> > The syntax should be:
>
> > CREATE TABLE `assets` (`id` integer PRIMARY KEY AUTO_INCREMENT,
> > `type_id` integer NOT NULL, FOREIGN KEY (`type_id`) REFERENCES `types`
> > (`id`), `name` varchar(255) NOT NULL, `slug` varchar(255) NOT NULL,
> > `date_created` datetime NOT NULL, `date_modified` datetime NOT NULL,
> > `precedence` integer NOT NULL DEFAULT 1, `description` text NOT NULL,
> > `notes` text NOT NULL) ENGINE=InnoDB
>
> > The difference is hard to notice, but "REFERENCES `types`" becomes
> > "REFERENCES `types` (`id`)". Am I doing something wrong in my syntax
> > or is this a bug?
>
> This isn't a bug.  The SQL standard specifies that you can use a table
> in REFERENCES without specifying column(s), and it will assume you are
> referencing the primary key of that table.  If MySQL doesn't allow
> that, then you need to use the :key option to foreign_key to specify
> the primary key.  If you want to send in a patch to the shared MySQL
> adapter to lookup the primary key of the table if a :key option is not
> specified, I'd consider it.
>
> Jeremy
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
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