diff options
author | Marco Bubke <[email protected]> | 2023-03-13 19:12:41 +0100 |
---|---|---|
committer | Marco Bubke <[email protected]> | 2023-03-15 11:34:43 +0000 |
commit | 0e3c1255050e4927de5a50d7e5b96a479920a353 (patch) | |
tree | d42d2d2b2c3530459a20ef644344f5b5b5623a34 /src/libs/sqlite/sqliteexception.cpp | |
parent | 471aa774c74a0b4bba7635a9f8c4b471fb5a104d (diff) |
Sqlite: Generalize error handling
Instead of having multiple error handling function just have one which
handles all error codes.
Change-Id: I6fc0484a335dcf582fc93159a9fdb0fea440daca
Reviewed-by: Qt CI Bot <[email protected]>
Reviewed-by: Tim Jenssen <[email protected]>
Diffstat (limited to 'src/libs/sqlite/sqliteexception.cpp')
-rw-r--r-- | src/libs/sqlite/sqliteexception.cpp | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/src/libs/sqlite/sqliteexception.cpp b/src/libs/sqlite/sqliteexception.cpp index 9b86b955b3d..a58c4892882 100644 --- a/src/libs/sqlite/sqliteexception.cpp +++ b/src/libs/sqlite/sqliteexception.cpp @@ -5,6 +5,8 @@ #include <utils/smallstringio.h> +#include <sqlite.h> + #include <QDebug> namespace Sqlite { @@ -654,4 +656,185 @@ const char *CannotOpenSynbolicLink::what() const noexcept return "Sqlite::CannotOpenSynbolicLink"; } +void throwError(int resultCode, sqlite3 *sqliteHandle) +{ + switch (resultCode) { + case SQLITE_BUSY_RECOVERY: + throw StatementIsBusyRecovering(sqlite3_errmsg(sqliteHandle)); + case SQLITE_BUSY_SNAPSHOT: + throw StatementIsBusySnapshot(sqlite3_errmsg(sqliteHandle)); + case SQLITE_BUSY_TIMEOUT: + throw StatementIsBusyTimeout(sqlite3_errmsg(sqliteHandle)); + case SQLITE_BUSY: + throw StatementIsBusy(sqlite3_errmsg(sqliteHandle)); + case SQLITE_ERROR_MISSING_COLLSEQ: + throw StatementHasErrorMissingCollatingSequence(sqlite3_errmsg(sqliteHandle)); + case SQLITE_ERROR_RETRY: + throw StatementHasErrorRetry(sqlite3_errmsg(sqliteHandle)); + case SQLITE_ERROR_SNAPSHOT: + throw StatementHasErrorSnapshot(sqlite3_errmsg(sqliteHandle)); + case SQLITE_ERROR: + throw StatementHasError(sqlite3_errmsg(sqliteHandle)); + case SQLITE_MISUSE: + throw StatementIsMisused(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_CHECK: + throw CheckConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_COMMITHOOK: + throw CommitHookConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_DATATYPE: + throw DataTypeConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_FOREIGNKEY: + throw ForeignKeyConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_FUNCTION: + throw FunctionConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_NOTNULL: + throw NotNullConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_PINNED: + throw PinnedConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_PRIMARYKEY: + throw PrimaryKeyConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_ROWID: + throw RowIdConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_TRIGGER: + throw TriggerConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_UNIQUE: + throw UniqueConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT_VTAB: + throw VirtualTableConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_CONSTRAINT: + throw ConstraintPreventsModification(sqlite3_errmsg(sqliteHandle)); + case SQLITE_TOOBIG: + throw TooBig(sqlite3_errmsg(sqliteHandle)); + case SQLITE_SCHEMA: + throw SchemeChangeError(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_CANTINIT: + throw CannotInitializeReadOnlyConnection(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_CANTLOCK: + throw CannotLockReadOnlyConnection(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_DBMOVED: + throw CannotWriteToMovedDatabase(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_DIRECTORY: + throw CannotCreateLogInReadonlyDirectory(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_RECOVERY: + throw DatabaseNeedsToBeRecovered(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY_ROLLBACK: + throw CannotRollbackToReadOnlyConnection(sqlite3_errmsg(sqliteHandle)); + case SQLITE_READONLY: + throw CannotWriteToReadOnlyConnection(sqlite3_errmsg(sqliteHandle)); + case SQLITE_PROTOCOL: + throw ProtocolError(sqlite3_errmsg(sqliteHandle)); + case SQLITE_NOMEM: + throw std::bad_alloc(); + case SQLITE_NOLFS: + throw DatabaseExceedsMaximumFileSize(sqlite3_errmsg(sqliteHandle)); + case SQLITE_MISMATCH: + throw DataTypeMismatch(sqlite3_errmsg(sqliteHandle)); + case SQLITE_LOCKED_SHAREDCACHE: + throw ConnectionsSharedCacheIsLocked(sqlite3_errmsg(sqliteHandle)); + case SQLITE_LOCKED_VTAB: + throw ConnectionsVirtualTableIsLocked(sqlite3_errmsg(sqliteHandle)); + case SQLITE_LOCKED: + throw ConnectionIsLocked(sqlite3_errmsg(sqliteHandle)); + case SQLITE_IOERR_READ: + throw InputOutputCannotRead(); + case SQLITE_IOERR_SHORT_READ: + throw InputOutputCannotShortRead(); + case SQLITE_IOERR_WRITE: + throw InputOutputCannotWrite(); + case SQLITE_IOERR_FSYNC: + throw InputOutputCannotSynchronizeFile(); + case SQLITE_IOERR_DIR_FSYNC: + throw InputOutputCannotSynchronizeDirectory(); + case SQLITE_IOERR_TRUNCATE: + throw InputOutputCannotTruncate(); + case SQLITE_IOERR_FSTAT: + throw InputOutputCannotFsStat(); + case SQLITE_IOERR_UNLOCK: + throw InputOutputCannotUnlock(); + case SQLITE_IOERR_RDLOCK: + throw InputOutputCannotReadLock(); + case SQLITE_IOERR_DELETE: + throw InputOutputCannotDelete(); + case SQLITE_IOERR_BLOCKED: + throw InputOutputBlocked(); + case SQLITE_IOERR_NOMEM: + throw InputOutputNoMemory(); + case SQLITE_IOERR_ACCESS: + throw InputOutputCannotAccess(); + case SQLITE_IOERR_CHECKRESERVEDLOCK: + throw InputOutputCannotCheckReservedLock(); + case SQLITE_IOERR_LOCK: + throw InputOutputCannotLock(); + case SQLITE_IOERR_CLOSE: + throw InputOutputCannotClose(); + case SQLITE_IOERR_DIR_CLOSE: + throw InputOutputCannotCloseDirectory(); + case SQLITE_IOERR_SHMOPEN: + throw InputOutputCannotOpenSharedMemory(); + case SQLITE_IOERR_SHMSIZE: + throw InputOutputCannotEnlargeSharedMemory(); + case SQLITE_IOERR_SHMLOCK: + throw InputOutputCannotLockSharedMemory(); + case SQLITE_IOERR_SHMMAP: + throw InputOutputCannotMapSharedMemory(); + case SQLITE_IOERR_SEEK: + throw InputOutputCannotSeek(); + case SQLITE_IOERR_DELETE_NOENT: + throw InputOutputCannotDeleteNonExistingFile(); + case SQLITE_IOERR_MMAP: + throw InputOutputCannotMemoryMap(); + case SQLITE_IOERR_GETTEMPPATH: + throw InputOutputCannotGetTemporaryPath(); + case SQLITE_IOERR_CONVPATH: + throw InputOutputConvPathFailed(); + case SQLITE_IOERR_VNODE: + throw InputOutputVNodeError(); + case SQLITE_IOERR_AUTH: + throw InputOutputCannotAuthenticate(); + case SQLITE_IOERR_BEGIN_ATOMIC: + throw InputOutputCannotBeginAtomic(); + case SQLITE_IOERR_COMMIT_ATOMIC: + throw InputOutputCannotCommitAtomic(); + case SQLITE_IOERR_ROLLBACK_ATOMIC: + throw InputOutputCannotRollbackAtomic(); + case SQLITE_IOERR_DATA: + throw InputOutputDataError(); + case SQLITE_IOERR_CORRUPTFS: + throw InputOutputFileSystemIsCorrupt(); + case SQLITE_IOERR: + throw InputOutputError(); + case SQLITE_INTERRUPT: + throw ExecutionInterrupted(); + case SQLITE_CORRUPT_INDEX: + throw DatabaseHasCorruptIndex(); + case SQLITE_CORRUPT_SEQUENCE: + throw DatabaseHasCorruptSequence(); + case SQLITE_CORRUPT_VTAB: + throw DatabaseHasCorruptVirtualTable(); + 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: + throw CannotOpen(); + case SQLITE_RANGE: + throw BindingIndexIsOutOfRange(sqlite3_errmsg(sqliteHandle)); + } + + if (sqliteHandle) + throw UnknowError(sqlite3_errmsg(sqliteHandle)); + else + throw UnknowError(); +} + } // namespace Sqlite |