Sqlite: Add extended exceptions for connection lock errors

Change-Id: If6f6cd6ba67edc8716f3c43b832642244fc1e1c3
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2023-03-13 18:27:28 +01:00
parent 481c82b957
commit 48442b991f
4 changed files with 27 additions and 7 deletions

View File

@@ -384,9 +384,11 @@ void BaseStatement::checkForStepError(int resultCode) const
throwDataTypeMismatch(
"SqliteStatement::stepStatement: Most probably you used not an integer for a rowid.");
case SQLITE_LOCKED_SHAREDCACHE:
throw ConnectionsSharedCacheIsLocked(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_LOCKED_VTAB:
throw ConnectionsVirtualTableIsLocked(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_LOCKED:
throwConnectionIsLocked("SqliteStatement::stepStatement: Database connection is locked.");
throw ConnectionIsLocked(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_IOERR_READ:
throw InputOutputCannotRead();
case SQLITE_IOERR_SHORT_READ:
@@ -654,11 +656,6 @@ void BaseStatement::throwDataTypeMismatch(const char *) const
throw DataTypeMismatch{sqlite3_errmsg(sqliteDatabaseHandle())};
}
void BaseStatement::throwConnectionIsLocked(const char *) const
{
throw ConnectionIsLocked{sqlite3_errmsg(sqliteDatabaseHandle())};
}
void BaseStatement::throwExecutionInterrupted(const char *) const
{
throw ExecutionInterrupted{};

View File

@@ -129,7 +129,6 @@ public:
[[noreturn]] void throwProtocolError(const char *whatHasHappened) const;
[[noreturn]] void throwDatabaseExceedsMaximumFileSize(const char *whatHasHappened) const;
[[noreturn]] void throwDataTypeMismatch(const char *whatHasHappened) const;
[[noreturn]] void throwConnectionIsLocked(const char *whatHasHappened) const;
[[noreturn]] void throwExecutionInterrupted(const char *whatHasHappened) const;
[[noreturn]] void throwCannotOpen(const char *whatHasHappened) const;

View File

@@ -614,4 +614,14 @@ const char *CannotRollbackToReadOnlyConnection::what() const noexcept
return "Sqlite::CannotRollbackToReadOnlyConnection";
}
const char *ConnectionsSharedCacheIsLocked::what() const noexcept
{
return "Sqlite::ConnectionsSharedCacheIsLocked";
}
const char *ConnectionsVirtualTableIsLocked::what() const noexcept
{
return "Sqlite::ConnectionsVirtualTableIsLocked";
}
} // namespace Sqlite

View File

@@ -656,6 +656,20 @@ public:
const char *what() const noexcept override;
};
class SQLITE_EXPORT ConnectionsSharedCacheIsLocked : public ConnectionIsLocked
{
public:
using ConnectionIsLocked::ConnectionIsLocked;
const char *what() const noexcept override;
};
class SQLITE_EXPORT ConnectionsVirtualTableIsLocked : public ConnectionIsLocked
{
public:
using ConnectionIsLocked::ConnectionIsLocked;
const char *what() const noexcept override;
};
class SQLITE_EXPORT ExecutionInterrupted : public Exception
{
public: