So callers can handle this better, throw DBQueryTimeoutError on timeouts.
This class will be shared between DB engines, and subclass DBQueryError. IDatabase->reportQueryError can document that it may throw a subclass of DBQueryError, but engines can be updated one-by-one.