Tim Bunce wrote: > > 4/ Add the ability to fetch a subset of rows in a single call. > I'm thinking in terms of adding a parameter to fetchall_arrayref > to request that only N rows be fetched. I use a GetRows function for this purpose - it's basically a copy of the selectall_arrayref/fetchall_arrayref code, with added $top parameter - syntax is:
$ary_ref = GetRows($dbh, $stmt, $top, \%attr, @bind) $dbh a database handle $stmt a prepared statement handle or SQL statement $top a possitive integer to limit the number of rows returned \%attr a hash reference to pass driver specific hints @bind a list of bind parameters If $top <1 it returns all rows If $top > 0, $sth->finish is called before the function returns. Recently I have considered changing the spec so that $sth->finish is not called automatically in order to facilitate retrieving more $top rows from $sth later. However, this leads to a problem whereby, if $stmt is a SQL statment (requiring the funtion to create a temporary statement handle), if $sth->finish is not called before returning from the function but there are rows left in the query an error will occur as the function returns and the statement handle is detroyed. This can be solved by only calling $sth->finish if $top > 1 and !ref($stmt), but this would nead to be clearly documented. (Did that make any sense?) > I'm also thinking of adding > a parameter to pass in a reference to any array onto which you'd > like the new rows pushed. That would also be useful. But how would you implement these changes without compromising backward compatibility? -- Simon Oliver
