[Dbix-class] DBIC with NULL Primary Key and fails

Justin Jereza justinjereza at gmail.com
Tue Dec 4 11:52:46 GMT 2007


It still doesn't work. Any ideas? I modified the following:

=== DBIx::Classes ===

package Tranquility::DB::Dict::Forenames;

use strict;
use base qw(DBIx::Class);

__PACKAGE__->load_components(qw[Core]);
__PACKAGE__->table('dict.forenames');
__PACKAGE__->add_columns(
        'id' => {
                is_auto_increment => 1,
                data_type => 'SERIAL',
                sequence => 'dict.forenames_id_seq',
        },
        'v' => {
                data_type => 'VARCHAR',
        },
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many(first_names => 'Tranquility::DB::Asm::Names', 'first');

1;

package Tranquility::DB::Dict::Families;

use strict;
use base qw(DBIx::Class);

__PACKAGE__->load_components(qw[Core]);
__PACKAGE__->table('dict.families');
__PACKAGE__->add_columns(
        'id' => {
                is_auto_increment => 1,
                data_type => 'SERIAL',
                sequence => 'dict.families_id_seq',
        },
        'v' => {
                data_type => 'VARCHAR',
        },
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many( middle_names => 'Tranquility::DB::Asm::Names', 'middle');
__PACKAGE__->has_many( last_names => 'Tranquility::DB::Asm::Names', 'last');

1;

package Tranquility::DB::Asm::Names;

use strict;
use base qw(DBIx::Class);

__PACKAGE__->load_components(qw[Core]);
__PACKAGE__->table('asm.names');
__PACKAGE__->add_columns(
        'id' => {
                is_auto_increment => 1,
                data_type => 'SERIAL',
                sequence => 'asm.names_id_seq',
        },
        'first' => {
                is_foreign_key => 1,
                data_type => 'INTEGER',
        },
        'middle' => {
                is_foreign_key => 1,
                data_type => 'INTEGER',
        },
        'last' => {
                is_foreign_key => 1,
                data_type => 'INTEGER',
        },
);
__PACKAGE__->set_primary_key(qw[id]);
__PACKAGE__->belongs_to(first_name =>
'Tranquility::DB::Dict::Forenames', 'first');
__PACKAGE__->belongs_to(middle_name =>
'Tranquility::DB::Dict::Families', 'middle');
__PACKAGE__->belongs_to(last_name => 'Tranquility::DB::Dict::Families', 'last');

1;

=== Error Log ===

SELECT me.id, me.v FROM dict.families me WHERE ( ( ( me.v = ? ) AND (
me.id IS NULL ) ) ): 'bar'
SELECT me.id, me.v FROM dict.forenames me WHERE ( ( ( me.v = ? ) AND (
me.id IS NULL ) ) ): 'foo'
SELECT me.id, me.v FROM dict.families me WHERE ( ( ( me.v = ? ) AND (
me.id IS NULL ) ) ): 'baz'
BEGIN WORK
INSERT INTO dict.families (id, v) VALUES (?, ?): 'NULL', 'bar'
DBI Exception: DBD::Pg::st execute failed: ERROR:  null value in
column "id" violates not-null constraint
 [for Statement "INSERT INTO dict.families (id, v) VALUES (?, ?)" with
ParamValues: 1=undef, 2='bar'] at
/home/justin/local/share/perl/5.8.8/DBIx/Class/Schema.pm line 940
        DBIx::Class::Schema::throw_exception('Tranquility::DB=HASH(0x852bab0)',
'DBI Exception: DBD::Pg::st execute failed: ERROR:  null value...')
called at /home/justin/local/share/perl/5.8.8/DBIx/Class/Storage.pm
line 121
        DBIx::Class::Storage::throw_exception('DBIx::Class::Storage::DBI::Pg=HASH(0x8616430)',
'DBI Exception: DBD::Pg::st execute failed: ERROR:  null value...')
called at /home/justin/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm
line 833
        DBIx::Class::Storage::DBI::__ANON__('DBD::Pg::st execute
failed: ERROR:  null value in column "id"...',
'DBI::st=HASH(0x894fc50)', 'undef') called at
/home/justin/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm line 990
        DBIx::Class::Storage::DBI::_dbh_execute('DBIx::Class::Storage::DBI::Pg=HASH(0x8616430)',
'DBI::db=HASH(0x8888074)', 'insert', 'ARRAY(0x895578c)',
'DBIx::Class::ResultSource::Table=HASH(0x85daf80)', 'HASH(0x89557c8)',
'HASH(0x89556cc)') called at
/home/justin/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm line 570
        DBIx::Class::Storage::DBI::dbh_do('DBIx::Class::Storage::DBI::Pg=HASH(0x8616430)',
'CODE(0x87d802c)', 'insert', 'ARRAY(0x895578c)',
'DBIx::Class::ResultSource::Table=HASH(0x85daf80)', 'HASH(0x89557c8)',
'HASH(0x89556cc)') called at
/home/justin/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm line
1000
        DBIx::Class::Storage::DBI::_execute('DBIx::Class::Storage::DBI::Pg=HASH(0x8616430)',
'insert', 'ARRAY(0x895578c)',
'DBIx::Class::ResultSource::Table=HASH(0x85daf80)', 'HASH(0x89557c8)',
'HASH(0x89556cc)') called at
/home/justin/local/share/perl/5.8.8/DBIx/Class/Storage/DBI.pm line
1009
        DBIx::Class::Storage::DBI::insert('DBIx::Class::Storage::DBI::Pg=HASH(0x8616430)',
'DBIx::Class::ResultSource::Table=HASH(0x85daf80)', 'HASH(0x89556cc)')
called at /home/justin/local/share/perl/5.8.8/DBIx/Class/Row.pm line
210
        DBIx::Class::Row::insert('Tranquility::DB::Dict::Families=HASH(0x8955048)')
called at /home/justin/local/share/perl/5.8.8/DBIx/Class/Row.pm line
204
        DBIx::Class::Row::insert('Tranquility::DB::Asm::Names=HASH(0x8809750)')
called at /home/justin/local/share/perl/5.8.8/DBIx/Class/ResultSet.pm
line 1615
        DBIx::Class::ResultSet::create('DBIx::Class::ResultSet=HASH(0x880960c)',
'HASH(0x88096d8)') called at DB.pl line 13
ROLLBACK



More information about the DBIx-Class mailing list