Class::DBI::Plugin使ってみた

超てきとー


package Class::DBI::Plugin::FastDelete;
use strict;
use warnings;
use base 'Class::DBI::Plugin';
use vars qw($VERSION);
$VERSION = 0.02;
use SQL::Abstract;
sub import {
my $pkg = caller(0);
$pkg->mk_classdata('_fast_delete');
goto &Class::DBI::Plugin::import;
}
sub fast_delete : Plugged {
my $class = shift;
my $where = (ref $_[0]) ? $_[0] : { @_ };
unless ( $class->_fast_delete ){
$class->_fast_delete(SQL::Abstract->new);
}
my ($stmt, @bind) = $class->_fast_delete->delete($class->table,$where);
my $sth;
eval { $sth = $class->db_Main->prepare($stmt) };
if ($@) {
return $class->_db_error(
msg => "Can't delete $class: $@",
err => $@,
method => 'delete_fast',
);
}
eval { $sth->execute(@bind) };
if ($@) {
return $class->_db_error(
msg => "Can't delete $class: $@",
err => $@,
method => 'delete_fast',
);
}
return 1;
}
1;

initつかうべきカモ