diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp index 844e9ff4a83..435e20d97ca 100644 --- a/src/libs/sqlite/sqlitebasestatement.cpp +++ b/src/libs/sqlite/sqlitebasestatement.cpp @@ -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{}; diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 04d3c539f73..422d11ed16d 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -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; diff --git a/src/libs/sqlite/sqliteexception.cpp b/src/libs/sqlite/sqliteexception.cpp index 2243031c1df..8408df3d761 100644 --- a/src/libs/sqlite/sqliteexception.cpp +++ b/src/libs/sqlite/sqliteexception.cpp @@ -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 diff --git a/src/libs/sqlite/sqliteexception.h b/src/libs/sqlite/sqliteexception.h index eb870693157..81680e2d3d4 100644 --- a/src/libs/sqlite/sqliteexception.h +++ b/src/libs/sqlite/sqliteexception.h @@ -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: