forked from qt-creator/qt-creator
Sqlite: Add extended exceptions for busy errors
Change-Id: I812650401f4a5d5a099abc0183d2f7ed4e1d64c6 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -310,11 +310,13 @@ void BaseStatement::checkForStepError(int resultCode) const
|
|||||||
{
|
{
|
||||||
switch (resultCode) {
|
switch (resultCode) {
|
||||||
case SQLITE_BUSY_RECOVERY:
|
case SQLITE_BUSY_RECOVERY:
|
||||||
|
throw StatementIsBusyRecovering(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY_SNAPSHOT:
|
case SQLITE_BUSY_SNAPSHOT:
|
||||||
|
throw StatementIsBusySnapshot(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY_TIMEOUT:
|
case SQLITE_BUSY_TIMEOUT:
|
||||||
|
throw StatementIsBusyTimeout(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY:
|
case SQLITE_BUSY:
|
||||||
throwStatementIsBusy("SqliteStatement::stepStatement: database engine was unable to "
|
throw StatementIsBusy(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
"acquire the database locks!");
|
|
||||||
case SQLITE_ERROR_MISSING_COLLSEQ:
|
case SQLITE_ERROR_MISSING_COLLSEQ:
|
||||||
case SQLITE_ERROR_RETRY:
|
case SQLITE_ERROR_RETRY:
|
||||||
case SQLITE_ERROR_SNAPSHOT:
|
case SQLITE_ERROR_SNAPSHOT:
|
||||||
@@ -459,11 +461,13 @@ void BaseStatement::checkForPrepareError(int resultCode) const
|
|||||||
{
|
{
|
||||||
switch (resultCode) {
|
switch (resultCode) {
|
||||||
case SQLITE_BUSY_RECOVERY:
|
case SQLITE_BUSY_RECOVERY:
|
||||||
|
throw StatementIsBusyRecovering(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY_SNAPSHOT:
|
case SQLITE_BUSY_SNAPSHOT:
|
||||||
|
throw StatementIsBusySnapshot(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY_TIMEOUT:
|
case SQLITE_BUSY_TIMEOUT:
|
||||||
|
throw StatementIsBusyTimeout(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
case SQLITE_BUSY:
|
case SQLITE_BUSY:
|
||||||
throwStatementIsBusy("SqliteStatement::prepareStatement: database engine was unable to "
|
throw StatementIsBusy(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
"acquire the database locks!");
|
|
||||||
case SQLITE_ERROR_MISSING_COLLSEQ:
|
case SQLITE_ERROR_MISSING_COLLSEQ:
|
||||||
case SQLITE_ERROR_RETRY:
|
case SQLITE_ERROR_RETRY:
|
||||||
case SQLITE_ERROR_SNAPSHOT:
|
case SQLITE_ERROR_SNAPSHOT:
|
||||||
@@ -574,11 +578,6 @@ bool BaseStatement::isReadOnlyStatement() const
|
|||||||
return sqlite3_stmt_readonly(m_compiledStatement.get());
|
return sqlite3_stmt_readonly(m_compiledStatement.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseStatement::throwStatementIsBusy(const char *) const
|
|
||||||
{
|
|
||||||
throw StatementIsBusy(sqlite3_errmsg(sqliteDatabaseHandle()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseStatement::throwStatementHasError(const char *) const
|
void BaseStatement::throwStatementHasError(const char *) const
|
||||||
{
|
{
|
||||||
throw StatementHasError(sqlite3_errmsg(sqliteDatabaseHandle()));
|
throw StatementHasError(sqlite3_errmsg(sqliteDatabaseHandle()));
|
||||||
|
@@ -117,7 +117,6 @@ public:
|
|||||||
void checkBindingParameterCount(int bindingParameterCount) const;
|
void checkBindingParameterCount(int bindingParameterCount) const;
|
||||||
void checkColumnCount(int columnCount) const;
|
void checkColumnCount(int columnCount) const;
|
||||||
bool isReadOnlyStatement() const;
|
bool isReadOnlyStatement() const;
|
||||||
[[noreturn]] void throwStatementIsBusy(const char *whatHasHappened) const;
|
|
||||||
[[noreturn]] void throwStatementHasError(const char *whatHasHappened) const;
|
[[noreturn]] void throwStatementHasError(const char *whatHasHappened) const;
|
||||||
[[noreturn]] void throwStatementIsMisused(const char *whatHasHappened) const;
|
[[noreturn]] void throwStatementIsMisused(const char *whatHasHappened) const;
|
||||||
[[noreturn]] void throwConstraintPreventsModification(const char *whatHasHappened) const;
|
[[noreturn]] void throwConstraintPreventsModification(const char *whatHasHappened) const;
|
||||||
|
@@ -420,8 +420,11 @@ void DatabaseBackend::walCheckpointFull()
|
|||||||
case SQLITE_OK:
|
case SQLITE_OK:
|
||||||
break;
|
break;
|
||||||
case SQLITE_BUSY_RECOVERY:
|
case SQLITE_BUSY_RECOVERY:
|
||||||
|
throw DatabaseIsBusyRecovering();
|
||||||
case SQLITE_BUSY_SNAPSHOT:
|
case SQLITE_BUSY_SNAPSHOT:
|
||||||
|
throw DatabaseIsBusySnapshot();
|
||||||
case SQLITE_BUSY_TIMEOUT:
|
case SQLITE_BUSY_TIMEOUT:
|
||||||
|
throw DatabaseIsBusyTimeout();
|
||||||
case SQLITE_BUSY:
|
case SQLITE_BUSY:
|
||||||
throw DatabaseIsBusy();
|
throw DatabaseIsBusy();
|
||||||
case SQLITE_ERROR_MISSING_COLLSEQ:
|
case SQLITE_ERROR_MISSING_COLLSEQ:
|
||||||
|
@@ -464,4 +464,34 @@ const char *InputOutputCannotRead::what() const noexcept
|
|||||||
return "Sqlite::InputOutputCannotRead";
|
return "Sqlite::InputOutputCannotRead";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *StatementIsBusyRecovering::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::StatementIsBusyRecovering";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *StatementIsBusySnapshot::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::StatementIsBusySnapshot";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *StatementIsBusyTimeout::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::StatementIsBusyTimeout";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *DatabaseIsBusyRecovering::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::DatabaseIsBusyRecovering";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *DatabaseIsBusySnapshot::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::DatabaseIsBusySnapshot";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *DatabaseIsBusyTimeout::what() const noexcept
|
||||||
|
{
|
||||||
|
return "Sqlite::DatabaseIsBusyTimeout";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Sqlite
|
} // namespace Sqlite
|
||||||
|
@@ -40,6 +40,27 @@ public:
|
|||||||
const char *what() const noexcept override;
|
const char *what() const noexcept override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT StatementIsBusyRecovering : public StatementIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using StatementIsBusy::StatementIsBusy;
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT StatementIsBusySnapshot : public StatementIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using StatementIsBusy::StatementIsBusy;
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT StatementIsBusyTimeout : public StatementIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
using StatementIsBusy::StatementIsBusy;
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
class SQLITE_EXPORT DatabaseIsBusy : public Exception
|
class SQLITE_EXPORT DatabaseIsBusy : public Exception
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -47,6 +68,24 @@ public:
|
|||||||
const char *what() const noexcept override;
|
const char *what() const noexcept override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT DatabaseIsBusyRecovering : public DatabaseIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT DatabaseIsBusySnapshot : public DatabaseIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SQLITE_EXPORT DatabaseIsBusyTimeout : public DatabaseIsBusy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const char *what() const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
class SQLITE_EXPORT StatementHasError : public ExceptionWithMessage
|
class SQLITE_EXPORT StatementHasError : public ExceptionWithMessage
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Reference in New Issue
Block a user