diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp index e1acef8be1d..844e9ff4a83 100644 --- a/src/libs/sqlite/sqlitebasestatement.cpp +++ b/src/libs/sqlite/sqlitebasestatement.cpp @@ -359,14 +359,19 @@ void BaseStatement::checkForStepError(int resultCode) const throwSchemaChangeError("SqliteStatement::stepStatement: Schema changed but the statement " "cannot be recompiled."); case SQLITE_READONLY_CANTINIT: + throw CannotInitializeReadOnlyConnection(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY_CANTLOCK: + throw CannotLockReadOnlyConnection(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY_DBMOVED: + throw CannotWriteToMovedDatabase(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY_DIRECTORY: + throw CannotCreateLogInReadonlyDirectory(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY_RECOVERY: + throw DatabaseNeedsToBeRecovered(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY_ROLLBACK: + throw CannotRollbackToReadOnlyConnection(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_READONLY: - throwCannotWriteToReadOnlyConnection( - "SqliteStatement::stepStatement: Cannot write to read only connection"); + throw CannotWriteToReadOnlyConnection(sqlite3_errmsg(sqliteDatabaseHandle())); case SQLITE_PROTOCOL: throwProtocolError( "SqliteStatement::stepStatement: Something strang with the file locking happened."); @@ -634,11 +639,6 @@ void BaseStatement::throwSchemaChangeError(const char *) const throw SchemeChangeError{sqlite3_errmsg(sqliteDatabaseHandle())}; } -void BaseStatement::throwCannotWriteToReadOnlyConnection(const char *) const -{ - throw CannotWriteToReadOnlyConnection{sqlite3_errmsg(sqliteDatabaseHandle())}; -} - void BaseStatement::throwProtocolError(const char *) const { throw ProtocolError{sqlite3_errmsg(sqliteDatabaseHandle())}; diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 285b50094a8..04d3c539f73 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -126,7 +126,6 @@ public: [[noreturn]] void throwBingingTooBig(const char *whatHasHappened) const; [[noreturn]] void throwTooBig(const char *whatHasHappened) const; [[noreturn]] void throwSchemaChangeError(const char *whatHasHappened) const; - [[noreturn]] void throwCannotWriteToReadOnlyConnection(const char *whatHasHappened) const; [[noreturn]] void throwProtocolError(const char *whatHasHappened) const; [[noreturn]] void throwDatabaseExceedsMaximumFileSize(const char *whatHasHappened) const; [[noreturn]] void throwDataTypeMismatch(const char *whatHasHappened) const; diff --git a/src/libs/sqlite/sqliteexception.cpp b/src/libs/sqlite/sqliteexception.cpp index fd834e70451..2243031c1df 100644 --- a/src/libs/sqlite/sqliteexception.cpp +++ b/src/libs/sqlite/sqliteexception.cpp @@ -584,4 +584,34 @@ const char *DatabaseHasCorruptVirtualTable::what() const noexcept return "Sqlite::DatabaseHasCorruptVirtualTable"; } +const char *CannotInitializeReadOnlyConnection::what() const noexcept +{ + return "Sqlite::CannotInitializeReadOnlyConnection"; +} + +const char *CannotLockReadOnlyConnection::what() const noexcept +{ + return "Sqlite::CannotLockReadOnlyConnection"; +} + +const char *CannotWriteToMovedDatabase::what() const noexcept +{ + return "Sqlite::CannotWriteToMovedDatabase"; +} + +const char *CannotCreateLogInReadonlyDirectory::what() const noexcept +{ + return "Sqlite::CannotCreateLogInReadonlyDirectory"; +} + +const char *DatabaseNeedsToBeRecovered::what() const noexcept +{ + return "Sqlite::DatabaseNeedsToBeRecovered"; +} + +const char *CannotRollbackToReadOnlyConnection::what() const noexcept +{ + return "Sqlite::CannotRollbackToReadOnlyConnection"; +} + } // namespace Sqlite diff --git a/src/libs/sqlite/sqliteexception.h b/src/libs/sqlite/sqliteexception.h index 0ef1ccf49cf..eb870693157 100644 --- a/src/libs/sqlite/sqliteexception.h +++ b/src/libs/sqlite/sqliteexception.h @@ -586,6 +586,48 @@ public: const char *what() const noexcept override; }; +class SQLITE_EXPORT CannotInitializeReadOnlyConnection : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotLockReadOnlyConnection : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotWriteToMovedDatabase : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotCreateLogInReadonlyDirectory : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT DatabaseNeedsToBeRecovered : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotRollbackToReadOnlyConnection : public CannotWriteToReadOnlyConnection +{ +public: + using CannotWriteToReadOnlyConnection::CannotWriteToReadOnlyConnection; + const char *what() const noexcept override; +}; + class SQLITE_EXPORT ProtocolError : public ExceptionWithMessage { public: