X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FData%2FQuery%2FRenderer%2FSQL%2FSlice%2FFetchFirst.pm;h=d885fb469bcf8255626a6d56bb1e7a2089857e43;hb=cc5ec83c718d51d26c26c6beef0c16cadf92dadf;hp=f7be0b278e25318a82146becc9cb9b544bfd6016;hpb=22f934ee20bc7241e3a88f2bfeb9e8d5d7735f99;p=dbsrgits%2FData-Query.git diff --git a/lib/Data/Query/Renderer/SQL/Slice/FetchFirst.pm b/lib/Data/Query/Renderer/SQL/Slice/FetchFirst.pm index f7be0b2..d885fb4 100644 --- a/lib/Data/Query/Renderer/SQL/Slice/FetchFirst.pm +++ b/lib/Data/Query/Renderer/SQL/Slice/FetchFirst.pm @@ -75,13 +75,12 @@ sub _render_slice { }; my $order_gensym_count; - my %order_map; - foreach my $order (@order_nodes) { - my $by = $order->{by}; + my @mapped_order = map { + my $by = $_->{by}; if (is_Identifier $by) { $default_inside_alias ||= $by->{elements}[0] if @{$by->{elements}} == 2; - $order_map{$by} + my $mapped_by = $alias_map{join('.', @{$by->{elements}})} ||= do { if ( @@ -95,10 +94,11 @@ sub _render_slice { Identifier($name); } }; + Order($mapped_by, $_->{reverse}); } else { die "XXX not implemented yet"; } - } + } @order_nodes; $default_inside_alias ||= 'me'; @@ -112,9 +112,9 @@ sub _render_slice { ? Select( \@outside_select_list, compose { - Order($order_map{$b->{by}}, $b->{reverse}, $a) + Order($b->{by}, $b->{reverse}, $a) } ( - @order_nodes, + @mapped_order, Alias($default_inside_alias, $_) ) ) @@ -127,13 +127,13 @@ sub _render_slice { @outside_select_list, $dq->{preserve_order} ? (grep @{$_->{elements}} == 1, - @order_map{map $_->{by}, @order_nodes}) + map $_->{by}, @mapped_order) : (), ], compose { - Order($order_map{$b->{by}}, !$b->{reverse}, $a) + Order($b->{by}, !$b->{reverse}, $a) } ( - @order_nodes, + @mapped_order, Alias( $default_inside_alias, Slice(