X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource%2FRowParser.pm;h=069d3318c4670aac76f97f1b207ecfc7b5af7bcf;hb=1bd54f3d4bc8428d602d2e28cb410b303bb242b7;hp=4683e15296f8233d19383283e20542fb73baea2b;hpb=b3a400a044a5e4a768e26d450e3cce289481ee7a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource/RowParser.pm b/lib/DBIx/Class/ResultSource/RowParser.pm index 4683e15..069d331 100644 --- a/lib/DBIx/Class/ResultSource/RowParser.pm +++ b/lib/DBIx/Class/ResultSource/RowParser.pm @@ -6,13 +6,11 @@ use warnings; use base 'DBIx::Class'; -use Try::Tiny; -use List::Util qw(first max); - use DBIx::Class::ResultSource::RowParser::Util qw( assemble_simple_parser assemble_collapsing_parser ); +use DBIx::Class::_Util 'DUMMY_ALIASPAIR'; use DBIx::Class::Carp; @@ -148,9 +146,7 @@ sub _mk_row_parser { utf8::upgrade($src) if DBIx::Class::_ENV_::STRESSTEST_UTF8_UPGRADE_GENERATED_COLLAPSER_SOURCE; - return ( - $args->{eval} ? ( eval "sub $src" || die $@ ) : $src, - ); + $src; } @@ -193,8 +189,10 @@ sub _resolve_collapse { rsrc => $self->related_source($rel), fk_map => $self->_resolve_relationship_condition( rel_name => $rel, - self_alias => "\xFE", # irrelevant - foreign_alias => "\xFF", # irrelevant + + # an API where these are optional would be too cumbersome, + # instead always pass in some dummy values + DUMMY_ALIASPAIR, )->{identity_map}, }; } @@ -406,7 +404,14 @@ sub _resolve_collapse { # coderef later $collapse_map->{-identifying_columns} = []; $collapse_map->{-identifying_columns_variants} = [ sort { - (scalar @$a) <=> (scalar @$b) or max(@$a) <=> max(@$b) + (scalar @$a) <=> (scalar @$b) + or + ( + # Poor man's max() + ( sort { $b <=> $a } @$a )[0] + <=> + ( sort { $b <=> $a } @$b )[0] + ) } @collapse_sets ]; } } @@ -452,12 +457,15 @@ sub _resolve_collapse { is_single => $relinfo->{$rel}{is_single}, - # if there is at least one *inner* reverse relationship which is HASH-based (equality only) + # if there is at least one *inner* reverse relationship ( meaning identity-only ) # we can safely assume that the child can not exist without us - rev_rel_is_optional => ( first - { ref $_->{cond} eq 'HASH' and ($_->{attrs}{join_type}||'') !~ /^left/i } - values %{ $self->reverse_relationship_info($rel) }, - ) ? 0 : 1, + rev_rel_is_optional => ( + ( grep { + ($_->{attrs}{join_type}||'') !~ /^left/i + } values %{ $self->reverse_relationship_info($rel) } ) + ? 0 + : 1 + ), # if this is a 1:1 our own collapser can be used as a collapse-map # (regardless of left or not)