isa_ok( $schema->storage, 'DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server' );
+{
+ my $schema2 = $schema->connect ($schema->storage->connect_info);
+ ok (! $schema2->storage->connected, 'a re-connected cloned schema starts unconnected');
+}
+
$schema->storage->dbh_do (sub {
my ($storage, $dbh) = @_;
eval { $dbh->do("DROP TABLE artist") };
# try a ->has_many direction
my $owners = $schema->resultset ('Owners')->search (
{
- 'books.id' => { '!=', undef }
+ 'books.id' => { '!=', undef },
+ 'me.name' => { '!=', 'somebogusstring' },
},
{
prefetch => 'books',
- order_by => 'name',
+ order_by => { -asc => \['name + ?', [ test => 'xxx' ]] }, # test bindvar propagation
rows => 3, # 8 results total
},
);
+ my ($sql, @bind) = @${$owners->page(3)->as_query};
+ is_deeply (
+ \@bind,
+ [ ([ 'me.name' => 'somebogusstring' ], [ test => 'xxx' ]) x 2 ], # double because of the prefetch subq
+ );
+
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');
},
{
distinct => 1,
+ having => \['1 = ?', [ test => 1 ] ], #test having propagation
prefetch => 'owner',
rows => 2, # 3 results total
order_by => { -desc => 'owner' },
- # there is no sane way to order by the right side of a grouped prefetch currently :(
- #order_by => { -desc => 'owner.name' },
},
);
+ ($sql, @bind) = @${$books->page(3)->as_query};
+ is_deeply (
+ \@bind,
+ [
+ # inner
+ [ 'owner.name' => 'wiggle' ], [ 'owner.name' => 'woggle' ], [ source => 'Library' ], [ test => '1' ],
+ # outer
+ [ 'owner.name' => 'wiggle' ], [ 'owner.name' => 'woggle' ], [ source => 'Library' ],
+ ],
+ );
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');
is ($books->page(2)->count_rs->next, 1, 'Prefetched grouped search returns correct count_rs');
}
+# make sure right-join-side ordering limit works
+{
+ my $rs = $schema->resultset ('BooksInLibrary')->search (
+ {
+ 'owner.name' => [qw/wiggle woggle/],
+ },
+ {
+ join => 'owner',
+ order_by => { -desc => 'owner.name' },
+ }
+ );
+
+ is ($rs->all, 3, 'Correct amount of objects from right-sorted joined resultset');
+ my $limited_rs = $rs->search ({}, {rows => 3, offset => 1});
+ is ($limited_rs->count, 2, 'Correct count of limited right-sorted joined resultset');
+ is ($limited_rs->count_rs->next, 2, 'Correct count_rs of limited right-sorted joined resultset');
+ is ($limited_rs->all, 2, 'Correct amount of objects from limited right-sorted joined resultset');
+
+ is_deeply (
+ [map { $_->name } ($limited_rs->search_related ('owner')->all) ],
+ [qw/woggle wiggle/], # there is 1 woggle library book and 2 wiggle books, the limit gets us one of each
+ 'Rows were properly ordered'
+ );
+}
+
done_testing;
# clean up our mess