X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsqlmaker%2Flimit_dialects%2Frno.t;h=32f67c560c3ff11e564d237bed6997afc6ce7843;hb=08a1eaadb08c5c62b6c0892537ef145d3d7df314;hp=00a65239f97dc1a472fd67b75ca471995909b3c3;hpb=69d3c2708f5564ce38d5878fa694b04f6740cde0;p=dbsrgits%2FDBIx-Class.git diff --git a/t/sqlmaker/limit_dialects/rno.t b/t/sqlmaker/limit_dialects/rno.t index 00a6523..32f67c5 100644 --- a/t/sqlmaker/limit_dialects/rno.t +++ b/t/sqlmaker/limit_dialects/rno.t @@ -26,10 +26,10 @@ my $rs_selectas_col = $schema->resultset ('BooksInLibrary')->search ({}, { is_same_sql_bind( $rs_selectas_col->as_query, '( - SELECT id, source, owner, title, price, + SELECT me.id, me.source, me.owner, me.title, me.price, owner__name FROM ( - SELECT id, source, owner, title, price, + SELECT me.id, me.source, me.owner, me.title, me.price, owner__name, ROW_NUMBER() OVER( ) AS rno__row__index FROM ( @@ -62,10 +62,10 @@ my $rs_selectas_rel = $schema->resultset ('BooksInLibrary')->search ({}, { is_same_sql_bind( $rs_selectas_rel->as_query, '( - SELECT [id], [source], [owner], [title], [price], + SELECT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], [owner_name] FROM ( - SELECT [id], [source], [owner], [title], [price], + SELECT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], [owner_name], ROW_NUMBER() OVER( ) AS [rno__row__index] FROM ( @@ -98,6 +98,7 @@ my $rs_selectas_rel = $schema->resultset('BooksInLibrary')->search ({}, { ], join => 'owner', rows => 1, + order_by => 'me.id', }); is_same_sql_bind( @@ -105,13 +106,14 @@ is_same_sql_bind( '( SELECT [owner_name], [owner_books] FROM ( - SELECT [owner_name], [owner_books], ROW_NUMBER() OVER( ) AS [rno__row__index] + SELECT [owner_name], [owner_books], ROW_NUMBER() OVER( ORDER BY [ORDER__BY__001] ) AS [rno__row__index] FROM ( SELECT [owner].[name] AS [owner_name], ( SELECT COUNT( * ) FROM [owners] [owner] - WHERE [count].[id] = [owner].[id] and [count].[name] = ? ) AS [owner_books] - FROM [books] [me] - JOIN [owners] [owner] ON [owner].[id] = [me].[owner] + WHERE [count].[id] = [owner].[id] and [count].[name] = ? ) AS [owner_books], + [me].[id] AS [ORDER__BY__001] + FROM [books] [me] + JOIN [owners] [owner] ON [owner].[id] = [me].[owner] WHERE ( [source] = ? ) ) [me] ) [me] @@ -180,5 +182,35 @@ is_same_sql_bind( ); } +{ +my $subq = $schema->resultset('Owners')->search({ + 'books.owner' => { -ident => 'owner.id' }, +}, { alias => 'owner', select => ['id'] } )->count_rs; + +my $rs_selectas_rel = $schema->resultset('BooksInLibrary')->search( { -exists => $subq->as_query }, { select => ['id','owner'], rows => 1 } ); + +is_same_sql_bind( + $rs_selectas_rel->as_query, + '( + SELECT [me].[id], [me].[owner] FROM ( + SELECT [me].[id], [me].[owner], ROW_NUMBER() OVER( ) AS [rno__row__index] FROM ( + SELECT [me].[id], [me].[owner] + FROM [books] [me] + WHERE ( ( (EXISTS ( + SELECT COUNT( * ) FROM [owners] [owner] WHERE ( [books].[owner] = [owner].[id] ) + )) AND [source] = ? ) ) + ) [me] + ) [me] WHERE [rno__row__index] >= ? AND [rno__row__index] <= ? + )', + [ + [ { sqlt_datatype => 'varchar', sqlt_size => 100, dbic_colname => 'source' } => 'Library' ], + [ $OFFSET => 1 ], + [ $TOTAL => 1 ], + ], + 'Pagination with sub-query in WHERE works' +); + +} + done_testing;