my
$schema
= DBICTest->init_schema();
my
$rs
=
$schema
->resultset(
'Artist'
)->search({}, {
select
=>
'artistid'
,
prefetch
=> {
cds
=>
'tracks'
},
});
my
$initial_artists_cnt
=
$rs
->count;
$rs
->create({
name
=>
'foo'
,
cds
=> [{
year
=> 2012,
title
=>
'foocd'
,
tracks
=> [{
title
=>
'footrack'
,
}]
}],
});
$rs
->create({
name
=>
'bar'
});
$rs
->create({
name
=>
'baz'
});
for
(
undef
,
undef
,
'me.artistid'
) {
$rs
=
$rs
->search({}, {
order_by
=>
$_
})
if
$_
;
for
(1 ..
$initial_artists_cnt
) {
is (
$rs
->
next
->artistid,
$_
,
'Default fixture artists in order'
) ||
exit
;
}
my
$foo_artist
=
$rs
->
next
;
is (
$foo_artist
->cds->
next
->tracks->
next
->title,
'footrack'
,
'Right track'
);
is (
[
$rs
->cursor->
next
]->[0],
$initial_artists_cnt
+ 3,
'Very last artist still on the cursor'
);
is_deeply ([
$rs
->cursor->
next
], [],
'Nothing else left'
);
is (
$rs
->
next
->artistid,
$initial_artists_cnt
+ 2,
'Row stashed in resultset still accessible'
);
is (
$rs
->
next
,
undef
,
'Nothing left in resultset either'
);
$rs
->
reset
;
}
$rs
->
next
;
my
@objs
=
$rs
->all;
is (
@objs
,
$initial_artists_cnt
+ 3,
'->all resets everything correctly'
);
is ( (
$rs
->cursor->
next
)[0], 1,
'Cursor auto-rewound after all()'
);
is (
$rs
->{_stashed_rows},
undef
,
'Nothing else left in $rs stash'
);
my
$unordered_rs
=
$rs
->search({}, {
order_by
=>
'cds.title'
});
warnings_exist {
ok (
$unordered_rs
->
next
,
'got row 1'
);
}
qr/performed an eager cursor slurp underneath/
,
'Warned on auto-eager cursor'
;
is_deeply ([
$unordered_rs
->cursor->
next
], [],
'Nothing left on cursor, eager slurp'
);
ok (
$unordered_rs
->
next
,
"got row $_"
)
for
(2 ..
$initial_artists_cnt
+ 3);
is (
$unordered_rs
->
next
,
undef
,
'End of RS reached'
);
is (
$unordered_rs
->
next
,
undef
,
'End of RS not lost'
);
{
my
$non_uniquely_ordered_constrained
=
$schema
->resultset(
'CD'
)->search(
{
artist
=> 1 },
{
order_by
=> [
qw( me.genreid me.title me.year )
],
prefetch
=>
'tracks'
},
);
isa_ok (
$non_uniquely_ordered_constrained
->
next
,
'DBICTest::CD'
);
ok(
defined
$non_uniquely_ordered_constrained
->cursor->
next
,
'Cursor not exhausted'
);
}
done_testing;