use croak instead of die for user errors.
Marcus Ramberg [Fri, 20 Jan 2006 21:23:34 +0000 (21:23 +0000)]
Changes
lib/DBIx/Class/InflateColumn.pm
lib/DBIx/Class/PK/Auto/Oracle.pm
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSource.pm
lib/DBIx/Class/Row.pm
lib/DBIx/Class/Schema.pm
lib/DBIx/Class/UUIDColumns.pm

diff --git a/Changes b/Changes
index ae23cea..4b929a6 100644 (file)
--- a/Changes
+++ b/Changes
@@ -7,6 +7,7 @@ Revision history for DBIx::Class
         - made Storage::DBI use prepare_cached safely (thanks to Tim Bunce)
         - many documentation improvements (thanks guys!)
         - added ->connection, ->connect, ->register_source and ->clone schema methods
+       - Use croak instead of die for user errors.
 
 0.04999_02 2006-01-14 07:17:35
         - Schema is now self-contained; no requirement for co-operation
index 9cfea79..6a8e1e7 100644 (file)
@@ -2,6 +2,9 @@ package DBIx::Class::InflateColumn;
 
 use strict;
 use warnings;
+
+use Carp qw/croak/;
+
 use base qw/DBIx::Class::Row/;
 
 =head1 NAME 
@@ -56,8 +59,8 @@ used in the database layer.
 
 sub inflate_column {
   my ($self, $col, $attrs) = @_;
-  die "No such column $col to inflate" unless $self->has_column($col);
-  die "inflate_column needs attr hashref" unless ref $attrs eq 'HASH';
+  croak "No such column $col to inflate" unless $self->has_column($col);
+  croak "inflate_column needs attr hashref" unless ref $attrs eq 'HASH';
   $self->column_info($col)->{_inflate_info} = $attrs;
   $self->mk_group_accessors('inflated_column' => $col);
   return 1;
@@ -66,20 +69,20 @@ sub inflate_column {
 sub _inflated_column {
   my ($self, $col, $value) = @_;
   return $value unless defined $value; # NULL is NULL is NULL
-  my $info = $self->column_info($col) || die "No column info for $col";
+  my $info = $self->column_info($col) || croak "No column info for $col";
   return $value unless exists $info->{_inflate_info};
   my $inflate = $info->{_inflate_info}{inflate};
-  die "No inflator for $col" unless defined $inflate;
+  croak "No inflator for $col" unless defined $inflate;
   return $inflate->($value, $self);
 }
 
 sub _deflated_column {
   my ($self, $col, $value) = @_;
   return $value unless ref $value; # If it's not an object, don't touch it
-  my $info = $self->column_info($col) || die "No column info for $col";
+  my $info = $self->column_info($col) || croak "No column info for $col";
   return $value unless exists $info->{_inflate_info};
   my $deflate = $info->{_inflate_info}{deflate};
-  die "No deflator for $col" unless defined $deflate;
+  croak "No deflator for $col" unless defined $deflate;
   return $deflate->($value, $self);
 }
 
index f1b318b..e12b16c 100644 (file)
@@ -3,6 +3,8 @@ package DBIx::Class::PK::Auto::Oracle;
 use strict;
 use warnings;
 
+use Carp qw/croak/;
+
 use base qw/DBIx::Class/;
 
 __PACKAGE__->load_components(qw/PK::Auto/);
@@ -41,7 +43,7 @@ sub get_autoinc_seq {
     }
   }
   unless ($self->{_autoinc_seq}) {
-    die "Unable to find a sequence INSERT trigger on table '" . $self->_table_name . "'.";
+    croak "Unable to find a sequence INSERT trigger on table '" . $self->_table_name . "'.";
   }
 }
 
index a6d884a..fea1533 100644 (file)
@@ -2,6 +2,7 @@ package DBIx::Class::ResultSet;
 
 use strict;
 use warnings;
+use Carp qw/croak/;
 use overload
         '0+'     => 'count',
         'bool'   => sub { 1; },
