From 7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88 Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer <bjorn@lindeijer.nl> Date: Tue, 16 May 2023 14:06:08 +0200 Subject: Added error handling to SqLiteDataProvider::processSql Previously errors would just cause it to return an empty set. --- src/dal/sqlitedataprovider.cpp | 14 ++++++++++++-- src/dal/sqlitedataprovider.h | 2 +- 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() -- cgit v1.2.3-70-g09d2