1 # Test to ensure we get a consistent result set wether or not we use the
2 # prefetch option in combination rows (LIMIT).
10 plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 2);
12 my $schema = DBICTest->init_schema();
13 $schema->storage->debug(1);
14 my $no_prefetch = $schema->resultset('Artist')->search(
19 my $use_prefetch = $schema->resultset('Artist')->search(
27 my $no_prefetch_count = 0;
28 my $use_prefetch_count = 0;
30 is($no_prefetch->count, $use_prefetch->count, '$no_prefetch->count == $use_prefetch->count');
32 # The fix is to, when using prefetch, take the query and put it into a subquery
33 # joined to the tables we're prefetching from. This might result in the same
34 # table being joined once in the main subquery and once in the main query. This
35 # may actually resolve other, unknown edgecase bugs. It is also the right way
36 # to do prefetching. Optimizations can come later.
39 local $TODO = "This is a difficult bug to fix, workaround is not to use prefetch with rows";
40 $no_prefetch_count++ while $no_prefetch->next;
41 $use_prefetch_count++ while $use_prefetch->next;
45 "manual row count confirms consistency"
46 . " (\$no_prefetch_count == $no_prefetch_count, "
47 . " \$use_prefetch_count == $use_prefetch_count)"