From: Peter Rabbitson Date: Fri, 3 Jul 2015 11:39:24 +0000 (+0200) Subject: Make sure array-relconds edge case is handled properly X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=de54e8bd6ea6d510ce8c2ad323c3066afedad58e;p=dbsrgits%2FDBIx-Class-Historic.git Make sure array-relconds edge case is handled properly Hopefully nobody in the wild is using this... hahaha who am I kidding. Anyway being thorough before subsequent commits --- diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index c88361f..d8ec2b5 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -2127,7 +2127,13 @@ sub _resolve_relationship_condition { # we got something back - sanity check and infer values if we can my @nonvalues; - if ( my $jfc = $ret->{join_free_condition} and $ret->{join_free_condition} ne UNRESOLVABLE_CONDITION ) { + if ( + $ret->{join_free_condition} + and + $ret->{join_free_condition} ne UNRESOLVABLE_CONDITION + and + my $jfc = $storage->_collapse_cond( $ret->{join_free_condition} ) + ) { my $jfc_eqs = $storage->_extract_fixed_condition_columns($jfc, 'consider_nulls'); diff --git a/t/relationship/core.t b/t/relationship/core.t index c611142..e0e243c 100644 --- a/t/relationship/core.t +++ b/t/relationship/core.t @@ -262,6 +262,22 @@ is_same_sql_bind ( $undir_maps = $schema->resultset("Artist")->find(2)->artist_undirected_maps; is($undir_maps->count, 1, 'found 1 undirected map for artist 2'); +{ + my $artist_to_mangle = $schema->resultset('Artist')->find(2); + + $artist_to_mangle->set_from_related( artist_undirected_maps => { id1 => 42 } ); + + ok( ! $artist_to_mangle->is_changed, 'Unresolvable set_from_related did not alter object' ); + + $artist_to_mangle->set_from_related( artist_undirected_maps => {} ); + ok( $artist_to_mangle->is_changed, 'Definitive set_from_related did alter object' ); + is ( + $artist_to_mangle->id, + undef, + 'Correctly unset id on definitive outcome of OR condition', + ); +} + my $mapped_rs = $undir_maps->search_related('mapped_artists'); my @art = $mapped_rs->all;