From: Dagfinn Ilmari Mannsåker Date: Sat, 22 Nov 2014 18:37:42 +0000 (+0000) Subject: Use a separate key for caching prefetched filter rels X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=refs%2Fheads%2Fpeople%2Filmari%2Fdelay-related-rs-creation-for-single-rels Use a separate key for caching prefetched filter rels This silences the extra deprecation warnings about prefetched filter rels vs. get(_inflated)_columns. XXX: Determine if these warnings are actually valid and missed before, or bogus and should be silenced. The warnings were coming from: t/inflate/hri_torture.t line 25 t/multi_create/cd_single.t line 12 t/multi_create/diamond.t line 25 t/multi_create/existing_in_chain.t line 70 t/multi_create/in_memory.t line 80 t/multi_create/in_memory.t line 96 t/multi_create/in_memory.t line 101 t/multi_create/standard.t line 80 t/multi_create/standard.t line 115 t/multi_create/standard.t line 182 t/multi_create/torture.t line 21 t/multi_create/standard.t line 456 t/prefetch/manual.t line 27 t/prefetch/multiple_hasmany_torture.t line 13 t/relationship/custom_opaque.t line 11 t/resultset/inflate_result_api.t line 24 --- diff --git a/lib/DBIx/Class/CDBICompat/LazyLoading.pm b/lib/DBIx/Class/CDBICompat/LazyLoading.pm index 798fcd3..9613d1f 100644 --- a/lib/DBIx/Class/CDBICompat/LazyLoading.pm +++ b/lib/DBIx/Class/CDBICompat/LazyLoading.pm @@ -81,6 +81,7 @@ sub discard_changes { delete $self->{_column_data}{$_} for $self->is_changed; delete $self->{_dirty_columns}; delete $self->{_relationship_data}; + delete $self->{_filter_relationship_data}; return $self; } diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index ec525c5..5eb565b 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -611,9 +611,9 @@ sub related_resultset { elsif ( $rel_info->{attrs}{accessor} eq 'filter' and - exists $self->{_inflated_column}{$rel} + exists $self->{_filter_relationship_data}{$rel} ) { - $rs->set_cache([ $self->{_inflated_column}{$rel} || () ]); + $rs->set_cache([ $self->{_filter_relationship_data}{$rel} || () ]); } $rs; }; diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index 80666b3..0781824 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -723,7 +723,7 @@ sub _has_related_resultset_cached { ) or ( $accessor eq 'filter' and - exists $self->{_inflated_column}{$relname} + exists $self->{_filter_relationship_data}{$relname} ) or ( defined $self->{related_resultsets}{$relname} and @@ -988,6 +988,7 @@ sub set_column { elsif ( $acc eq 'filter' and $rel_name eq $column) { delete $self->{related_resultsets}{$rel_name}; #delete $self->{_relationship_data}{$rel_name}; + delete $self->{_filter_relationship_data}{$rel_name}; delete $self->{_inflated_column}{$rel_name}; } } @@ -1318,6 +1319,7 @@ sub inflate_result { $new->{_relationship_data}{$rel_name} = $rel_objects[0]; } elsif ($relinfo->{attrs}{accessor} eq 'filter') { + $new->{_filter_relationship_data}{$rel_name} = $rel_objects[0]; $new->{_inflated_column}{$rel_name} = $rel_objects[0]; } else {