From 471aa774c74a0b4bba7635a9f8c4b471fb5a104d Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 13 Mar 2023 18:39:37 +0100 Subject: [PATCH] Sqlite: Add extended exceptions for can't open errors Change-Id: Ib092b5fe721b8b063f8c503cc1a650447e393951 Reviewed-by: Qt CI Bot Reviewed-by: Tim Jenssen --- src/libs/sqlite/sqlitebasestatement.cpp | 13 ++++---- src/libs/sqlite/sqlitebasestatement.h | 1 - src/libs/sqlite/sqliteexception.cpp | 30 ++++++++++++++++++ src/libs/sqlite/sqliteexception.h | 42 +++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp index 435e20d97ca..634b058c52a 100644 --- a/src/libs/sqlite/sqlitebasestatement.cpp +++ b/src/libs/sqlite/sqlitebasestatement.cpp @@ -468,13 +468,19 @@ void BaseStatement::checkForStepError(int resultCode) const case SQLITE_CORRUPT: throw DatabaseIsCorrupt(); case SQLITE_CANTOPEN_CONVPATH: + throw CannotOpenConvPath(); case SQLITE_CANTOPEN_DIRTYWAL: + throw CannotOpenDirtyWal(); case SQLITE_CANTOPEN_FULLPATH: + throw CannotCovertToFullPath(); case SQLITE_CANTOPEN_ISDIR: + throw CannotOpenDirectoryPath(); case SQLITE_CANTOPEN_NOTEMPDIR: + throw CannotOpenNoTempDir(); case SQLITE_CANTOPEN_SYMLINK: + throw CannotOpenSynbolicLink(); case SQLITE_CANTOPEN: - throwCannotOpen("SqliteStatement::stepStatement: Cannot open database or temporary file."); + throw CannotOpen(); } throwUnknowError("SqliteStatement::stepStatement: unknown error has happened"); @@ -661,11 +667,6 @@ void BaseStatement::throwExecutionInterrupted(const char *) const throw ExecutionInterrupted{}; } -void BaseStatement::throwCannotOpen(const char *) const -{ - throw CannotOpen{}; -} - QString BaseStatement::columnName(int column) const { return QString::fromUtf8(sqlite3_column_name(m_compiledStatement.get(), column)); diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index 422d11ed16d..338bb4110af 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -130,7 +130,6 @@ public: [[noreturn]] void throwDatabaseExceedsMaximumFileSize(const char *whatHasHappened) const; [[noreturn]] void throwDataTypeMismatch(const char *whatHasHappened) const; [[noreturn]] void throwExecutionInterrupted(const char *whatHasHappened) const; - [[noreturn]] void throwCannotOpen(const char *whatHasHappened) const; QString columnName(int column) const; diff --git a/src/libs/sqlite/sqliteexception.cpp b/src/libs/sqlite/sqliteexception.cpp index 8408df3d761..9b86b955b3d 100644 --- a/src/libs/sqlite/sqliteexception.cpp +++ b/src/libs/sqlite/sqliteexception.cpp @@ -624,4 +624,34 @@ const char *ConnectionsVirtualTableIsLocked::what() const noexcept return "Sqlite::ConnectionsVirtualTableIsLocked"; } +const char *CannotOpenConvPath::what() const noexcept +{ + return "Sqlite::CannotOpenConvPath"; +} + +const char *CannotOpenDirtyWal::what() const noexcept +{ + return "Sqlite::CannotOpenDirtyWal"; +} + +const char *CannotCovertToFullPath::what() const noexcept +{ + return "Sqlite::CannotCovertToFullPath"; +} + +const char *CannotOpenDirectoryPath::what() const noexcept +{ + return "Sqlite::CannotOpenDirectoryPath"; +} + +const char *CannotOpenNoTempDir::what() const noexcept +{ + return "Sqlite::CannotOpenNoTempDir"; +} + +const char *CannotOpenSynbolicLink::what() const noexcept +{ + return "Sqlite::CannotOpenSynbolicLink"; +} + } // namespace Sqlite diff --git a/src/libs/sqlite/sqliteexception.h b/src/libs/sqlite/sqliteexception.h index 81680e2d3d4..eefc109bb17 100644 --- a/src/libs/sqlite/sqliteexception.h +++ b/src/libs/sqlite/sqliteexception.h @@ -712,6 +712,48 @@ public: const char *what() const noexcept override; }; +class SQLITE_EXPORT CannotOpenConvPath : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotOpenDirtyWal : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotCovertToFullPath : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotOpenDirectoryPath : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotOpenNoTempDir : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + +class SQLITE_EXPORT CannotOpenSynbolicLink : public CannotOpen +{ +public: + using CannotOpen::CannotOpen; + const char *what() const noexcept override; +}; + class SQLITE_EXPORT CannotCreateChangeSetIterator : public Exception { public: