implemented JOINing two tables
[toast/confclerk.git] / src / mvc / event.cpp
1 #include "event.h"
2
3 // 'event' record is splitted into two separate tables 'event' and 'virtual_event'
4 // for the FTS (Full-Text-Search) support and so, it is necessary to provide/use
5 // two table names + corresponding parameters/methods, see bellow
6 QString const Event::sTable1Name = QString("event");
7 QString const Event::sTable2Name = QString("virtual_event");
8 int const Event::sTable1ColCount = 8; // see 'toRecord()' for more details
9 int const Event::sTable2ColCount = 5; // see 'toRecord()' for more details
10
11 QSqlRecord const Event::sColumns = Event::toRecord(QList<QSqlField>()
12     /* 'columns from Table 1 */
13     << QSqlField("id", QVariant::Int)
14     << QSqlField("xid_conference", QVariant::Int)
15     << QSqlField("start", QVariant::DateTime)
16     << QSqlField("duration", QVariant::Int)
17     << QSqlField("xid_activity", QVariant::Int)
18     << QSqlField("type", QVariant::String)
19     << QSqlField("language", QVariant::String)
20     << QSqlField("favourite", QVariant::Bool)
21     /* 'columns' from Table2 */
22     << QSqlField("tag", QVariant::String)
23     << QSqlField("title", QVariant::String)
24     << QSqlField("subtitle", QVariant::String)
25     << QSqlField("abstract", QVariant::String)
26     << QSqlField("description", QVariant::String));
27
28
29 Event Event::getById(int id, int conferenceId)
30 {
31     QSqlQuery query;
32     query.prepare(selectQueryJoin2T("id") + "WHERE event.id = :id AND event.xid_conference = :conf");
33     query.bindValue(":id", id);
34     query.bindValue(":conf", conferenceId);
35
36     return loadOne(query);
37 }
38
39 QList<Event> Event::getByDate(const QDate& date, int conferenceId)
40 {
41     QSqlQuery query;
42     query.prepare(selectQueryJoin2T("id") + "WHERE event.xid_conference = :conf AND event.start >= :start AND event.start < :end ORDER BY event.start");
43     query.bindValue(":conf", conferenceId);
44     query.bindValue(":start", convertToDb(date, QVariant::DateTime));
45     query.bindValue(":end", convertToDb(date.addDays(1), QVariant::DateTime));
46
47     return load(query);
48 }
49