8 Database::Database(QObject *parent) :
11 qDebug() << __PRETTY_FUNCTION__;
16 qDebug() << __PRETTY_FUNCTION__;
19 bool Database::addTag(qulonglong userId, const QString &tag)
21 qDebug() << __PRETTY_FUNCTION__;
26 if (m_database.isOpen()) {
28 ret = tagQuery.exec(QString("SELECT id FROM tag WHERE name = '%1'")
32 if (ret && tagQuery.next()) {
33 tagId = tagQuery.value(0).toULongLong();
36 QSqlQuery tagInsertQuery;
37 ret = tagInsertQuery.exec(QString("INSERT INTO tag VALUES(NULL, '%1')")
41 tagId = tagInsertQuery.lastInsertId().toULongLong();
45 if (ret && (tagId != 0)) {
46 QSqlQuery userTagQuery;
48 ret = userTagQuery.exec(QString("INSERT INTO usertag VALUES('%1', '%2')")
49 .arg(userId).arg(tagId));
56 bool Database::createMessageTable()
58 qDebug() << __PRETTY_FUNCTION__;
62 if (m_database.isOpen()) {
65 created = query.exec("CREATE TABLE IF NOT EXISTS message ("
66 "id INTEGER PRIMARY KEY,"
70 "FOREIGN KEY(senderid) REFERENCES user(id),"
71 "FOREIGN KEY(receiverid) REFERENCES user(id)"
78 bool Database::createTagTable()
80 qDebug() << __PRETTY_FUNCTION__;
84 if (m_database.isOpen()) {
87 created = query.exec("CREATE TABLE IF NOT EXISTS tag ("
88 "id INTEGER PRIMARY KEY,"
89 "name VARCHAR(30) UNIQUE"
96 bool Database::createUserTable()
98 qDebug() << __PRETTY_FUNCTION__;
100 bool created = false;
102 if (m_database.isOpen()) {
105 created = query.exec("CREATE TABLE IF NOT EXISTS user ("
106 "id INTEGER PRIMARY KEY,"
112 qWarning() << query.lastError().text();
118 bool Database::createUserTagTable()
120 qDebug() << __PRETTY_FUNCTION__;
122 bool created = false;
124 if (m_database.isOpen()) {
127 created = query.exec("CREATE TABLE IF NOT EXISTS usertag ("
130 "PRIMARY KEY(userid, tagid),"
131 "FOREIGN KEY(userid) REFERENCES user(id),"
132 "FOREIGN KEY(tagid) REFERENCES tag(id)"
139 QStringList Database::getInterestingPeople(qulonglong userId,
140 const GeoCoordinate &southWestCoordinates,
141 const GeoCoordinate &northEastCoordinates)
143 qDebug() << __PRETTY_FUNCTION__;
145 QStringList interestingPeopleId;
147 QSqlQuery query(QString("SELECT user.id, user.name FROM user WHERE "
148 "user.latitude >= '%1' AND user.latitude <= '%2' AND "
149 "user.longitude >= '%3' AND user.longitude <= '%4' AND user.id IN "
150 "(SELECT DISTINCT usertag.userid FROM usertag WHERE usertag.tagid IN "
151 "(SELECT usertag.tagid FROM usertag WHERE usertag.userid = '%5') AND "
152 "usertag.userid != '%6')")
153 .arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
154 .arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude())
155 .arg(userId).arg(userId));
157 qWarning() << query.lastQuery();
160 interestingPeopleId.append(query.value(0).toString());
162 return interestingPeopleId;
165 QList<Notification> &Database::getNotifications(qulonglong userId)
167 qDebug() << __PRETTY_FUNCTION__;
169 m_notifications.clear();
171 QSqlQuery query(QString("SELECT message.id, message.senderid, user.name, message.text FROM "
172 "message, user WHERE message.receiverid = '%1' AND "
173 "message.senderid = user.id").arg(userId));
175 qWarning() << query.lastQuery();
176 qWarning() << query.lastError().text();
178 while (query.next()) {
179 qWarning() << query.value(1).toString();
180 Notification notification;
181 notification.setId(query.value(0).toString());
182 notification.setSenderId(query.value(1).toString());
183 notification.setTitle(query.value(2).toString());
184 notification.setText(query.value(3).toString());
185 m_notifications.append(notification);
188 return m_notifications;
191 QStringList Database::getTags(qulonglong userId)
193 qDebug() << __PRETTY_FUNCTION__;
197 QSqlQuery query(QString("SELECT tag.name FROM usertag, tag WHERE usertag.userid = '%1' "
198 "AND usertag.tagid = tag.id").arg(userId));
201 tags.append(query.value(0).toString());
206 bool Database::openDatabase()
208 qDebug() << __PRETTY_FUNCTION__;
210 m_database = QSqlDatabase::addDatabase("QSQLITE");
212 QString path(QDir::home().path());
213 path.append(QDir::separator()).append("my.db.sqlite");
214 path = QDir::toNativeSeparators(path);
215 m_database.setDatabaseName(path);
217 return m_database.open();