Sqlite: Add extended exceptions for contraint errors

Change-Id: I2e3030de7496703ba1e9fbd1a28ed55061e1b2b5
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Marco Bubke
2023-03-13 16:00:29 +01:00
parent 37563679cc
commit 4502a02fbb
4 changed files with 158 additions and 8 deletions

View File

@@ -328,20 +328,31 @@ void BaseStatement::checkForStepError(int resultCode) const
case SQLITE_MISUSE:
throwStatementIsMisused("SqliteStatement::stepStatement: was called inappropriately!");
case SQLITE_CONSTRAINT_CHECK:
throw CheckConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_COMMITHOOK:
throw CommitHookConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_DATATYPE:
throw DataTypeConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_FOREIGNKEY:
throw ForeignKeyConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_FUNCTION:
throw FunctionConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_NOTNULL:
throw NotNullConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_PINNED:
throw PinnedConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_PRIMARYKEY:
throw PrimaryKeyConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_ROWID:
throw RowIdConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_TRIGGER:
throw TriggerConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_UNIQUE:
throw UniqueConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT_VTAB:
throw VirtualTableConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_CONSTRAINT:
throwConstraintPreventsModification(
"SqliteStatement::stepStatement: contraint prevent insert or update!");
throw ConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
case SQLITE_TOOBIG:
throwTooBig("SqliteStatement::stepStatement: Some is to bigger than SQLITE_MAX_LENGTH.");
case SQLITE_SCHEMA:
@@ -587,11 +598,6 @@ void BaseStatement::throwStatementIsMisused(const char *) const
throw StatementIsMisused(sqlite3_errmsg(sqliteDatabaseHandle()));
}
void BaseStatement::throwConstraintPreventsModification(const char *) const
{
throw ConstraintPreventsModification(sqlite3_errmsg(sqliteDatabaseHandle()));
}
void BaseStatement::throwNoValuesToFetch(const char *) const
{
throw NoValuesToFetch();

View File

@@ -118,7 +118,6 @@ public:
void checkColumnCount(int columnCount) const;
bool isReadOnlyStatement() const;
[[noreturn]] void throwStatementIsMisused(const char *whatHasHappened) const;
[[noreturn]] void throwConstraintPreventsModification(const char *whatHasHappened) const;
[[noreturn]] void throwNoValuesToFetch(const char *whatHasHappened) const;
[[noreturn]] void throwInvalidColumnFetched(const char *whatHasHappened) const;
[[noreturn]] void throwBindingIndexIsOutOfRange(const char *whatHasHappened) const;

View File

@@ -509,4 +509,64 @@ const char *StatementHasErrorSnapshot::what() const noexcept
return "Sqlite::StatementHasErrorSnapshot";
}
const char *CheckConstraintPreventsModification::what() const noexcept
{
return "Sqlite::CheckConstraintPreventsModification";
}
const char *CommitHookConstraintPreventsModification::what() const noexcept
{
return "Sqlite::CommitHookConstraintPreventsModification";
}
const char *DataTypeConstraintPreventsModification::what() const noexcept
{
return "Sqlite::DataTypeConstraintPreventsModification";
}
const char *ForeignKeyConstraintPreventsModification::what() const noexcept
{
return "Sqlite::ForeignKeyConstraintPreventsModification";
}
const char *FunctionConstraintPreventsModification::what() const noexcept
{
return "Sqlite::FunctionConstraintPreventsModification";
}
const char *NotNullConstraintPreventsModification::what() const noexcept
{
return "Sqlite::NotNullConstraintPreventsModification";
}
const char *PinnedConstraintPreventsModification::what() const noexcept
{
return "Sqlite::PinnedConstraintPreventsModification";
}
const char *PrimaryKeyConstraintPreventsModification::what() const noexcept
{
return "Sqlite::PrimaryKeyConstraintPreventsModification";
}
const char *RowIdConstraintPreventsModification::what() const noexcept
{
return "Sqlite::RowIdConstraintPreventsModification";
}
const char *TriggerConstraintPreventsModification::what() const noexcept
{
return "Sqlite::TriggerConstraintPreventsModification";
}
const char *UniqueConstraintPreventsModification::what() const noexcept
{
return "Sqlite::UniqueConstraintPreventsModification";
}
const char *VirtualTableConstraintPreventsModification::what() const noexcept
{
return "Sqlite::VirtualTableConstraintPreventsModification";
}
} // namespace Sqlite

View File

@@ -333,6 +333,91 @@ public:
const char *what() const noexcept override;
};
class SQLITE_EXPORT CheckConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT CommitHookConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT DataTypeConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT ForeignKeyConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT FunctionConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT NotNullConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT PinnedConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT PrimaryKeyConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT RowIdConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT TriggerConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT UniqueConstraintPreventsModification : public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT VirtualTableConstraintPreventsModification
: public ConstraintPreventsModification
{
public:
using ConstraintPreventsModification::ConstraintPreventsModification;
const char *what() const noexcept override;
};
class SQLITE_EXPORT NoValuesToFetch : public Exception
{
public: