-
Notifications
You must be signed in to change notification settings - Fork 0
/
computerrepository.cpp
87 lines (60 loc) · 2.5 KB
/
computerrepository.cpp
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
#include "computerrepository.h"
#include <QtSql>
computerrepository::computerrepository() {
createConnection();
}
computerrepository::~computerrepository() {
}
void computerrepository::add(Computer computer) {
QSqlQuery query(db);
query.prepare("INSERT INTO Computers (Name, YearBuilt, Type, WasBuilt) VALUES (:name,:yb,:type,:wb)");
query.bindValue(":name", QString::fromStdString(computer.getName()));
query.bindValue(":yb", QString::fromStdString(computer.getYearBuilt()));
query.bindValue(":type", QString::number(computer.getType()));
query.bindValue(":wb", QString::number(computer.getWasBuilt()));
query.exec();
}
void computerrepository::remove(std::string id) {
QSqlQuery query(db);
query.prepare("DELETE FROM Computers WHERE id = :id");
query.bindValue(":id", std::atoi(id.c_str()));
query.exec();
query.prepare("DELETE FROM ScientistComputerConnections WHERE c_ID = :id");
query.bindValue(":id", std::atoi(id.c_str()));
query.exec();
}
std::list<Computer> computerrepository::list() {
return list("","");
}
std::list<Computer> computerrepository::list(std::string col, std::string mod) {
std::list<Computer> computerList = std::list<Computer>();
QSqlQuery query(db);
std::string orderBy = "";
if(!col.empty()){
mod = mod.empty() ? "ASC" : (mod.find("desc") != std::string::npos ? "DESC" : "ASC");
orderBy = "order by " + col + " " + mod;
}
query.exec("SELECT * FROM Computers " + QString::fromStdString(orderBy));
populateComputerList(computerList, query);
return computerList;
}
std::list<Computer> computerrepository::search(std::string searchTerm) {
// Naive search implementation, finds a substring in the name field
std::list<Computer> computerList = std::list<Computer>();
QSqlQuery query(db);
std::string q = "SELECT * FROM Computers WHERE Name LIKE '%"+searchTerm+"%'";
query.exec(QString::fromStdString(q));
populateComputerList(computerList, query);
return computerList;
}
void computerrepository::populateComputerList(std::list<Computer> &computerList, QSqlQuery query){
while(query.next()){
Computer c = Computer();
c.setId(query.value("ID").toInt());
c.setName(query.value("Name").toString().toStdString());
c.setYearBuilt(query.value("YearBuilt").toString().toStdString());
c.setType(query.value("Type").toInt());
c.setWasBuilt(query.value("WasBuilt").toInt());
computerList.push_back(c);
}
}