summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2023-05-16 14:06:08 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2023-05-16 17:00:12 +0200
commit7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88 (patch)
tree00190dd29176ff04cf70bbe3e3d147882957e1fa
parent3e4f21ba9842d767044155c926ee85bebe944361 (diff)
downloadmanaserv-7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88.tar.gz
manaserv-7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88.tar.bz2
manaserv-7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88.tar.xz
manaserv-7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88.zip
Added error handling to SqLiteDataProvider::processSql
Previously errors would just cause it to return an empty set.
-rw-r--r--src/dal/sqlitedataprovider.cpp14
-rw-r--r--src/dal/sqlitedataprovider.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/src/dal/sqlitedataprovider.cpp b/src/dal/sqlitedataprovider.cpp
index 787088d1..b4feb3c6 100644
--- a/src/dal/sqlitedataprovider.cpp
+++ b/src/dal/sqlitedataprovider.cpp
@@ -381,21 +381,31 @@ const RecordSet &SqLiteDataProvider::processSql()
}
mRecordSet.setColumnHeaders(fieldNames);
- while (sqlite3_step(mStmt) == SQLITE_ROW)
+ int ret;
+
+ while (true)
{
+ ret = sqlite3_step(mStmt);
+ if (ret != SQLITE_ROW)
+ break;
+
Row r;
r.reserve(totalCols);
for (int col = 0; col < totalCols; ++col)
{
const unsigned char *txt = sqlite3_column_text(mStmt, col);
r.push_back(txt ? (char*)txt : std::string());
-
}
mRecordSet.add(r);
}
sqlite3_finalize(mStmt);
+ if (ret != SQLITE_DONE)
+ {
+ throw DbSqlQueryExecFailure(sqlite3_errmsg(mDb));
+ }
+
return mRecordSet;
}
diff --git a/src/dal/sqlitedataprovider.h b/src/dal/sqlitedataprovider.h
index 81e3a1d2..d78371f2 100644
--- a/src/dal/sqlitedataprovider.h
+++ b/src/dal/sqlitedataprovider.h
@@ -32,7 +32,7 @@ namespace dal
/**
* A SQLite Data Provider.
*/
-class SqLiteDataProvider: public DataProvider
+class SqLiteDataProvider final : public DataProvider
{
public:
SqLiteDataProvider()