Clean up workaround for sqlite opening errors
Now that we know the real cause, we can be a bit stricter with our workaround.
This commit is contained in:
parent
59af280f5c
commit
91b8002dd5
@ -89,12 +89,13 @@ def raise_sqlite_error(msg, error):
|
|||||||
"""Raise either a SqlBugError or SqlEnvironmentError."""
|
"""Raise either a SqlBugError or SqlEnvironmentError."""
|
||||||
error_code = error.nativeErrorCode()
|
error_code = error.nativeErrorCode()
|
||||||
database_text = error.databaseText()
|
database_text = error.databaseText()
|
||||||
|
driver_text = error.driverText()
|
||||||
|
|
||||||
log.sql.debug("SQL error:")
|
log.sql.debug("SQL error:")
|
||||||
log.sql.debug("type: {}".format(
|
log.sql.debug("type: {}".format(
|
||||||
debug.qenum_key(QSqlError, error.type())))
|
debug.qenum_key(QSqlError, error.type())))
|
||||||
log.sql.debug("database text: {}".format(database_text))
|
log.sql.debug("database text: {}".format(database_text))
|
||||||
log.sql.debug("driver text: {}".format(error.driverText()))
|
log.sql.debug("driver text: {}".format(driver_text))
|
||||||
log.sql.debug("error code: {}".format(error_code))
|
log.sql.debug("error code: {}".format(error_code))
|
||||||
|
|
||||||
environmental_errors = [
|
environmental_errors = [
|
||||||
@ -105,18 +106,15 @@ def raise_sqlite_error(msg, error):
|
|||||||
SqliteErrorCode.FULL,
|
SqliteErrorCode.FULL,
|
||||||
SqliteErrorCode.CANTOPEN,
|
SqliteErrorCode.CANTOPEN,
|
||||||
]
|
]
|
||||||
# At least in init(), we can get errors like this:
|
|
||||||
# > type: ConnectionError
|
|
||||||
# > database text: out of memory
|
|
||||||
# > driver text: Error opening database
|
|
||||||
# > error code: -1
|
|
||||||
environmental_strings = [
|
|
||||||
"out of memory",
|
|
||||||
]
|
|
||||||
|
|
||||||
if (error_code in environmental_errors or
|
# WORKAROUND for https://bugreports.qt.io/browse/QTBUG-70506
|
||||||
(error_code == SqliteErrorCode.UNKNOWN and
|
# We don't know what the actual error was, but let's assume it's not us to
|
||||||
database_text in environmental_strings)):
|
# blame... Usually this is something like an unreadable database file.
|
||||||
|
qtbug_70506 = (error_code == SqliteErrorCode.UNKNOWN and
|
||||||
|
driver_text == "Error opening database" and
|
||||||
|
database_text == "out of memory")
|
||||||
|
|
||||||
|
if error_code in environmental_errors or qtbug_70506:
|
||||||
raise SqlEnvironmentError(msg, error)
|
raise SqlEnvironmentError(msg, error)
|
||||||
else:
|
else:
|
||||||
raise SqlBugError(msg, error)
|
raise SqlBugError(msg, error)
|
||||||
|
@ -49,9 +49,13 @@ class TestSqlError:
|
|||||||
with pytest.raises(exception):
|
with pytest.raises(exception):
|
||||||
sql.raise_sqlite_error("Message", sql_err)
|
sql.raise_sqlite_error("Message", sql_err)
|
||||||
|
|
||||||
def test_out_of_memory(self):
|
def test_qtbug_70506(self):
|
||||||
"""On out of memory error, we get an error code '-1' from Qt."""
|
"""Test Qt's wrong handling of errors while opening the database.
|
||||||
sql_err = QSqlError("driver text",
|
|
||||||
|
Due to https://bugreports.qt.io/browse/QTBUG-70506 we get an error with
|
||||||
|
"out of memory" as string and -1 as error code.
|
||||||
|
"""
|
||||||
|
sql_err = QSqlError("Error opening database",
|
||||||
"out of memory",
|
"out of memory",
|
||||||
QSqlError.UnknownError,
|
QSqlError.UnknownError,
|
||||||
sql.SqliteErrorCode.UNKNOWN)
|
sql.SqliteErrorCode.UNKNOWN)
|
||||||
|
Loading…
Reference in New Issue
Block a user