X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F746mssql.t;h=a9589868ecac8f78764dec5dcb3e9eaf63a79db1;hb=64c7c000587e6e6dccb9fc6330a66dcebd1f3695;hp=a693949e9dcc7906698480e357c9f509d9db468d;hpb=42e5b103c09794bbe86eea1a464dae6b5276ff48;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/t/746mssql.t b/t/746mssql.t index a693949..a958986 100644 --- a/t/746mssql.t +++ b/t/746mssql.t @@ -4,13 +4,14 @@ use warnings; use Test::More; use lib qw(t/lib); use DBICTest; +use DBIC::SqlMakerTest; my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_MSSQL_ODBC_${_}" } qw/DSN USER PASS/}; plan skip_all => 'Set $ENV{DBICTEST_MSSQL_ODBC_DSN}, _USER and _PASS to run this test' unless ($dsn && $user); -plan tests => 19; +plan tests => 25; my $schema = DBICTest::Schema->connect($dsn, $user, $pass); @@ -47,7 +48,7 @@ SQL my %seen_id; # fresh $schema so we start unconnected -$schema = DBICTest::Schema->connect($dsn, $user, $pass, {AutoCommit => 1}); +$schema = DBICTest::Schema->connect($dsn, $user, $pass); # test primary key handling my $new = $schema->resultset('Artist')->create({ name => 'foo' }); @@ -117,6 +118,7 @@ $schema->populate ('Owners', [ $schema->populate ('BooksInLibrary', [ [qw/source owner title /], + [qw/Library 1 secrets0/], [qw/Library 1 secrets1/], [qw/Eatery 1 secrets2/], [qw/Library 2 secrets3/], @@ -142,30 +144,77 @@ $schema->populate ('BooksInLibrary', [ }, { prefetch => 'books', order_by => 'name', - page => 2, - rows => 3, + rows => 3, # 8 results total }); - is ($owners->all, 3, 'has_many prefetch returns correct number of rows'); - is ($owners->count, 3, 'has-many prefetch returns correct count'); + is ($owners->page(1)->all, 3, 'has_many prefetch returns correct number of rows'); + is ($owners->page(1)->count, 3, 'has-many prefetch returns correct count'); + + TODO: { + local $TODO = 'limit past end of resultset problem'; + is ($owners->page(3)->all, 2, 'has_many prefetch returns correct number of rows'); + is ($owners->page(3)->count, 2, 'has-many prefetch returns correct count'); + is ($owners->page(3)->count_rs->next, 2, 'has-many prefetch returns correct count_rs'); + + # make sure count does not become overly complex FIXME + is_same_sql_bind ( + $owners->page(3)->count_rs->as_query, + '( + SELECT COUNT( * ) + FROM ( + SELECT TOP 3 me.id + FROM owners me + LEFT JOIN books books ON books.owner = me.id + WHERE ( books.id IS NOT NULL ) + GROUP BY me.id + ORDER BY me.id DESC + ) count_subq + )', + [], + ); + } # try a ->belongs_to direction (no select collapse, group_by should work) my $books = $schema->resultset ('BooksInLibrary')->search ({ - 'owner.name' => 'wiggle' + 'owner.name' => [qw/wiggle woggle/], }, { distinct => 1, prefetch => 'owner', order_by => 'name', - rows => 5, + rows => 2, # 3 results total }); - is ($books->page(1)->all, 1, 'Prefetched grouped search returns correct number of rows'); - is ($books->page(1)->count, 1, 'Prefetched grouped search returns correct count'); - - # - is ($books->page(2)->all, 0, 'Prefetched grouped search returns correct number of rows'); - is ($books->page(2)->count, 0, 'Prefetched grouped search returns correct count'); + is ($books->page(1)->all, 2, 'Prefetched grouped search returns correct number of rows'); + is ($books->page(1)->count, 2, 'Prefetched grouped search returns correct count'); + + TODO: { + local $TODO = 'limit past end of resultset problem'; + is ($books->page(2)->all, 1, 'Prefetched grouped search returns correct number of rows'); + is ($books->page(2)->count, 1, 'Prefetched grouped search returns correct count'); + is ($books->page(2)->count_rs->next, 1, 'Prefetched grouped search returns correct count_rs'); + + # make sure count does not become overly complex FIXME + is_same_sql_bind ( + $books->page(2)->count_rs->as_query, + '( + SELECT COUNT( * ) + FROM ( + SELECT TOP 2 me.id + FROM books me + JOIN owners owner ON owner.id = me.owner + WHERE ( ( ( owner.name = ? OR owner.name = ? ) AND source = ? ) ) + GROUP BY me.id, me.source, me.owner, me.title, me.price, owner.id, owner.name + ORDER BY me.id DESC + ) count_subq + )', + [ + [ 'owner.name' => 'wiggle' ], + [ 'owner.name' => 'woggle' ], + [ 'source' => 'Library' ], + ], + ); + } }