Sqlite: Add extended exceptions for corruption errors

Change-Id: I705bffc54def12e914caf31cacf870ad2f9cbeea
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:08:47 +01:00
parent 4502a02fbb
commit 176ecdb1db
4 changed files with 40 additions and 7 deletions

View File

@@ -453,10 +453,13 @@ void BaseStatement::checkForStepError(int resultCode) const
case SQLITE_INTERRUPT: case SQLITE_INTERRUPT:
throwExecutionInterrupted("SqliteStatement::stepStatement: Execution was interrupted."); throwExecutionInterrupted("SqliteStatement::stepStatement: Execution was interrupted.");
case SQLITE_CORRUPT_INDEX: case SQLITE_CORRUPT_INDEX:
throw DatabaseHasCorruptIndex();
case SQLITE_CORRUPT_SEQUENCE: case SQLITE_CORRUPT_SEQUENCE:
throw DatabaseHasCorruptSequence();
case SQLITE_CORRUPT_VTAB: case SQLITE_CORRUPT_VTAB:
throw DatabaseHasCorruptVirtualTable();
case SQLITE_CORRUPT: case SQLITE_CORRUPT:
throwDatabaseIsCorrupt("SqliteStatement::stepStatement: Database is corrupt."); throw DatabaseIsCorrupt();
case SQLITE_CANTOPEN_CONVPATH: case SQLITE_CANTOPEN_CONVPATH:
case SQLITE_CANTOPEN_DIRTYWAL: case SQLITE_CANTOPEN_DIRTYWAL:
case SQLITE_CANTOPEN_FULLPATH: case SQLITE_CANTOPEN_FULLPATH:
@@ -661,11 +664,6 @@ void BaseStatement::throwExecutionInterrupted(const char *) const
throw ExecutionInterrupted{}; throw ExecutionInterrupted{};
} }
void BaseStatement::throwDatabaseIsCorrupt(const char *) const
{
throw DatabaseIsCorrupt{};
}
void BaseStatement::throwCannotOpen(const char *) const void BaseStatement::throwCannotOpen(const char *) const
{ {
throw CannotOpen{}; throw CannotOpen{};

View File

@@ -132,7 +132,6 @@ public:
[[noreturn]] void throwDataTypeMismatch(const char *whatHasHappened) const; [[noreturn]] void throwDataTypeMismatch(const char *whatHasHappened) const;
[[noreturn]] void throwConnectionIsLocked(const char *whatHasHappened) const; [[noreturn]] void throwConnectionIsLocked(const char *whatHasHappened) const;
[[noreturn]] void throwExecutionInterrupted(const char *whatHasHappened) const; [[noreturn]] void throwExecutionInterrupted(const char *whatHasHappened) const;
[[noreturn]] void throwDatabaseIsCorrupt(const char *whatHasHappened) const;
[[noreturn]] void throwCannotOpen(const char *whatHasHappened) const; [[noreturn]] void throwCannotOpen(const char *whatHasHappened) const;
QString columnName(int column) const; QString columnName(int column) const;

View File

@@ -569,4 +569,19 @@ const char *VirtualTableConstraintPreventsModification::what() const noexcept
return "Sqlite::VirtualTableConstraintPreventsModification"; return "Sqlite::VirtualTableConstraintPreventsModification";
} }
const char *DatabaseHasCorruptIndex::what() const noexcept
{
return "Sqlite::DatabaseHasCorruptIndex";
}
const char *DatabaseHasCorruptSequence::what() const noexcept
{
return "Sqlite::DatabaseHasCorruptSequence";
}
const char *DatabaseHasCorruptVirtualTable::what() const noexcept
{
return "Sqlite::DatabaseHasCorruptVirtualTable";
}
} // namespace Sqlite } // namespace Sqlite

View File

@@ -628,6 +628,27 @@ public:
const char *what() const noexcept override; const char *what() const noexcept override;
}; };
class SQLITE_EXPORT DatabaseHasCorruptIndex : public DatabaseIsCorrupt
{
public:
using DatabaseIsCorrupt::DatabaseIsCorrupt;
const char *what() const noexcept override;
};
class SQLITE_EXPORT DatabaseHasCorruptSequence : public DatabaseIsCorrupt
{
public:
using DatabaseIsCorrupt::DatabaseIsCorrupt;
const char *what() const noexcept override;
};
class SQLITE_EXPORT DatabaseHasCorruptVirtualTable : public DatabaseIsCorrupt
{
public:
using DatabaseIsCorrupt::DatabaseIsCorrupt;
const char *what() const noexcept override;
};
class SQLITE_EXPORT CannotOpen : public Exception class SQLITE_EXPORT CannotOpen : public Exception
{ {
public: public: