Prechádzať zdrojové kódy

getEntryData with QSqlTableModel

for comparison and testing
Felix Turo 4 rokov pred
rodič
commit
25ba0a65f2

+ 31 - 0
src/experimental/DataBase.cpp

@@ -207,6 +207,37 @@ TableData DataBase::getEntryData(DataPosition dataPosition)
     return entryData;
 }
 
+TableData DataBase::getEntryDataNew(DataPosition dataPosition)
+{
+    // check table exists
+    if (!tableNames.contains(dataPosition.first)) {
+        DEB(dataPosition.first << " not a table in the database. Unable to retreive Entry data.");
+        // emit databaseError
+        return TableData();
+    }
+
+    QSqlTableModel model;
+    model.setTable(dataPosition.first);
+    model.setFilter("_rowid_=" + QString::number(dataPosition.second));
+    model.select();
+
+    if (model.rowCount() == 0) {
+        DEB("No Entry found for row id: " << dataPosition.second );
+        // emit databaseError("No Entry found for row id: " + dataPosition.second)
+        return TableData();
+    } else if (model.lastError().type() != QSqlError::NoError) {
+        DEB("SQL error: " << model.lastError().text());
+        // emit sqlError(selectQuery.lastError().text(), statement)
+        return TableData();
+    }
+
+    TableData entryData;
+    for (const auto column : tableColumns.value(dataPosition.first)) {
+        entryData.insert(column, model.record(0).value(column).toString());
+    }
+    return entryData;
+}
+
 DataBase* DB() { return DataBase::getInstance(); }
 
 }

+ 3 - 0
src/experimental/DataBase.h

@@ -6,6 +6,7 @@
 #include <QString>
 #include <QSqlQuery>
 #include <QSqlError>
+#include <QSqlTableModel>
 #include "src/database/dbinfo.h"
 #include "debug.h"
 
@@ -75,6 +76,8 @@ public:
      */
     TableData getEntryData(DataPosition);
 
+    TableData getEntryDataNew(DataPosition);
+
 };
 
 /*!

+ 10 - 10
src/gui/widgets/homewidget.cpp

@@ -40,24 +40,24 @@ void HomeWidget::on_pushButton_clicked()
 {
     using namespace experimental;
     DB()->connect();
-    DataPosition dp = {"pilots", 7};
-    DEB(DB()->getEntryData(dp));
-    /*long intloop = 0;
-    long rangeloop = 0;
+    //DataPosition dp = {"pilots", 7};
+    //DEB(DB()->getEntryDataNew(dp));
+    long customFunc = 0;
+    long qSqlTableModelFunc = 0;
     for (int i = 10; i < 100; i++) {
-        DataPosition dp = {"pilots", i};
+        DataPosition dp = {"flights", i};
 
         auto start = std::chrono::system_clock::now();
         DB()->getEntryData(dp);
         auto stop = std::chrono::system_clock::now();
         auto duration = stop - start;
-        intloop += duration.count();
+        customFunc += duration.count();
         auto start2 = std::chrono::system_clock::now();
-        DB()->getEntryDataFor(dp);
+        DB()->getEntryDataNew(dp);
         auto stop2 = std::chrono::system_clock::now();
         auto duration2 = stop2 - start2;
-        rangeloop += duration2.count();
+        qSqlTableModelFunc += duration2.count();
     }
-    DEB("Average execution time: (int loop)   " << intloop/10000);
-    DEB("Average execution time: (range loop) " << rangeloop/10000);*/
+    DEB("Average execution time: (custom Func)        " << customFunc/10000 << "ms");
+    DEB("Average execution time: (qSqlTableModelFunc) " << qSqlTableModelFunc/10000 << "ms");
 }