@@ -285,7 +286,7 @@ on the resultset and counts the results of that.
 sub count {
   my $self = shift;
   return $self->search(@_)->count if @_ && defined $_[0];
-  die "Unable to ->count with a GROUP BY" if defined $self->{attrs}{group_by};
+  croak "Unable to ->count with a GROUP BY" if defined $self->{attrs}{group_by};
   unless (defined $self->{count}) {
     my $attrs = { %{ $self->{attrs} },
                   select => { 'count' => '*' },
@@ -354,7 +355,7 @@ Sets the specified columns in the resultset to the supplied values
 
 sub update {
   my ($self, $values) = @_;
-  die "Values for update must be a hash" unless ref $values eq 'HASH';
+  croak "Values for update must be a hash" unless ref $values eq 'HASH';
   return $self->{source}->storage->update(
            $self->{source}->from, $values, $self->{cond});
 }
@@ -368,7 +369,7 @@ cascade triggers, ->update will not.
 
 sub update_all {
   my ($self, $values) = @_;
-  die "Values for update must be a hash" unless ref $values eq 'HASH';
+  croak "Values for update must be a hash" unless ref $values eq 'HASH';
   foreach my $obj ($self->all) {
     $obj->set_columns($values)->update;
   }
@@ -410,7 +411,7 @@ sense for queries with page turned on.
 sub pager {
   my ($self) = @_;
   my $attrs = $self->{attrs};
-  die "Can't create pager for non-paged rs" unless $self->{page};
+  croak "Can't create pager for non-paged rs" unless $self->{page};
   $attrs->{rows} ||= 10;
   $self->count;
   return $self->{pager} ||= Data::Page->new(
index 04dfd8a..bc71706 100644 (file)
@@ -224,7 +224,7 @@ created, which calls C<create_related> for the relationship.
 
 sub add_relationship {
   my ($self, $rel, $f_source_name, $cond, $attrs) = @_;
-  die "Can't create relationship without join condition" unless $cond;
+  croak "Can't create relationship without join condition" unless $cond;
   $attrs ||= {};
 
   my %rels = %{ $self->_relationships };
@@ -257,7 +257,7 @@ sub add_relationship {
   if ($@) { # If the resolve failed, back out and re-throw the error
     delete $rels{$rel}; # 
     $self->_relationships(\%rels);
-    die "Error creating relationship $rel: $@";
+    croak "Error creating relationship $rel: $@";
   }
   1;
 }
@@ -309,10 +309,10 @@ sub resolve_join {
                  $self->related_source($_)->resolve_join($join->{$_}, $_) }
            keys %$join;
   } elsif (ref $join) {
-    die("No idea how to resolve join reftype ".ref $join);
+    croak ("No idea how to resolve join reftype ".ref $join);
   } else {
     my $rel_info = $self->relationship_info($join);
-    die("No such relationship ${join}") unless $rel_info;
+    croak("No such relationship ${join}") unless $rel_info;
     my $type = $rel_info->{attrs}{join_type} || '';
     return [ { $join => $self->related_source($join)->from,
                -join_type => $type },
@@ -335,8 +335,8 @@ sub resolve_condition {
     my %ret;
     while (my ($k, $v) = each %{$cond}) {
       # XXX should probably check these are valid columns
-      $k =~ s/^foreign\.// || die "Invalid rel cond key ${k}";
-      $v =~ s/^self\.// || die "Invalid rel cond val ${v}";
+      $k =~ s/^foreign\.// || croak "Invalid rel cond key ${k}";
+      $v =~ s/^self\.// || croak "Invalid rel cond val ${v}";
       if (ref $for) { # Object
         #warn "$self $k $for $v";
         $ret{$k} = $for->get_column($v);
index a03a3d7..26b0c14 100644 (file)
@@ -3,6 +3,8 @@ package DBIx::Class::Row;
 use strict;
 use warnings;
 
+use Carp qw/croak/;
+
 use base qw/DBIx::Class/;
 
 __PACKAGE__->load_components(qw/AccessorGroup/);
@@ -37,7 +39,7 @@ sub new {
   if ($attrs) {
     $new->throw("attrs must be a hashref" ) unless ref($attrs) eq 'HASH';
     while (my ($k, $v) = each %{$attrs}) {
-      die "No such column $k on $class" unless $class->has_column($k);
+      croak "No such column $k on $class" unless $class->has_column($k);
       $new->store_column($k => $v);
     }
   }
@@ -60,7 +62,7 @@ sub insert {
   $self->{result_source} ||= $self->result_source_instance
     if $self->can('result_source_instance');
   my $source = $self->{result_source};
-  die "No result_source set on this object; can't insert" unless $source;
+  croak "No result_source set on this object; can't insert" unless $source;
   #use Data::Dumper; warn Dumper($self);
   $source->storage->insert($source->from, { $self->get_columns });
   $self->in_storage(1);
@@ -126,7 +128,7 @@ sub delete {
       $self->result_source->from, $self->ident_condition);
     $self->in_storage(undef);
   } else {
-    die "Can't do class delete without a ResultSource instance"
+    croak "Can't do class delete without a ResultSource instance"
       unless $self->can('result_source_instance');
     my $attrs = { };
     if (@_ > 1 && ref $_[$#_] eq 'HASH') {
@@ -270,7 +272,7 @@ sub inflate_result {
   my $schema;
   PRE: foreach my $pre (keys %{$prefetch||{}}) {
     my $pre_source = $source->related_source($pre);
-    die "Can't prefetch non-existant relationship ${pre}" unless $pre_source;
+    croak "Can't prefetch non-existant relationship ${pre}" unless $pre_source;
     my $fetched = $pre_source->result_class->inflate_result(
                     $pre_source, @{$prefetch->{$pre}});
     my $accessor = $source->relationship_info($pre)->{attrs}{accessor};
index d9971d4..ba03d01 100644 (file)
@@ -2,6 +2,8 @@ package DBIx::Class::Schema;
 
 use strict;
 use warnings;
+
+use Carp qw/croak/;
 use UNIVERSAL::require;
 
 use base qw/DBIx::Class/;
@@ -119,7 +121,7 @@ sub source {
 
   # if we got here, they probably passed a full class name
   my $mapped = $self->class_mappings->{$moniker};
-  die "Can't find source for ${moniker}"
+  croak "Can't find source for ${moniker}"
     unless $mapped && exists $sreg->{$mapped};
   return $sreg->{$mapped};
 }
index dca0c58..08968da 100644 (file)
@@ -1,6 +1,8 @@
 package DBIx::Class::UUIDColumns;
 use base qw/DBIx::Class/;
 
+use Carp qw/croak/;
+
 use Data::UUID;
 
 __PACKAGE__->mk_classdata( 'uuid_auto_columns' => [] );
@@ -32,7 +34,7 @@ Note that the component needs to be loaded before Core.
 sub uuid_columns {
     my $self = shift;
     for (@_) {
-       die "column $_ doesn't exist" unless $self->has_column($_);
+       croak "column $_ doesn't exist" unless $self->has_column($_);
     }
     $self->uuid_auto_columns(\@_);
 }