diff options
author | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2023-05-16 14:06:08 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2023-05-16 17:00:12 +0200 |
commit | 7e0e3c6aedbd748a0a95cbf5db5ca15a4f625c88 (patch) | |
tree | 00190dd29176ff04cf70bbe3e3d147882957e1fa | |
parent | 3e4f21ba9842d767044155c926ee85bebe944361 (diff) | |
download | manaserv-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.cpp | 14 | ||||
-rw-r--r-- | 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() |