Procházet zdrojové kódy

db class now singleton

fiffty-50 před 4 roky
rodič
revize
b3508cf7e1
4 změnil soubory, kde provedl 67 přidání a 33 odebrání
  1. 1 1
      openPilotLog.pro.user
  2. 2 2
      src/classes/calc.cpp
  3. 7 7
      src/database/db.cpp
  4. 57 23
      src/database/db.h

+ 1 - 1
openPilotLog.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.0, 2020-11-06T21:35:31. -->
+<!-- Written by QtCreator 4.11.0, 2020-11-08T10:38:17. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>

+ 2 - 2
src/classes/calc.cpp

@@ -424,9 +424,9 @@ void Calc::updateAutoTimes(int acft_id)
     //find all flights for aircraft
     auto flightList = Db::multiSelect(QVector<QString>{"id"},"flights","acft",
                                       QString::number(acft_id),Db::exactMatch);
-    auto acft = Aircraft("tails",acft_id);
+    auto acft = Aircraft(acft_id);
     for (const auto& item : flightList) {
-        auto flt = Flight("flights",item.toInt());
+        auto flt = Flight(item.toInt());
 
         if(acft.data.value("singlepilot") == "1" && acft.data.value("singleengine") == "1") {
             DEB("SPSE");

+ 7 - 7
src/database/db.cpp

@@ -22,7 +22,7 @@
 #define DEB(expr) \
     qDebug() << __PRETTY_FUNCTION__ << "\t" << expr
 
-void Db::connect()
+void Db::iconnect()
 {
     const QString driver("QSQLITE");
 
@@ -49,7 +49,7 @@ void Db::connect()
  * \param value - The value to be checked
  * \return
  */
-bool Db::exists(QString column, QString table, QString checkColumn, QString value,
+bool Db::iexists(QString column, QString table, QString checkColumn, QString value,
                 Db::matchType match)
 {
     bool output = false;
@@ -99,7 +99,7 @@ bool Db::exists(QString column, QString table, QString checkColumn, QString valu
  * \param match - enum Db::exactMatch or Db::partialMatch
  * \return QString
  */
-QString Db::singleSelect(QString column, QString table, QString checkColumn, QString value,
+QString Db::isingleSelect(QString column, QString table, QString checkColumn, QString value,
                          Db::matchType match)
 {
     QString statement = "SELECT " + column + " FROM " + table + " WHERE " + checkColumn;
@@ -144,7 +144,7 @@ QString Db::singleSelect(QString column, QString table, QString checkColumn, QSt
  * \param match - enum Db::exactMatch or Db::partialMatch
  * \return QVector<QString>
  */
-QVector<QString> Db::multiSelect(QVector<QString> columns, QString table, QString checkColumn,
+QVector<QString> Db::imultiSelect(QVector<QString> columns, QString table, QString checkColumn,
                                  QString value, Db::matchType match)
 {
     QString statement = "SELECT ";
@@ -194,7 +194,7 @@ QVector<QString> Db::multiSelect(QVector<QString> columns, QString table, QStrin
  * \param table
  * \return
  */
-QVector<QString> Db::multiSelect(QVector<QString> columns, QString table)
+QVector<QString> Db::imultiSelect(QVector<QString> columns, QString table)
 {
     QString statement = "SELECT ";
     for (const auto &column : columns) {
@@ -238,7 +238,7 @@ QVector<QString> Db::multiSelect(QVector<QString> columns, QString table)
  * \param match enum Db::exactMatch or Db::partialMatch
  * \return true on success, otherwise error messages in debug out
  */
-bool Db::singleUpdate(QString table, QString column, QString value, QString checkColumn,
+bool Db::isingleUpdate(QString table, QString column, QString value, QString checkColumn,
                       QString checkvalue, Db::matchType match)
 {
     QString statement = "UPDATE " + table;
@@ -276,7 +276,7 @@ bool Db::singleUpdate(QString table, QString column, QString value, QString chec
  * \param returnValues - the number of expected return values
  * \return QVector<QString> of results
  */
-QVector<QString> Db::customQuery(QString query, int returnValues)
+QVector<QString> Db::icustomQuery(QString query, int returnValues)
 {
     QSqlQuery q(query);
     DEB(query);

+ 57 - 23
src/database/db.h

@@ -37,31 +37,65 @@
  */
 class Db
 {
-public:
-    /*!
-     * \brief The editRole enum {createNew, editExisting} is used to differentiate
-     * between creating a new entry in the database vs editing an existing one
-     */
-    enum editRole {createNew, editExisting};
-    /*!
-     * \brief The matchType enum {exactMatch, partialMatch} is used to determine the
-     * matching when using a WHERE sql statement. exactMatch results in a "=" operator,
-     * whereas partiasMatch results in a "LIKE" operator
-     */
-    enum matchType {exactMatch, partialMatch};
+    public:
+        static Db& get()
+        {
+            static Db instance;
 
-    static void             connect();
-    static bool             exists(QString column, QString table, QString checkColumn,
-                                   QString value, Db::matchType match);
-    static bool             singleUpdate(QString table, QString column, QString value,
-                                         QString checkColumn, QString checkvalue, Db::matchType match);
-    static QString          singleSelect(QString column, QString table, QString checkColumn,
-                                         QString value, Db::matchType match);
-    static QVector<QString> multiSelect(QVector<QString> columns, QString table,
-                                        QString checkColumn, QString value, Db::matchType match);
-    static QVector<QString> multiSelect(QVector<QString> columns, QString table);
-    static QVector<QString> customQuery(QString query, int returnValues);
+            return instance;
+        }
+        /*!
+         * \brief The editRole enum {createNew, editExisting} is used to differentiate
+         * between creating a new entry in the database vs editing an existing one
+         */
+        enum editRole {createNew, editExisting};
+        /*!
+         * \brief The matchType enum {exactMatch, partialMatch} is used to determine the
+         * matching when using a WHERE sql statement. exactMatch results in a "=" operator,
+         * whereas partiasMatch results in a "LIKE" operator
+         */
+        enum matchType {exactMatch, partialMatch};
+        
+        static void             connect(){get().iconnect();}
+        static bool             exists(QString column, QString table, QString checkColumn,
+                                       QString value, Db::matchType match){
+            return get().iexists(column, table, checkColumn, value, match);
+        }
+        static bool             singleUpdate(QString table, QString column, QString value,
+                                             QString checkColumn, QString checkvalue, Db::matchType match){
+            return get().isingleUpdate(table,column,value,checkColumn,checkvalue,match);
+        }
+        static QString          singleSelect(QString column, QString table, QString checkColumn,
+                                             QString value, Db::matchType match){
+            return get().isingleSelect(column,table,checkColumn,value,match);
+        }
+        static QVector<QString> multiSelect(QVector<QString> columns, QString table,
+                                            QString checkColumn, QString value, Db::matchType match){
+            return get().imultiSelect(columns,table,checkColumn,value,match);
+        }
+        static QVector<QString> multiSelect(QVector<QString> columns, QString table){
+            return get().imultiSelect(columns, table);
+        }
+        static QVector<QString> customQuery(QString query, int returnValues){
+            return get().icustomQuery(query, returnValues);
+        }
+    private:
+        Db() {}
+        void             iconnect();
+        bool             iexists(QString column, QString table, QString checkColumn,
+                                       QString value, Db::matchType match);
+        bool             isingleUpdate(QString table, QString column, QString value,
+                                             QString checkColumn, QString checkvalue, Db::matchType match);
+        QString          isingleSelect(QString column, QString table, QString checkColumn,
+                                             QString value, Db::matchType match);
+        QVector<QString> imultiSelect(QVector<QString> columns, QString table,
+                                            QString checkColumn, QString value, Db::matchType match);
+        QVector<QString> imultiSelect(QVector<QString> columns, QString table);
+        QVector<QString> icustomQuery(QString query, int returnValues);
 
+    public:
+        Db(Db const&)              = delete;
+        void operator=(Db const&)  = delete;
 };
 
 #endif // DB_H