I think the new streaming behavior in Sql.mysql.big_query is nice and as it should be, but it's causing too much headaches in existing applications - the old de-facto behavior is too ingrained.
So a proposal is to instead do like this:
query: Like today - slow and memory consuming. big_query: A variant of query() that still is nonstreaming. I.e. it only avoids the very bulky response format of query(). streaming_query: Like big_query but guaranteed to stream if it exists. It's database dependent whether other queries can be issued while a streaming_query response object exists. It's of course also database dependent if there are locks on the tables in the server while the response object exists.
While at it, we could also consider generalizing the big_typed_query interface that the oracle module provides:
big_typed_query: Like big_query but doesn't convert everything to strings. Integers and floats are kept that way, Date/timestamps are Calendar objects, there are objects for representing the NULL value for each type. streaming_typed_query: Streaming variant of big_typed_query.