X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI.pm;h=3937cb51a827624a4c00a646d178b738c74b35fe;hb=fba8d76cb4013ec7471ec4c2aff4352b5c006457;hp=8eb67fafc273bed6fb4f338a8172f3ba9881c365;hpb=b2f73c3063de927725954bdf864f8e1291a5dedd;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 8eb67fa..3937cb5 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -1081,12 +1081,16 @@ sub _onepk_update_delete { my ($rs, $op, $values) = @_; my $rsrc = $rs->result_source; + my $attrs = $rs->_resolved_attrs; my @pcols = $rsrc->primary_columns; + $self->throw_exception ('_onepk_update_delete can not be called on resultsets selecting multiple columns') + if (ref $attrs->{select} eq 'ARRAY' and @{$attrs->{select}} > 1); + return $self->$op ( $rsrc, $op eq 'update' ? $values : (), - { $pcols[0] => { -in => $rs->get_column ($pcols[0])->as_query } }, + { $pcols[0] => { -in => $rs->as_query } }, ); } @@ -1106,10 +1110,14 @@ sub _multipk_update_delete { my $rsrc = $rs->result_source; my @pcols = $rsrc->primary_columns; + my $attrs = $rs->_resolved_attrs; + + $self->throw_exception ('Number of columns selected by supplied resultset does not match number of primary keys') + if ( ref $attrs->{select} ne 'ARRAY' or @{$attrs->{select}} != @pcols ); my $guard = $self->txn_scope_guard; - my $subrs_cur = $rs->search ({}, { columns => \@pcols })->cursor; + my $subrs_cur = $rs->cursor; while (my @pks = $subrs_cur->next) { my $cond;