Ver Fonte

Merge pull request #13 from fiffty-50/devel-db-new

implementation of experimental::DB::init()
Felix Turowsky há 4 anos atrás
pai
commit
5dc57363d6
2 ficheiros alterados com 40 adições e 29 exclusões
  1. 34 0
      src/experimental/Db.cpp
  2. 6 29
      src/experimental/Db.h

+ 34 - 0
src/experimental/Db.cpp

@@ -0,0 +1,34 @@
+#include "Db.h"
+
+using namespace experimental;
+
+bool DB::init()
+{
+    const QString driver("QSQLITE");
+
+    if (!QSqlDatabase::isDriverAvailable(driver)) return false;
+
+    QDir directory("data");
+    QString databaseLocation = directory.filePath("logbook.db");
+    QSqlDatabase db = QSqlDatabase::addDatabase(driver);
+    db.setDatabaseName(databaseLocation);
+
+    if (!db.open()) return false;
+
+    DEB("Database connection established.");
+    // Enable foreign key restrictions
+    QSqlQuery query("PRAGMA foreign_keys = ON;");
+    // Retreive database layout and store in member variables
+    tableNames = db.tables();
+
+    QStringList columnNames;
+    for (const auto &table : tableNames) {
+        columnNames.clear();
+        QSqlRecord fields = db.record(table);
+        for (int i = 0; i < fields.count(); i++) {
+            columnNames.append(fields.field(i).name());
+            tableColumns.insert(table, columnNames);
+        }
+    }
+    return true;
+}

+ 6 - 29
src/experimental/Db.h

@@ -13,6 +13,9 @@
 
 
 namespace experimental {
 namespace experimental {
 
 
+/// [F] ideas for functions of db class:
+/// https://github.com/fiffty-50/openpilotlog/wiki/New-DB-class-brainstorming    
+
 /// SELF DOCUMENTING CODE
 /// SELF DOCUMENTING CODE
 using ColName = QString;
 using ColName = QString;
 using ColData = QString;
 using ColData = QString;
@@ -20,6 +23,7 @@ using TableName = QString;
 using RowId = int;
 using RowId = int;
 using DataPosition = QPair<TableName, RowId>;
 using DataPosition = QPair<TableName, RowId>;
 using TableData = QMap<ColName, ColData>;
 using TableData = QMap<ColName, ColData>;
+using ColumnData = QPair<ColName, ColData>;
 
 
 // DEFAULTS
 // DEFAULTS
 auto const DEFAULT_PILOT_POSITION = DataPosition("pilots", 0);
 auto const DEFAULT_PILOT_POSITION = DataPosition("pilots", 0);
@@ -91,7 +95,8 @@ bool insertPilot(UserInput& uin)
  */
  */
 class DB {
 class DB {
 private:
 private:
-    static QVector<QString> columns;
+    static QStringList tableNames;
+    static QMap<TableName, QStringList> tableColumns;
 public:
 public:
     /*!
     /*!
      * \brief Initialise DB class and populate columns.
      * \brief Initialise DB class and populate columns.
@@ -152,34 +157,6 @@ public:
             return false;
             return false;
         }
         }
     }
     }
-
-    /*!
-     * \brief Verify entry data is sane for the database.
-     */
-    static
-    bool verify(Entry entry)
-    {
-        //retreive database layout
-        const auto dbContent = DbInfo();
-        columns = dbContent.format.value(entry.position.first);
-        TableData data = entry.data();
-        auto position = entry.position;
-
-        //Check validity of newData
-        QVector<QString> badkeys;
-        for (auto i = data.cbegin(); i != data.cend(); ++i) {
-            if (!columns.contains(i.key())) {
-                DEB(i.key() << "Not in column list for table " << position.first << ". Discarding.");
-                badkeys << i.key();
-            }
-        }
-        for (const auto &var : badkeys) {
-            data.remove(var);
-        }
-        entry.populate_data(data);
-        return update(entry);
-    }
-
 };
 };
 
 
 }  // namespace experimental
 }  // namespace experimental