DBIx::Class::Exception - Exception objects for DBIx::Class


DBIx-Class documentation Contained in the DBIx-Class distribution.

Index


Code Index:

NAME

Top

DBIx::Class::Exception - Exception objects for DBIx::Class

DESCRIPTION

Top

Exception objects of this class are used internally by the default error handling of throw_exception in DBIx::Class::Schema and derivatives.

These objects stringify to the contained error message, and use overload fallback to give natural boolean/numeric values.

METHODS

Top

throw

Arguments: $exception_scalar, $stacktrace

This is meant for internal use by DBIx::Class's throw_exception code, and shouldn't be used directly elsewhere.

Expects a scalar exception message. The optional argument $stacktrace tells it to output a full trace similar to confess in Carp.

  DBIx::Class::Exception->throw('Foo');
  try { ... } catch { DBIx::Class::Exception->throw(shift) }

rethrow

This method provides some syntactic sugar in order to re-throw exceptions.

AUTHORS

Top

Brandon L. Black <blblack@gmail.com>

LICENSE

Top

You may distribute this code under the same terms as Perl itself.


DBIx-Class documentation Contained in the DBIx-Class distribution.
package DBIx::Class::Exception;

use strict;
use warnings;

use DBIx::Class::Carp ();

use overload
    '""' => sub { shift->{msg} },
    fallback => 1;

sub throw {
    my ($class, $msg, $stacktrace) = @_;

    # Don't re-encapsulate exception objects of any kind
    die $msg if ref($msg);

    # all exceptions include a caller
    $msg =~ s/\n$//;

    if(!$stacktrace) {
        # skip all frames that match the original caller, or any of
        # the dbic-wide classdata patterns
        my ($ln, $calling) = DBIx::Class::Carp::__find_caller(
          '^' . caller() . '$',
          'DBIx::Class',
        );

        $msg = "${calling}${msg} ${ln}\n";
    }
    else {
        $msg = Carp::longmess($msg);
    }

    my $self = { msg => $msg };
    bless $self => $class;

    die $self;
}

sub rethrow {
    die shift;
}

1;