I also have a question. MySQL potentially produces result sets of up to 64 bit size - rows. The MySQL client theoretically copes with these by storing a result set as a doubly linked list, and there's nothing to stop me doing the same. But is it necessary?
Why not return a range, that will fetch next row when needed? popFront() will call socket's recv, parse and then store that row for the front() calls. This may be internally buffered to 100 rows or so.
Example: https://github.com/pszturmaj/ddb/blob/master/postgres.d#L2145
