Patch from abraxxa to make set_primary_key barf if called with non-existant columns
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / PK.pm
index 3bb0740..b532a33 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Tie::IxHash;
 
-use base qw/Class::Data::Inheritable/;
+use base qw/DBIx::Class::Row/;
 
 __PACKAGE__->mk_classdata('_primaries' => {});
 
@@ -43,6 +43,11 @@ define one or more columns as primary key for this class
 
 sub set_primary_key {
   my ($class, @cols) = @_;
+  # check if primary key columns are valid columns
+  for (@cols) {
+    $class->throw( "Column $_ can't be used as primary key because it isn't defined in $class" )
+      unless $class->has_column($_);
+  }
   my %pri;
   tie %pri, 'Tie::IxHash', map { $_ => {} } @cols;
   $class->_primaries(\%pri);
@@ -98,8 +103,6 @@ sub discard_changes {
   }
   delete @{$self}{keys %$self};
   @{$self}{keys %$reload} = values %$reload;
-  #$self->store_column($_ => $reload->get_column($_))
-  #  foreach keys %{$self->_columns};
   return $self;
 }
 
@@ -141,6 +144,13 @@ sub _create_ID {
   return join '|', $class, map { $_ . '=' . $vals{$_} } sort keys %vals;    
 }
 
+sub ident_condition {
+  my ($self) = @_;
+  my %cond;
+  $cond{$_} = $self->get_column($_) for $self->primary_columns;
+  return \%cond;
+}
+
 1;
 
 =back