X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F42toplimit.t;h=6f05660dedd4782c7dd33b2430025e2c855b3670;hb=840736b037623f76a6b6086019b5cd197d394651;hp=5ba13d862a423c0b14e83f28fea313649d6a4860;hpb=d81900119bbe932c7c112c022cce3d51a11979bb;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/t/42toplimit.t b/t/42toplimit.t index 5ba13d8..6f05660 100644 --- a/t/42toplimit.t +++ b/t/42toplimit.t @@ -5,24 +5,48 @@ use Test::More; use DBIx::Class::Storage::DBI; use lib qw(t/lib); use DBICTest; # do not remove even though it is not used +use DBIC::SqlMakerTest; -plan tests => 1; - -my $sa = new DBIC::SQL::Abstract; +plan tests => 8; +my $sa = new DBIx::Class::SQLAHacks; $sa->limit_dialect( 'Top' ); -is( - $sa->select( 'rubbish', [ 'foo.id', 'bar.id' ], undef, { order_by => 'artistid' }, 1, 3 ), - 'SELECT * FROM -( - SELECT TOP 1 * FROM - ( - SELECT TOP 4 foo.id, bar.id FROM rubbish ORDER BY artistid ASC - ) AS foo - ORDER BY artistid DESC -) AS bar -ORDER BY artistid ASC -', - "make sure limit_dialect( 'Top' ) is working okay" -); +sub test_order { + my $args = shift; + my $order_by = $args->{order_by}; + my $expected_sql_order = $args->{expected_sql_order}; + + my $query = $sa->select( 'foo', [qw{bar baz}], undef, { + order_by => $order_by, + }, 1, 3 + ); + is_same_sql( + $query, + "SELECT * FROM ( SELECT TOP 1 * FROM ( SELECT TOP 4 bar,baz FROM foo ORDER BY $expected_sql_order->[0] ) AS foo ORDER BY $expected_sql_order->[1] ) AS bar ORDER BY $expected_sql_order->[0]", + ); +} + + test_order({ order_by => \'foo DESC' , expected_sql_order => [ 'foo DESC', 'foo ASC' ] }); + test_order({ order_by => 'foo' , expected_sql_order => [ 'foo ASC', 'foo DESC'] }); + test_order({ order_by => [ qw{ foo bar} ], expected_sql_order => [ 'foo ASC,bar ASC', 'foo DESC, bar DESC']}); + test_order({ order_by => { -asc => 'foo' }, expected_sql_order => [ 'foo ASC', 'foo DESC' ] }); + test_order({ order_by => { -desc => 'foo' }, expected_sql_order => [ 'foo DESC', 'foo ASC' ] }); + + test_order({ order_by => ['foo', { -desc => 'bar' } ], expected_sql_order => [ 'foo ASC, bar DESC', 'foo DESC, bar ASC'] }); + test_order({ order_by => {-asc => [qw{ foo bar }] }, expected_sql_order => ['foo ASC, bar ASC', 'foo DESC, bar DESC' ] }); + test_order({ order_by => + [ + { -asc => 'foo' }, + { -desc => [qw{bar}] }, + { -asc => [qw{baz frew}]}, + ], + expected_sql_order => ['foo ASC, bar DESC, baz ASC, frew ASC', 'foo DESC, bar ASC, baz DESC, frew DESC'] + }); + + is_same_sql( + $sa->select( 'foo', [qw{ bar baz}], undef, { + group_by => 'bar', + order_by => 'bar', + }, 1, 3), + "SELECT * FROM ( SELECT TOP 1 * FROM ( SELECT TOP 4 bar,baz FROM foo ORDER BY bar ASC GROUP BY bar ) AS foo ORDER BY bar DESC ) AS bar ORDER BY bar ASC");