Yet another missed sanity check in the relcond resolver
Peter Rabbitson [Mon, 15 Sep 2014 08:40:39 +0000 (10:40 +0200)]
rel/col duality is just hateful

lib/DBIx/Class/ResultSource.pm
t/lib/DBICTest/Schema/Track.pm
t/relationship/custom.t

index 57d833e..9e8641a 100644 (file)
@@ -1973,11 +1973,26 @@ sub _resolve_relationship_condition {
         $joinfree_source->columns
       };
 
-      $fq_col_list->{$_} or $self->throw_exception (
+      exists $fq_col_list->{$_} or $self->throw_exception (
         "The join-free condition returned for $exception_rel_id may only "
-      . 'contain keys that are fully qualified column names of the corresponding source'
+      . 'contain keys that are fully qualified column names of the corresponding source '
+      . "(it returned '$_')"
       ) for keys %$jfc;
 
+      (
+        length ref $_
+          and
+        defined blessed($_)
+          and
+        $_->isa('DBIx::Class::Row')
+          and
+        $self->throw_exception (
+          "The join-free condition returned for $exception_rel_id may not "
+        . 'contain result objects as values - perhaps instead of invoking '
+        . '->$something you meant to return ->get_column($something)'
+        )
+      ) for values %$jfc;
+
     }
   }
   elsif (ref $args->{condition} eq 'HASH') {
index 5b0811e..c43591a 100644 (file)
@@ -67,7 +67,7 @@ sub {
     },
 
     ! $args->{self_result_object} ? () : {
-     "$args->{foreign_alias}.cdid" => $args->{self_result_object}->cd
+     "$args->{foreign_alias}.cdid" => $args->{self_result_object}->get_column('cd')
     },
 
     ! $args->{foreign_values} ? () : {
index 5bc52d4..fb48597 100644 (file)
@@ -285,6 +285,12 @@ my $cd_single_track = $schema->resultset('CD')->create({
 
 my $single_track = $cd_single_track->tracks->next;
 
+is(
+  $single_track->cd_cref_cond->title,
+  $cd_single_track->title,
+  'Got back the expected single-track cd title',
+);
+
 is_deeply
   { $schema->resultset('Track')->find({ cd_cref_cond => { cdid => $cd_single_track->id } })->get_columns },
   { $single_track->get_columns },