aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/sqlite/sqlitebasestatement.cpp
diff options
context:
space:
mode:
authorMarco Bubke <[email protected]>2017-10-16 12:57:35 +0200
committerMarco Bubke <[email protected]>2017-10-18 13:13:37 +0000
commit0d3ee85c5193a104adf4249428aa8cb1ec6d662b (patch)
tree1d4ef565c2e5145a3f1eb1cbf582a15a2aadadd3 /src/libs/sqlite/sqlitebasestatement.cpp
parent5e0b207a8959c9033ae5192b509966654a593301 (diff)
Sqlite: Cleanup error handling in sqlite statement
We mixed result code and error handling which is now separated. Change-Id: Ibb9c5f0eb3b77c350eac67884d377ba1baaf76c6 Reviewed-by: Tim Jenssen <[email protected]>
Diffstat (limited to 'src/libs/sqlite/sqlitebasestatement.cpp')
-rw-r--r--src/libs/sqlite/sqlitebasestatement.cpp56
1 files changed, 36 insertions, 20 deletions
diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp
index 3f41c04a11e..dd20d6de6c6 100644
--- a/src/libs/sqlite/sqlitebasestatement.cpp
+++ b/src/libs/sqlite/sqlitebasestatement.cpp
@@ -107,15 +107,12 @@ void BaseStatement::waitForUnlockNotify() const
void BaseStatement::reset() const
{
int resultCode = sqlite3_reset(m_compiledStatement.get());
- switch (resultCode) {
- case SQLITE_OK: return;
- case SQLITE_BUSY: throwStatementIsBusy("SqliteStatement::stepStatement: database engine was unable to acquire the database locks!");
- case SQLITE_ERROR : throwStatementHasError("SqliteStatement::stepStatement: run-time error (such as a constraint violation) has occurred!");
- case SQLITE_MISUSE: throwStatementIsMisused("SqliteStatement::stepStatement: was called inappropriately!");
- case SQLITE_CONSTRAINT: throwConstraintPreventsModification("SqliteStatement::stepStatement: contraint prevent insert or update!");
- }
- m_isReadyToFetchValues = false;
+ if (resultCode != SQLITE_OK) {
+ checkForResetError(resultCode);
+
+ m_isReadyToFetchValues = false;
+ }
}
bool BaseStatement::next() const
@@ -133,7 +130,14 @@ bool BaseStatement::next() const
setIfIsReadyToFetchValues(resultCode);
- return checkForStepError(resultCode);
+ if (resultCode == SQLITE_ROW)
+ return true;
+ else if (resultCode == SQLITE_DONE)
+ return false;
+ else
+ checkForStepError(resultCode);
+
+ return false;
}
void BaseStatement::step() const
@@ -166,19 +170,22 @@ Utils::SmallStringVector BaseStatement::columnNames() const
void BaseStatement::bind(int index, int value)
{
int resultCode = sqlite3_bind_int(m_compiledStatement.get(), index, value);
- checkForBindingError(resultCode);
+ if (resultCode != SQLITE_OK)
+ checkForBindingError(resultCode);
}
void BaseStatement::bind(int index, long long value)
{
int resultCode = sqlite3_bind_int64(m_compiledStatement.get(), index, value);
- checkForBindingError(resultCode);
+ if (resultCode != SQLITE_OK)
+ checkForBindingError(resultCode);
}
void BaseStatement::bind(int index, double value)
{
int resultCode = sqlite3_bind_double(m_compiledStatement.get(), index, value);
- checkForBindingError(resultCode);
+ if (resultCode != SQLITE_OK)
+ checkForBindingError(resultCode);
}
void BaseStatement::bind(int index, Utils::SmallStringView text)
@@ -188,7 +195,8 @@ void BaseStatement::bind(int index, Utils::SmallStringView text)
text.data(),
int(text.size()),
SQLITE_STATIC);
- checkForBindingError(resultCode);
+ if (resultCode != SQLITE_OK)
+ checkForBindingError(resultCode);
}
template <typename Type>
@@ -228,7 +236,9 @@ void BaseStatement::prepare(Utils::SmallStringView sqlStatement)
} while (resultCode == SQLITE_LOCKED);
- checkForPrepareError(resultCode);
+
+ if (resultCode != SQLITE_OK)
+ checkForPrepareError(resultCode);
}
sqlite3 *BaseStatement::sqliteDatabaseHandle() const
@@ -241,11 +251,9 @@ TextEncoding BaseStatement::databaseTextEncoding()
return m_database.backend().textEncoding();
}
-bool BaseStatement::checkForStepError(int resultCode) const
+void BaseStatement::checkForStepError(int resultCode) const
{
switch (resultCode) {
- case SQLITE_ROW: return true;
- case SQLITE_DONE: return false;
case SQLITE_BUSY: throwStatementIsBusy("SqliteStatement::stepStatement: database engine was unable to acquire the database locks!");
case SQLITE_ERROR : throwStatementHasError("SqliteStatement::stepStatement: run-time error (such as a constraint violation) has occurred!");
case SQLITE_MISUSE: throwStatementIsMisused("SqliteStatement::stepStatement: was called inappropriately!");
@@ -253,14 +261,23 @@ bool BaseStatement::checkForStepError(int resultCode) const
}
throwUnknowError("SqliteStatement::stepStatement: unknown error has happened");
+}
- Q_UNREACHABLE();
+void BaseStatement::checkForResetError(int resultCode) const
+{
+ switch (resultCode) {
+ case SQLITE_BUSY: throwStatementIsBusy("SqliteStatement::stepStatement: database engine was unable to acquire the database locks!");
+ case SQLITE_ERROR : throwStatementHasError("SqliteStatement::stepStatement: run-time error (such as a constraint violation) has occurred!");
+ case SQLITE_MISUSE: throwStatementIsMisused("SqliteStatement::stepStatement: was called inappropriately!");
+ case SQLITE_CONSTRAINT: throwConstraintPreventsModification("SqliteStatement::stepStatement: contraint prevent insert or update!");
+ }
+
+ throwUnknowError("SqliteStatement::reset: unknown error has happened");
}
void BaseStatement::checkForPrepareError(int resultCode) const
{
switch (resultCode) {
- case SQLITE_OK: return;
case SQLITE_BUSY: throwStatementIsBusy("SqliteStatement::prepareStatement: database engine was unable to acquire the database locks!");
case SQLITE_ERROR : throwStatementHasError("SqliteStatement::prepareStatement: run-time error (such as a constraint violation) has occurred!");
case SQLITE_MISUSE: throwStatementIsMisused("SqliteStatement::prepareStatement: was called inappropriately!");
@@ -272,7 +289,6 @@ void BaseStatement::checkForPrepareError(int resultCode) const
void BaseStatement::checkForBindingError(int resultCode) const
{
switch (resultCode) {
- case SQLITE_OK: return;
case SQLITE_TOOBIG: throwBingingTooBig("SqliteStatement::bind: string or blob are over size limits(SQLITE_LIMIT_LENGTH)!");
case SQLITE_RANGE : throwBindingIndexIsOutOfRange("SqliteStatement::bind: binding index is out of range!");
case SQLITE_NOMEM: throw std::bad_alloc();