Browse Source

Refactoring of Database Error handling

ADatabaseError extended to also hold a custom error type to be able to distinguish between SQL errors and database lookup errors.

Moved definition of user and template tables as well as reset/clear function into ADatabase. Getter functions implemented
Felix Turo 3 years ago
parent
commit
c3c656f838

+ 5 - 5
l10n/openpilotlog_de.ts

@@ -4,27 +4,27 @@
 <context>
     <name>ADatabase</name>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="733"/>
+        <location filename="../src/database/adatabase.cpp" line="768"/>
         <source>&lt;tr&gt;&lt;td&gt;Total Time: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="734"/>
+        <location filename="../src/database/adatabase.cpp" line="769"/>
         <source>&lt;tr&gt;&lt;td&gt;Last Flight: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="735"/>
+        <location filename="../src/database/adatabase.cpp" line="770"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of flights: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="736"/>
+        <location filename="../src/database/adatabase.cpp" line="771"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of aircraft: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="737"/>
+        <location filename="../src/database/adatabase.cpp" line="772"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of Pilots: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>

+ 5 - 5
l10n/openpilotlog_en.ts

@@ -4,27 +4,27 @@
 <context>
     <name>ADatabase</name>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="733"/>
+        <location filename="../src/database/adatabase.cpp" line="768"/>
         <source>&lt;tr&gt;&lt;td&gt;Total Time: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="734"/>
+        <location filename="../src/database/adatabase.cpp" line="769"/>
         <source>&lt;tr&gt;&lt;td&gt;Last Flight: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="735"/>
+        <location filename="../src/database/adatabase.cpp" line="770"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of flights: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="736"/>
+        <location filename="../src/database/adatabase.cpp" line="771"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of aircraft: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="737"/>
+        <location filename="../src/database/adatabase.cpp" line="772"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of Pilots: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>

+ 5 - 5
l10n/openpilotlog_es.ts

@@ -4,27 +4,27 @@
 <context>
     <name>ADatabase</name>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="733"/>
+        <location filename="../src/database/adatabase.cpp" line="768"/>
         <source>&lt;tr&gt;&lt;td&gt;Total Time: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="734"/>
+        <location filename="../src/database/adatabase.cpp" line="769"/>
         <source>&lt;tr&gt;&lt;td&gt;Last Flight: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="735"/>
+        <location filename="../src/database/adatabase.cpp" line="770"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of flights: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="736"/>
+        <location filename="../src/database/adatabase.cpp" line="771"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of aircraft: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/database/adatabase.cpp" line="737"/>
+        <location filename="../src/database/adatabase.cpp" line="772"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of Pilots: &lt;/td&gt;&lt;td&gt;%1&lt;/td&gt;</source>
         <translation type="unfinished"></translation>
     </message>

+ 5 - 17
src/classes/ajson.cpp

@@ -31,11 +31,11 @@ void AJson::exportDatabase()
         QJsonArray array;
         const auto rows = aDB->getTable(pair.second);
 
-        for (const auto & row : rows)
+        for (const auto &row : rows)
             array.append(QJsonObject::fromVariantMap(row));
 
         QJsonDocument doc(array);
-        writeJson(doc, pair.first + QLatin1String(".json"));
+        writeDocToFile(doc, pair.first + QLatin1String(".json"));
     }
 }
 
