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