forked from qt-creator/qt-creator
Sqlite: Add extended exceptions for readonly errors
Change-Id: I96a8f1c87ce116e99b7e6333166299b39fb9c27c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -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())};
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user