@@ -51,13 +51,13 @@ void AJson::importDatabase()
     for (const auto & pair : tables) {
         q.prepare(QLatin1String("DELETE FROM ") + pair.first);
         q.exec();
-        const auto doc = readJson(AStandardPaths::asChildOfDir(AStandardPaths::JSON,
+        const auto doc = readFileToDoc(AStandardPaths::asChildOfDir(AStandardPaths::JSON,
                                                                pair.first + QLatin1String(".json")));
         ADataBaseSetup::commitDataJson(doc.array(), pair.first);
     }
 }
 
-QJsonDocument AJson::readJsonToDocument(const QString &file_path)
+QJsonDocument AJson::readFileToDoc(const QString &file_path)
 {
     QFile file(file_path);
     file.open(QIODevice::ReadOnly | QIODevice::Text);
@@ -68,22 +68,10 @@ QJsonDocument AJson::readJsonToDocument(const QString &file_path)
     return doc;
 }
 
-void AJson::writeJson(const QJsonDocument &doc, const QString &file_name)
+void AJson::writeDocToFile(const QJsonDocument &doc, const QString &file_name)
 {
     QFile out(AStandardPaths::asChildOfDir(AStandardPaths::JSON,file_name));
     out.open(QFile::WriteOnly);
     out.write(doc.toJson());
     out.close();
 }
-
-QT_DEPRECATED
-QJsonDocument AJson::readJson(const QString &file_path)
-{
-    QFile file(file_path);
-    file.open(QIODevice::ReadOnly | QIODevice::Text);
-    QString raw = file.readAll();
-    file.close();
-
-    QJsonDocument doc = QJsonDocument::fromJson(raw.toUtf8());
-    return doc;
-}

+ 7 - 11
src/classes/ajson.h

@@ -47,10 +47,15 @@ public:
     static void importDatabase();
 
     /*!
-     * \brief readJsonToDocument reads data from a JSON file into a QJSonDocument and returns the document
+     * \brief readToDocument reads data from a JSON file into a QJSonDocument
      * \param file_path
      */
-    static QJsonDocument readJsonToDocument(const QString &file_path);
+    static QJsonDocument readFileToDoc(const QString &file_path);
+
+    /*!
+     * \brief writes a QJsonDocument to a file
+     */
+    static void writeDocToFile(const QJsonDocument &doc, const QString& file_name);
 
 private:
 
@@ -59,15 +64,6 @@ private:
      */
     const static QList<QPair<TableName_T, ADatabaseTable>> tables;
 
-    /*!
-     * \brief writes a QJsonDocument to a file
-     */
-    static void writeJson(const QJsonDocument &doc, const QString& file_name);
-
-    /*!
-     * \brief To Do - Reads a file into a QJasonDocument
-     */
-    static QJsonDocument readJson(const QString& file_name);
 };
 
 #endif // AJSON_H

+ 75 - 42
src/database/adatabase.cpp

@@ -21,11 +21,27 @@
 #include "src/opl.h"
 #include "src/functions/alog.h"
 
+const QStringList ADatabase::userTableNames = {
+    QStringLiteral("flights"),
+    QStringLiteral("pilots"),
+    QStringLiteral("tails")
+};
+const QStringList ADatabase::templateTableNames = {
+    QStringLiteral("aircraft"),
+    QStringLiteral("airports"),
+    QStringLiteral("currencies"),
+    QStringLiteral("changelog")
+};
+
 
 ADatabaseError::ADatabaseError(QString msg_)
-    : QSqlError::QSqlError(msg_)
+    : QSqlError::QSqlError(QString(), msg_, QSqlError::UnknownError, QLatin1String("opl"))
 {}
 
+ADatabaseError::ADatabaseError(QSqlError err_)
+    : QSqlError(err_)
+{};
+
 QString ADatabaseError::text() const
 {
     return QLatin1String("Database Error: ") + QSqlError::text();
@@ -52,6 +68,16 @@ int ADatabase::checkDbVersion() const
     return query.value(0).toInt();
 }
 
