From: Peter Rabbitson Date: Fri, 24 Apr 2009 21:17:32 +0000 (+0000) Subject: Wrap up order_by saga X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=952f9e2dcb459ab5854a9fb0e49e63b5473778d3;p=scpubgit%2FQ-Branch.git Wrap up order_by saga --- diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index ad8f3a6..5c5c32c 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -2086,33 +2086,29 @@ Some functions take an order by clause. This can either be a scalar (just a column name,) a hash of C<< { -desc => 'col' } >> or C<< { -asc => 'col' } >>, or an array of either of the two previous forms. Examples: - Given | Will Generate - --------------------------------------------------------- - | - \'colA DESC' | ORDER BY colA DESC - | - 'colA' | ORDER BY colA - | - [qw/colA colB/] | ORDER BY colA, colB - | - {-asc => 'colA'} | ORDER BY colA ASC - | - {-desc => 'colB'} | ORDER BY colB DESC - | - [ | ORDER BY colA ASC, colB DESC - {-asc => 'colA'}, | - {-desc => 'colB'} | - ] | - | - ['colA', {-asc => 'colB'}] | ORDER BY colA, colB ASC - | - { -asc => [qw/colA colB] } | ORDER BY colA ASC, colB ASC - | - { | - -asc => [qw/colA colB/], | ORDER BY colA ASC, colB ASC, - -desc => [qw/colC colD/],| colC DESC, colD DESC - } | - ========================================================== + Given | Will Generate + ---------------------------------------------------------- + | + \'colA DESC' | ORDER BY colA DESC + | + 'colA' | ORDER BY colA + | + [qw/colA colB/] | ORDER BY colA, colB + | + {-asc => 'colA'} | ORDER BY colA ASC + | + {-desc => 'colB'} | ORDER BY colB DESC + | + ['colA', {-asc => 'colB'}] | ORDER BY colA, colB ASC + | + { -asc => [qw/colA colB] } | ORDER BY colA ASC, colB ASC + | + [ | + { -asc => 'colA' }, | ORDER BY colA ASC, colB DESC, + { -desc => [qw/colB/], | colC ASC, colD ASC + { -asc => [qw/colC colD/],| + ] | + =========================================================== diff --git a/t/06order_by.t b/t/06order_by.t index 2a3f7b6..71b9dc2 100644 --- a/t/06order_by.t +++ b/t/06order_by.t @@ -3,6 +3,7 @@ use strict; use warnings; use Test::More; +use Test::Exception; use SQL::Abstract; @@ -81,15 +82,14 @@ my @cases = expects_quoted => ' ORDER BY `colA` DESC, `colB` DESC, `colC` DESC', }, { - given => [{-desc => [ qw/colA colB/ ], -asc => [ qw/colC colD/ ] }], - expects => ' ORDER BY colA DESC, colB DESC, colC ASC, colD ASC', - expects_quoted => ' ORDER BY `colA` DESC, `colB` DESC, `colC` ASC, `colD` ASC', + given => [{ -asc => 'colA' }, { -desc => [qw/colB/] }, { -asc => [qw/colC colD/] }], + expects => ' ORDER BY colA ASC, colB DESC, colC ASC, colD ASC', + expects_quoted => ' ORDER BY `colA` ASC, `colB` DESC, `colC` ASC, `colD` ASC', }, - ); -plan tests => (scalar(@cases) * 2); +plan tests => (scalar(@cases) * 2) + 2; my $sql = SQL::Abstract->new; my $sqlq = SQL::Abstract->new({quote_char => '`'}); @@ -98,3 +98,15 @@ for my $case( @cases){ is($sql->_order_by($case->{given}), $case->{expects}); is($sqlq->_order_by($case->{given}), $case->{expects_quoted}); } + +throws_ok ( + sub { $sql->_order_by({-desc => 'colA', -asc => 'colB' }) }, + qr/hash passed .+ must have exactly one key/, + 'Undeterministic order exception', +); + +throws_ok ( + sub { $sql->_order_by({-desc => [ qw/colA colB/ ], -asc => [ qw/colC colD/ ] }) }, + qr/hash passed .+ must have exactly one key/, + 'Undeterministic order exception', +);