X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBIHacks.pm;h=4b66c4ebf65c80fae8414dde5c40a4e601bc89f1;hb=48580715af3072905f2c71dc27e7f70f21a11338;hp=331474f134f5845cff0896b7c6ac6b95208f876a;hpb=037e8dca0dd1700345e2a36f78b399b59b8de99a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBIHacks.pm b/lib/DBIx/Class/Storage/DBIHacks.pm index 331474f..4b66c4e 100644 --- a/lib/DBIx/Class/Storage/DBIHacks.pm +++ b/lib/DBIx/Class/Storage/DBIHacks.pm @@ -97,7 +97,7 @@ sub _adjust_select_args_for_complex_prefetch { } # construct the inner $from for the subquery - # we need to prune first, because this will determine if we need a group_bu below + # we need to prune first, because this will determine if we need a group_by below my $inner_from = $self->_prune_unused_joins ($from, $inner_select, $where, $inner_attrs); # if a multi-type join was needed in the subquery - add a group_by to simulate the @@ -228,10 +228,7 @@ sub _resolve_aliastypes_from_select_args { my $group_by_sql = $sql_maker->_order_by({ map { $_ => $attrs->{$_} } qw/group_by having/ }); - my @order_by_chunks = (map - { ref $_ ? $_->[0] : $_ } - $sql_maker->_order_by_chunks ($attrs->{order_by}) - ); + my @order_by_chunks = ($self->_parse_order_by ($attrs->{order_by}) ); # match every alias to the sql chunks above for my $alias (keys %$alias_list) { @@ -487,5 +484,21 @@ sub _strip_cond_qualifiers { return $cond; } +sub _parse_order_by { + my ($self, $order_by) = @_; + + return scalar $self->sql_maker->_order_by_chunks ($order_by) + unless wantarray; + + my $sql_maker = $self->sql_maker; + local $sql_maker->{quote_char}; #disable quoting + my @chunks; + for my $chunk (map { ref $_ ? @$_ : $_ } ($sql_maker->_order_by_chunks ($order_by) ) ) { + $chunk =~ s/\s+ (?: ASC|DESC ) \s* $//ix; + push @chunks, $chunk; + } + + return @chunks; +} 1;