+QStringList ADatabase::getTemplateTableNames()
+{
+    return templateTableNames;
+}
+
+QStringList ADatabase::getUserTableNames()
+{
+    return userTableNames;
+}
+
 const ColumnNames_T ADatabase::getTableColumns(TableName_T table_name) const
 {
     return tableColumns.value(table_name);
@@ -114,6 +140,7 @@ bool ADatabase::connect()
     if (!db.open()) {
         LOG << QString("Unable to establish database connection.<br>The following error has ocurred:<br><br>%1")
                .arg(db.lastError().databaseText());
+        lastError = db.lastError();
         return false;
     }
 
@@ -163,19 +190,17 @@ bool ADatabase::remove(AEntry entry)
     QSqlQuery query;
     query.prepare(statement);
     query.addBindValue(entry.getPosition().rowId);
-    query.exec();
 
-    if (query.lastError().type() == QSqlError::NoError)
+    if (!query.exec())
     {
         DEB << "Entry " << entry.getPosition() << " removed.";
         emit dataBaseUpdated();
-        lastError = QString();
         return true;
     } else {
         DEB << "Unable to delete.";
         DEB << "Query: " << statement;
         DEB << "Query Error: " << query.lastError().text();
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         return false;
     }
 }
@@ -197,31 +222,27 @@ bool ADatabase::removeMany(QList<DataPosition> data_position_list)
 
         query.prepare(statement);
         query.addBindValue(data_position.rowId);
-        query.exec();
 
-        if (!(query.lastError().type() == QSqlError::NoError))
+        if (!query.exec())
             errorCount++;
     }
 
     if (errorCount == 0) {
         query.prepare(QStringLiteral("COMMIT"));
-        query.exec();
-        if(query.lastError().type() == QSqlError::NoError) {
+        if(query.exec()) {
             emit dataBaseUpdated();
-            lastError = QString();
             return true;
         } else {
-            lastError = ADatabaseError(
-                        "Transaction unsuccessful (Interrupted). Error count: "
-                        + QString::number(errorCount));
+            DEB << "Transaction unsuccessful (Interrupted). Error count: "
+                        + QString::number(errorCount);
+            lastError = query.lastError();
             return false;
         }
     } else {
         query.prepare(QStringLiteral("ROLLBACK"));
         query.exec();
-        lastError = ADatabaseError(
-                    "Transaction unsuccessful (no changes have been made). Error count: "
-                    + QString::number(errorCount));
+        DEB << "Transaction unsuccessful (no changes have been made). Error count: "
+                    + QString::number(errorCount);
         return false;
     }
 }
@@ -241,7 +262,7 @@ bool ADatabase::exists(AEntry entry)
     query.exec();
     //this returns either 1 or 0 since row ids are unique
     if (!query.isActive()) {
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         DEB << "Query Error: " << query.lastError().text() << statement;
         return false;
     }
@@ -271,7 +292,7 @@ bool ADatabase::exists(DataPosition data_position)
     query.exec();
     //this returns either 1 or 0 since row ids are unique
     if (!query.isActive()) {
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         DEB << "Query Error: " << query.lastError().text() << statement;
     }
     query.next();
@@ -285,6 +306,21 @@ bool ADatabase::exists(DataPosition data_position)
     }
 }
 
+bool ADatabase::clear()
+{
+    QSqlQuery q;
+
+    for (const auto &table_name : userTableNames) {
+        q.prepare(QLatin1String("DELETE FROM ") + table_name);
+        if (!q.exec()) {
+            DEB << "Error: " << q.lastError().text();
+            lastError = q.lastError();
+            return false;
+        }
+    }
+    return true;
+}
+
 
 bool ADatabase::update(AEntry updated_entry)
 {
@@ -305,19 +341,17 @@ bool ADatabase::update(AEntry updated_entry)
         }
     }
     query.addBindValue(updated_entry.getPosition().rowId);
-    query.exec();
 
-    if (query.lastError().type() == QSqlError::NoError)
+    if (query.exec())
     {
         DEB << "Entry successfully committed.";
         emit dataBaseUpdated();
-        lastError = QString();
         return true;
     } else {
         DEB << "Unable to commit.";
         DEB << "Query: " << statement;
         DEB << "Query Error: " << query.lastError().text();
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         return false;
     }
 }
@@ -350,19 +384,17 @@ bool ADatabase::insert(AEntry new_entry)
         }
     }
 
-    query.exec();
     //check result.
