[Dbix-class] InflateColumn::DateTime, inheritance,
and insert/delete problems
Steve Caldwell
info-dbic at caldwellhb.com
Wed Mar 11 02:02:23 GMT 2009
Consider the following script:
#!/usr/bin/perl
use strict;
use warnings;
# mysql>
# create database foo;
# create table foo.tblfoo (
# fooid integer not null auto_increment,
# mydate datetime,
# primary key (fooid)
# );
# grant all privileges on foo.* to foouser at localhost
# identified by 'foopassword';
use DateTime;
{
package My::Plugin::RowStuff;
sub insert {
my $self = shift;
warn "I'm going to do something before inserting";
$self->next::method(@_);
}
sub delete {
my $self = shift;
warn "I'm going to do something before deleting";
$self->next::method(@_);
}
1;
package My::SchemaBase;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
+My::Plugin::RowStuff
Core
/);
1;
package My::Schema::Foo;
use base 'My::SchemaBase';
__PACKAGE__->table('tblfoo');
__PACKAGE__->add_columns(
fooid => {},
mydate => { data_type => 'datetime' },
);
__PACKAGE__->set_primary_key('fooid');
1;
package My::Schema;
use base 'DBIx::Class::Schema';
My::Schema->load_classes(qw/Foo/);
1;
}
my $schema = My::Schema->connect(
'DBI:mysql:database=foo', 'foouser', 'foopassword'
);
my $obj = $schema->resultset('Foo')->create({
mydate => DateTime->now(),
});
$obj->delete();
exit 0;
1;
When I run this, my custom insert and delete methods in
My::Plugin::RowStuff do not get run. I can't figure out why not, but I
have identified the following:
1) removing InflateColumn::DateTime will make it work
2) removing the inheritance of My::SchemaBase will work - i.e. have
My::Schema::Foo inherit directly from DBIx::Class and call
load_components(...) in that package.
3) adding skeleton insert and delete methods to My::SchemaBase will
work, so that it now looks like:
package My::SchemaBase;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/
InflateColumn::DateTime
+My::Plugin::RowStuff
Core
/);
sub insert { shift->next::method(@_) }
sub delete { shift->next::method(@_) }
1;
As #1 and #2 aren't viable for my codebase, I'm going with the odd #3
solution. Does anyone know why InflateColumn::DateTime is exhibiting
this behavior?
Much obliged,
Steve
More information about the DBIx-Class
mailing list