Class::DBI::Plugin::FastDelete - Add to Class::DBI for more fast delete method.


Class-DBI-Plugin-FastDelete documentation Contained in the Class-DBI-Plugin-FastDelete distribution.

Index


Code Index:

NAME

Top

Class::DBI::Plugin::FastDelete - Add to Class::DBI for more fast delete method.

VERSION

Top

This documentation refers to Class::DBI::Plugin::FastDelete version 0.01

SYNOPSIS

Top

  package Your::CD;
  use base 'Class::DBI';
  use Class::DBI::Plugin::FastDelete;

  ............

  Your::CD->fast_delete( artist => 'Green Day' );

DESCRIPTION

Top

This Plugin provide to Class::DBI for more fast delete method. fast_delete method can't use trigger. Instead its fast!

EXPORT

Top

fast_delete

fast_delete method provide more fast delete method.

DEPENDENCIES

Top

SQL::Abstract

Class::DBI

SEE ALSO

Top

SQL::Abstract

Class::DBI

BUGS AND LIMITATIONS

Top

There are no known bugs in this module. Please report problems to Atsushi Kobayashi (<nekokak@cpan.org>) Patches are welcome.

AUTHOR

Top

Atsushi Kobayashi, <nekokak@cpan.org>

COPYRIGHT AND LICENSE

Top


Class-DBI-Plugin-FastDelete documentation Contained in the Class-DBI-Plugin-FastDelete distribution.

package Class::DBI::Plugin::FastDelete;

use strict;
use warnings;
use vars qw($VERSION @EXPORT);
require Exporter;

@EXPORT = qw(fast_delete);
$VERSION = 0.01;

use SQL::Abstract;

sub import {
    my $pkg = caller(0);
    $pkg->mk_classdata('_fast_delete');
    goto &Exporter::import;
}

sub fast_delete {
    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;
__END__