-    if (query.lastError().type() == QSqlError::NoError)
+    if (!query.exec())
     {
         DEB << "Entry successfully committed.";
         emit dataBaseUpdated();
-        lastError = QString();
         return true;
     } else {
         DEB << "Unable to commit.";
         DEB << "Query: " << statement;
         DEB << "Query Error: " << query.lastError().text();
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         return false;
     }
 
@@ -383,15 +415,13 @@ RowData_T ADatabase::getEntryData(DataPosition data_position)
     check_query.prepare(statement);
     check_query.addBindValue(data_position.rowId);
     check_query.setForwardOnly(true);
-    check_query.exec();
 
-    if (check_query.lastError().type() != QSqlError::NoError) {
+    if (!check_query.exec()) {
         DEB << "SQL error: " << check_query.lastError().text();
         DEB << "Statement: " << statement;
-        lastError = check_query.lastError().text();
+        lastError = check_query.lastError();
         return RowData_T();
     }
-
     check_query.next();
     if (check_query.value(0).toInt() == 0) {
         DEB << "No Entry found for row id: " << data_position.rowId;
@@ -407,12 +437,12 @@ RowData_T ADatabase::getEntryData(DataPosition data_position)
     select_query.prepare(statement);
     select_query.addBindValue(data_position.rowId);
     select_query.setForwardOnly(true);
-    select_query.exec();
 
-    if (select_query.lastError().type() != QSqlError::NoError) {
+
+    if (!select_query.exec()) {
         DEB << "SQL error: " << select_query.lastError().text();
-        DEB << "Statement: " << statement;
-        lastError = select_query.lastError().text();
+        DEB << "Statement: " << select_query.lastQuery();
+        lastError = select_query.lastError();
         return {};
     }
 
@@ -503,7 +533,7 @@ const QStringList ADatabase::getCompletionList(ADatabaseTarget target)
     query.exec();
 
     if(!query.isActive()) {
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         return QStringList();
     }
 
@@ -554,7 +584,7 @@ QMap<QString, RowId_T> ADatabase::getIdMap(ADatabaseTarget target)
         DEB << "No result found. Check Query and Error.";
         DEB << "Query: " << statement;
         DEB << "Error: " << query.lastError().text();
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         return {};
     }
 
@@ -616,7 +646,7 @@ QList<RowId_T> ADatabase::getForeignKeyConstraints(RowId_T foreign_row_id, AData
     query.exec();
 
     if (!query.isActive()) {
-        lastError = query.lastError().text();
+        lastError = query.lastError();
         DEB << "Error";
         DEB << statement;
         DEB << query.lastError().text();
@@ -643,13 +673,17 @@ ATailEntry ADatabase::resolveForeignTail(RowId_T foreign_key)
 QVector<QVariant> ADatabase::customQuery(QString statement, int return_values)
 {
     QSqlQuery query(statement);
-    query.exec();
+    if(!query.exec()) {
+        lastError = query.lastError();
+        DEB << "Query Error: " << lastError.text();
+        return {};
+    }
 
     if (!query.first()) {
         DEB << "No result found. Check Query and Error.";
         DEB << "Error: " << query.lastError().text();
         DEB << "Statement: " << statement;
-        lastError = query.lastError().text();
+        lastError = ADatabaseError("No result found.");
         return QVector<QVariant>();
     } else {
         query.first();
@@ -784,12 +818,11 @@ QVector<RowData_T> ADatabase::getTable(ADatabaseTable table_name)
     QSqlQuery q;
     q.prepare(query_str);
     q.setForwardOnly(true);
-    q.exec();
 
-    if (q.lastError().type() != QSqlError::NoError) {
+    if (!q.exec()) {
         LOG << "SQL error: " << q.lastError().text();
         LOG << "Statement: " << query_str;
-        lastError = q.lastError().text();
+        lastError = q.lastError();
         return {};
     }
 

+ 25 - 5
src/database/adatabase.h

@@ -91,12 +91,16 @@ enum class ADatabaseSummaryKey {
 /*!
  * \brief Custom Database Error derived from QSqlError.
  * Extends text() adding "Database Error: " before the text.
+ * Errors that are related to SQL are assigned their respective error codes.
+ * Errors that occur with data in the database are handled with the error code "opl"
+ * and QSqlError::UnknownError
  */
 class ADatabaseError : public QSqlError {
 public:
-  ADatabaseError() = default;
-  ADatabaseError(QString msg);
-  QString text() const;
+    ADatabaseError() = default;
+    ADatabaseError(QString msg);
+    QString text() const;
+    ADatabaseError(QSqlError);
 };
 
 /*!
@@ -114,12 +118,19 @@ private:
 
     ADatabase();
     int checkDbVersion() const;
+
+    const static QStringList userTableNames;
+    const static QStringList templateTableNames;
 public:
     /*!
      * \brief lastError extends QSqlError. Holds information about the last error that ocurred during
-     * a SQL operation.
+     * a SQL operation. If the error type is QSqlError::UnknownError, the error is related to data
+     * from the database (entry not found,...), otherwise the error is related to SQL execution. In this
+     * case error.type() provides further information.
+     *
+     * If the error type is QSqlError::NoError, the last executed database query was successful.
      */
-    ADatabaseError lastError;
+    QSqlError lastError;
 
     const QFileInfo databaseFile;
 
@@ -186,6 +197,12 @@ public:
     bool exists(AEntry entry);
     bool exists(DataPosition data_position);
 
+    /*!
+     * \brief clear resets the database, i.e. deletes all content in the tables containing
+     * userdata (pilots, flights, tails)
+     */
+    bool clear();
+
     /*!
      * \brief commits an entry to the database, calls either insert or update,
      * based on position data
@@ -328,6 +345,9 @@ public:
      */
     QVector<RowData_T> getTable(ADatabaseTable table_name);
 
+    QStringList getUserTableNames();
+
+    QStringList getTemplateTableNames();
 
 signals:
     /*!

+ 16 - 39
src/database/adbsetup.cpp

@@ -6,7 +6,6 @@
 
 namespace aDbSetup {
 
-static inline const auto DATABASE_REVISION = 17;
 // const auto TEMPLATE_URL = QStringLiteral("https://raw.githubusercontent.com/fiffty-50/openpilotlog/tree/main/assets/database/templates/");
 const auto TEMPLATE_URL = QStringLiteral("https://raw.githubusercontent.com/fiffty-50/openpilotlog/develop/assets/database/templates/");
 
@@ -242,17 +241,6 @@ const QStringList DATABASE_VIEWS = {
     CREATE_VIEW_TOTALS,
     CREATE_VIEW_QCOMPLETER,
 };
-const QStringList USER_TABLE_NAMES = {
-    QStringLiteral("flights"),
-    QStringLiteral("pilots"),
-    QStringLiteral("tails")
-};
-const QStringList TEMPLATE_TABLE_NAMES = {
-    QStringLiteral("aircraft"),
-    QStringLiteral("airports"),
-    QStringLiteral("currencies"),
-    QStringLiteral("changelog")
-};
 
 bool createDatabase()
 {
@@ -261,15 +249,13 @@ bool createDatabase()
     // Create Tables
     for (const auto &query_string : DATABASE_TABLES) {
         q.prepare(query_string);
-        q.exec();
-        if (!q.isActive())
+        if (!q.exec())
             errors.append(q.lastError());
     }
     // Create Views
     for (const auto &query_string : DATABASE_VIEWS) {
         q.prepare(query_string);
-        q.exec();
-        if (!q.isActive())
+        if (!q.exec())
             errors.append(q.lastError());
     }
 
@@ -287,18 +273,6 @@ bool createDatabase()
     }
 }
 
-void clear()
-{
-    QSqlQuery q;
-
-    for (const auto &table_name : USER_TABLE_NAMES) {
-        q.prepare("DELETE FROM " + table_name);
-        if (!q.exec()) {
-            DEB << "Error: " << q.lastError().text();
-        }
-    }
-}
-
 bool commitData(const QJsonArray &json_arr, const QString &table_name)
 {
     //aDB->updateLayout(); // needed?
@@ -342,28 +316,31 @@ bool commitData(const QJsonArray &json_arr, const QString &table_name)
 
 bool importTemplateData(bool use_local_ressources)
 {
-    QSqlQuery q;
+    //QSqlQuery q;
     // reset template tables
-    for (const auto& table_name : TEMPLATE_TABLE_NAMES) {
+    const auto table_names = aDB->getTemplateTableNames();
+    for (const auto& table_name : table_names) {
+
         //clear table
-        q.prepare(QLatin1String("DELETE FROM ") + table_name);
-        if (!q.exec()) {
-            DEB << "Error: " << q.lastError().text();
-            return false;
-        }
+        //q.prepare(QLatin1String("DELETE FROM ") + table_name);
+        //if (!q.exec()) {
+        //    DEB << "Error: " << q.lastError().text();
+        //    return false;
+        //}
+
         //Prepare data
         QJsonArray data_to_commit;
         QString error_message("Error importing data ");
 
         if (use_local_ressources) {
-            data_to_commit = AJson::readJsonToDocument(QStringLiteral(":templates/database/templates/")
+            data_to_commit = AJson::readFileToDoc(QLatin1String(":templates/database/templates/")
                                       + table_name + QLatin1String(".json")).array();
-            error_message.append(" (ressource) ");
+            error_message.append(QLatin1String(" (ressource) "));
         } else {
-            data_to_commit = AJson::readJsonToDocument(AStandardPaths::directory(
+            data_to_commit = AJson::readFileToDoc(AStandardPaths::directory(
                                           AStandardPaths::Templates).absoluteFilePath(
                                           table_name + QLatin1String(".json"))).array();
-            error_message.append(" (downloaded) ");
+            error_message.append(QLatin1String(" (downloaded) "));
         }
 
         // commit Data from Array

+ 5 - 12
src/database/adbsetup.h

@@ -6,33 +6,26 @@
 /*!
  * \brief The aDbSetup namespace is responsible for the inital setup of the database when
  * the application is first launched. It creates the database in the specified default
- * location and creates all required tables and views. It can also be used to reset the
- * database currently used
+ * location and creates all required tables and views.
  */
 namespace aDbSetup
 {
-bool createDatabase();
 
 /*!
- * \brief createSchemata creates the required tables for the database
- * \return true on success
+ * \brief createDatabase runs a number of CREATE queries that create the database tables and columns.
+ * \return
  */
-bool createSchemata(const QStringList &statements);
+bool createDatabase();
 
 /*!
  * \brief commitData commits the data read from a JSON file into a table in the database.
  */
 bool commitData(const QJsonArray &json_arr, const QString &table_name);
 
-/*!
- * \brief clearUserData Deletes all data from user tables. Resets the database.
- */
-void clearUserData();
-
 /*!
  * \brief importTemplateData fills an empty database with the template
  * data (Aircraft, Airports, currencies, changelog) as read from the JSON
- * templates
+ * templates.
  * \param use_local_ressources determines whether the included ressource files
  * or a previously downloaded file should be used.
  * \return

+ 9 - 3
src/gui/widgets/debugwidget.cpp

@@ -31,9 +31,15 @@
 #include "src/classes/ajson.h"
 void DebugWidget::on_debugPushButton_clicked()
 {
-    //AJson::exportDatabase();
-    AJson::importDatabase();
-    emit aDB->dataBaseUpdated();
+    // Debug
+    QString query = "Invalid";
+    aDB->getAircraftEntry(4444);
+    DEB << aDB->lastError.type();
+    aDB->customQuery(query, 3);
+    DEB << aDB->lastError.type();
+    aDB->customQuery("SELECT * FROM FLIGHTS", 1);
+    DEB << aDB->lastError.type();
+
 }
 
 DebugWidget::DebugWidget(QWidget *parent) :