X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSQLAHacks.pm;h=4cbbcc62d2d0927defeebd0c0bedca6ca617839f;hb=fd4cb60a0c582000de4beef5ba7a519fd531e168;hp=9fb3c242788171545f05d1ab233bfbcfb1d9e4f7;hpb=7bb3e1619d914bab32304dfbe102758461a61ff3;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/SQLAHacks.pm b/lib/DBIx/Class/SQLAHacks.pm index 9fb3c24..4cbbcc6 100644 --- a/lib/DBIx/Class/SQLAHacks.pm +++ b/lib/DBIx/Class/SQLAHacks.pm @@ -256,9 +256,38 @@ sub _order_by { sub _order_directions { my ($self, $order) = @_; $order = $order->{order_by} if ref $order eq 'HASH'; + if (ref $order eq 'HASH') { + $order = [$self->_order_directions_hash($order)]; + } elsif (ref $order eq 'ARRAY') { + $order = [map { + if (ref $_ eq 'HASH') { + $self->_order_directions_hash($_); + } else { + $_; + } + } @{ $order }]; + } return $self->SUPER::_order_directions($order); } +sub _order_directions_hash { + my ($self, $order) = @_; + if (grep { $_ =~ /^-(desc|asc)/i } keys %{$order}) { + return map { + my $key = $_; + my @tmp; + s/^-(desc|asc)/\1/i; + my $dir = $_; + if (ref $order->{ $key } eq 'ARRAY') { + @tmp = map "$_ $dir", @{ $order->{ $key } }; + } else { # should be scalar + @tmp = ( "$order->{$key} $dir" ); + } + @tmp; + } keys %{$order}; + } +} + sub _table { my ($self, $from) = @_; if (ref $from eq 'ARRAY') {