DBIC で JOIN (prefetch) と rows の相性よくない?

以前も書いたように DBIC でのリレーションは,PREFETCH すると INNER JOIN や OUTER JOIN な SQL が発行されます。一方,ページャとして有用な page, rows アトリビュートは LIMIT, OFFSET を利用しています。ですから,

my $artists = $schema->resultset('Artist')->search(
  {
  },
  {
    page => 1,
    rows => 5,
    prefetch => [ 'albums' ],
  }
);

みたいにして artist を5人アルバム情報込みでゲットだぜ,と思うとはまります(アルバム情報5つ分だけゲットだぜ)。と思う(すくなくとも 0.60 では)。というか今日はまりました。原理としては「たしかにそうだろ」とは思うのですが,直感的じゃないですね。

では,どうするかというと,

my $artists = $schema->resultset('Artist')->search(
  {
  },
  {
    page => 1,
    rows => 5,
  }
);
while (my $artist = $artists->next) {
  my $albums = $artist->search_related('albums');
  # ...
  # blah blah
  # ...
}

みたく自力でフェッチしていくしか(むろんこの例だと search_related 使わなくても $artist->albums でとれるんですが,より凝った条件を指定したかったり,Artist からさらに prefetch したい場合とかのことを考えると使って損はありませんよね)。