File: database.cpp

package info (click to toggle)
wfview 2.11-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,256 kB
  • sloc: cpp: 43,386; ansic: 3,196; sh: 32; xml: 29; makefile: 11
file content (107 lines) | stat: -rw-r--r-- 2,508 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifdef USESQL

#include "database.h"
#include "logcategories.h"

database::database()
{
    open();
}

database::~database()
{
}

bool database::open()
{
    auto name = "my_db_" + QString::number((quint64)QThread::currentThread(), 16);
    if (QSqlDatabase::contains(name))
    {
        db = QSqlDatabase::database(name);
        qu = QSqlQuery(db);
        return true;
    }
    else {
        qInfo(logCluster()) << "Creating new connection" << name;
        db = QSqlDatabase::addDatabase("QSQLITE", name);
        qu = QSqlQuery(db);
    }

    //QString path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/" + "wfview.db";
    QString path = ":memory:";
    qInfo(logCluster()) << "DB Filename" << path;
    db.setDatabaseName(path);
    if (db.isValid())
    {
        db.open();
        if (check()) {
            return true;
        }
    }
    qWarning(logCluster()) << "Database is not valid!";
    return false;
}

void database::close()
{
    auto name = "my_db_" + QString::number((quint64)QThread::currentThread(), 16);
    qInfo(logCluster()) << "Closing database connection:" << name;
    db.close();
}



QSqlQuery database::query(QString query)
{
    if (!db.isOpen())
    {
        qWarning(logCluster()) << "Query Database is not open!";
        db.open();
    }
    qu.exec(query);
    return qu;
}



bool database::check() 
{
    if (db.isOpen()) {
        for (const auto& table : db.tables())
        {
            if (table == "spots")
            {
                qInfo(logCluster()) << "DB Contains spots table";
                return true;
            }
        }
        qInfo(logCluster()) << "Creating spots table";
        // Spots table does not exist, need to create it.
        /*
            QString dxcall;
            double frequency;
            QString spottercall;
            QDateTime timestamp;
            QString mode;
            QString comment;
            QCPItemText* text = Q_NULLPTR;*/
        qu.exec("CREATE TABLE spots "
            "(id INTEGER PRIMARY KEY, "
            "type VARCHAR(3),"
            "dxcall VARCHAR(30),"
            "spottercall VARCHAR(30),"
            "frequency DOUBLE,"
            "timestamp DATETIME,"
            "mode VARCHAR(30),"
            "comment VARCHAR(255) )");
        qu.exec("CREATE INDEX spots_index ON spots(type,dxcall,frequency,timestamp)");
        return true;
    }
    else {
        qWarning(logCluster()) << "Database is not open";

    }
    return false;
}

#endif