> create_table :subscribers, :primary_key => :nick do |t|
>  ...
> end

Unless I'm being a total idiot in reading the code, this creates an integer
based primary key column and doesn't allow an arbitrary primary key column
like in the example I provided.

Bob Silva
http://www.railtie.net/


> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:rails-core-
> [EMAIL PROTECTED] On Behalf Of Corey Donohoe
> Sent: Wednesday, March 01, 2006 7:24 PM
> To: rails-core@lists.rubyonrails.org
> Subject: Re: [Rails-core] Converting AR Test Suite to use AR::Schema -
> Feedback needed
> 
> On 3/1/06, Bob Silva <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > I'm working on converting the test suite over to AR::Schema.
> > I'm finding there are a lot of barriers to doing this due to somewhat
> > limited customization support in AR::Schema.
> >
> > Here are some ideas (some implemented already) to extend AR::Schema, but
> > still keep it (relatively) true to its original design.
> >
> > Foreign Key Support (MySQL in this instance):
> >
> > create_table(:accounts) do |t|
> >   t.column :company_id, :integer, :null => false, :foreign_key_table =>
> > :companies
> > end
> >
> > =>
> >
> > create table accounts (
> >   id int(11) not null auto_increment primary key,
> >   company_id int(11) not null foreign key (`company_id`) references
> > `companies`(`id`)
> > )
> >
> > I've got this working great for all adapters already. Though not shown
> here,
> > you can also pass :foreign_key_column for non-standard primary key
> column
> > names.
> >
> 
> there's a plugin that requires some hacking but it's a decent approach
> to supporting foreign keys.  I mentioned on IRC i'd be down to workout
> a plugin for this.
> 
> http://wiki.rubyonrails.com/rails/pages/Foreign+Key+Schema+Dumper+Plugin
> 
> >
> > Since there are times where it doesn't make sense for AR::Schema to
> support
> > a specific column type/definition, what are your ideas on this (from the
> > postgres.sql):
> >
> > CREATE TABLE geometrics (
> >   id serial primary key,
> >   a_point point,
> >   a_line_segment lseg,
> >   ...
> > );
> >
> > Can be generated as such:
> >
> > create_table(:geometrics) do |t|
> >   t.column :a_point, :custom, :type => "point default (1,3)",
> >   t.column :a_line_segment, :custom, :type => "lseg",
> >   ...
> > end
> 
> I think :custom would make for a cool plugin but something seems
> awkward about it to me.  I don't know why. :)
> 
> >
> > The keywords ":custom and :type" aren't important here, the concept is.
> > ":describe and :description", ":define and :definition" are
> alternatives.
> > I think this would be a nice addition, but it depends on how pure you
> want
> > to be, personally I lost all my pureness from years of PHP programming.
> >
> > Wait, there's more...
> >
> > Most adapters create an auto incrementing column differently. Some are
> built
> > into the primary key column definition (MySQL, SQL Server), others use
> > explicit sequences, others use functions etc.. combine this with the
> > ability/desire to set the starting sequence number and it gets all
> messed up
> > (which most of the AR unit tests schemas do).
> > While there are no elegant solutions, I do believe its possible to
> support
> > all adapters, by adding an empty create_sequence method in `module
> > SchemaStatements` and have the adapters create their own if needed. To
> > handle setting the start value, here's one idea:
> >
> 
> I dig the idea of specifying a start sequence, I'm doing this in a
> round about way at work currently. :(
> 
> > create_sequence(:accounts, :name => 'public.account_id_seq', :start =>
> 100)
> > create_table(:accounts) do |t|
> > ...
> > end
> >
> >
> > Which adds whatever method the adaptor needs to implement the auto-
> increment
> > column and set the start value. Some do it on the primary key column
> > definition (SQL Server), some call a separate function (PGSQL), MySQL
> adds
> > it as a table option after the closing ) etc. Option B for this one
> would be
> > to change all the AR unit tests to not require the non-standard start
> > sequence.
> >
> > And more...
> >
> > Primary Keys. While the convention is certainly to have an
> auto_incrementing
> > integer primary key column, even the AR unit tests have table
> definitions
> > with string based primary keys and some db_definitions have multi-column
> PKs
> > defined. AR::Schema already has the ability to turn off auto generation
> of
> > the primary key, I also propose a method to add an explicit PRIMARY KEY
> > (column), for example, from an existing test fixture:
> >
> > create_table :subscribers do |t|
> >   t.column :nick, :string, :limit => 100, :null => false
> >   t.column :name, :string, :limit => 100
> >   t.add_primary_key :nick
> > end
> >
> create_table :subscribers, :primary_key => :nick do |t|
>  ...
> end
> 
> > =>
> >
> > CREATE TABLE `subscribers` (
> >   `nick` varchar(100) NOT NULL,
> >   `name` varchar(100) default NULL,
> >   PRIMARY KEY (`nick`)
> > ) TYPE=InnoDB;
> >
> > t.add_primary_key(:categories, :posts) would generate a multi-column pk
> 
> While I don't personally like composite keys maybe something like
> create_table :articles, :primary_key => [:categories, :posts] do |t|
>  ..
> end
> 
> >
> > While there are a ton more issues to deal with, I'll save those for
> later to
> > not cloud these issues since these are the bigger ones I/we would need
> to
> > tackle to achieve moving the unit tests to AR::Schema.
> >
> > I await your ideas/comments.
> >
> > Thanks,
> >
> > Bob Silva
> > http://www.railtie.net/
> >
> >
> >
> > _______________________________________________
> > Rails-core mailing list
> > Rails-core@lists.rubyonrails.org
> > http://lists.rubyonrails.org/mailman/listinfo/rails-core
> >
> 
> 
> --
> Corey Donohoe
> http://www.atmos.org/
> [EMAIL PROTECTED]
> _______________________________________________
> Rails-core mailing list
> Rails-core@lists.rubyonrails.org
> http://lists.rubyonrails.org/mailman/listinfo/rails-core

_______________________________________________
Rails-core mailing list
Rails-core@lists.rubyonrails.org
http://lists.rubyonrails.org/mailman/listinfo/rails-core

Reply via email to