a) Check commit b68a9916007c680a005817806e5e1f1c95be9153.
b) I am not sure what the best way is here. I have considered re-arranging the logic, like you suggested, and extracting code into a function, but I am not happy with the results. It is not that I feel this is the best possible approach, but as far as I can tell it is the most straight-forward and with less repetitions. Maybe a whole rewrite of the function would help. Any ideas are appreciated.

Regarding using subclasses, I feel that it is better *in this particular case* to have all options under the same function, so that readers can easily see all code paths.

c) The counter-argument for the exception is that code that is written for backends that do support returning multiple fields (e.g. with postgreSQL) can be used with backends that don't, such as MySQL. If you take a closer look, we populate the fields with a second query in the latter case.