[Dbix-class] ok - opening salvo of questions!
Corey
corey at bitworthy.net
Sun Oct 29 20:25:47 GMT 2006
Mainly concerning DBIx::Class::ResultSource::add_columns(), and
SQL::Translator::Producer::DBIx::Class::File .
I created a pretty simple db (w/ postgresql ) call it 'MyDB'. I'll provide
a tiny snippet of the portions relevant to my questions:
CREATE TABLE animal (
id serial NOT NULL,
species_binomial varchar NOT NULL,
varchar NOT NULL,
);
CREATE TABLE animal_species (
binomial varchar NOT NULL,
common_name varchar NOT NULL
);
ALTER TABLE ONLY animal
ADD CONSTRAINT "animal_pkey" PRIMARY KEY (id);
ALTER TABLE ONLY animal_species
ADD CONSTRAINT "animal_species_pkey" PRIMARY KEY (binomial);
ALTER TABLE ONLY animal
ADD CONSTRAINT "animal_species_binomial_fkey" FOREIGN KEY (species_binomial) REFERENCES animal_species(binomial);
I then used sqlt to spit out a "MyDB.pm":
sqlt --trace --from DBI --dsn dbi:Pg:dbname=MyDB \
--db-user whatever --db-password whatever \
--to DBIx::Class::File --prefix "MyDB" > MyDB.pm
... and this is where the questions started to roll in:
package MyDB::Animal;
#<snip>
__PACKAGE__->add_columns(
'id' => {
'data_type' => 'integer',
'is_auto_increment' => 0,
'default_value' => 'nextval(\'animal_id_seq\'::regclass)',
'is_foreign_key' => 0,
'name' => 'id',
'is_nullable' => 0,
'size' => '4'
},
'species_binomial' => {
'data_type' => 'character varying',
'is_auto_increment' => 0,
'default_value' => undef,
'is_foreign_key' => 0,
'name' => 'species_binomial',
'is_nullable' => 0,
'size' => 0
},
#<snip>
};
Question #1:
As you can see above, first off, the relations weren't created - i.e., {'species_binomial'}->{'is_foreign_key'}
was set to 0; in addition, no __PACKAGE__->set_primary_key() was defined within the package, nor was
there defined an add_relationship().
Is that due to the fact that sqlt needs foreign/primary key definitions to be held/defined with the
CREATE TABLE, and using ALTER TABLE will not work? Or is something else amiss?
Question #2:
After browsing through the ResultSource perldoc, I see that many of those attributes defined within
add_columns() were included by sqlt/DBIx::Class::File, but are not actually used by DBIx::Class: i.e,
default_value, is_foreign_key, name, is_nullable, size. Additionaly, some attributes that _are_ used
by DBIx::Class, were _not_ set: i.e., accessor, sequence.
Should I keep the unused attributes around for any reason, or delete them?
Does 'accessor' functionally replace 'name', and does 'sequence' functionally replace 'default_value'?
Question #3:
Do I need to use add_relationship() in order to define foreign keys?
Question #4:
Am I simply missing something regarding the correct usage of sqlt?
Many thanks!
More information about the Dbix-class
mailing list