|Subject:||Grab rows smarter so that fetchrow_* while loops don't have to wait for the entire resultset first|
Essentially, this would be returning rows one at a time if the row could be reported on immediately. This would really only make sense on SELECT queries and only ones that didn't have ordering, grouping, or distinct. Making this work would basically involve breaking apart the SQLS::SELECT sub into two parts: pre_SELECT, row_SELECT, and the execute into: execute, post_execute. Any $sth->execute() command would stop at pre_SELECT (provided that the verboten conditions weren't in play) and return the call stack back to the user. Only on a fetch would it start looping (controlled via RowCacheSize) and then reporting the rows back to the user. Finally, post_execute would be called before passing the last set of rows. This would help out greatly on slower network-based DBD drivers, like DBD::SNMP.