Merge lp:~boiko/calls-scope/optimize_queries into lp:calls-scope

Proposed by Gustavo Pichorim Boiko
Status: Merged
Approved by: Kyle Nitzsche
Approved revision: 43
Merge reported by: Kyle Nitzsche
Merged at revision: not available
Proposed branch: lp:~boiko/calls-scope/optimize_queries
Merge into: lp:calls-scope
Prerequisite: lp:~boiko/calls-scope/use_history_contact_info
Diff against target: 147 lines (+62/-28)
2 files modified
include/query.h (+1/-1)
src/query.cpp (+61/-27)
To merge this branch: bzr merge lp:~boiko/calls-scope/optimize_queries
Reviewer Review Type Date Requested Status
calls-scope-team Pending
Review via email: mp+274773@code.launchpad.net

Commit message

Optimize the queries by reusing existing results instead of fetching everything
every time.

Description of the change

Optimize the queries by reusing existing results instead of fetching everything
every time.

To post a comment you must log in.
41. By Gustavo Pichorim Boiko

Merge latest changes from parent branch.

42. By Gustavo Pichorim Boiko

Do case insensitive searching.

43. By Gustavo Pichorim Boiko

Merge parent changes.

Revision history for this message
Kyle Nitzsche (knitzsche) wrote :

MR comment might also have mentioned that this appears to use a new getEventsForDateRange api (that I requested :)

Revision history for this message
Kyle Nitzsche (knitzsche) wrote :

no, ignore that (me goes to get coffee ;)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/query.h'
2--- include/query.h 2015-10-16 21:51:06 +0000
3+++ include/query.h 2015-10-16 21:51:06 +0000
4@@ -61,7 +61,7 @@
5 unity::scopes::Category::SCPtr cat7;
6 unity::scopes::Category::SCPtr cat30;
7
8- void getEventsForDateRange(QDate start, QDate end, History::EventViewPtr eView, History::Events &ev_l);
9+ History::Events getEventsForDateRange(QDate start, QDate end, History::EventViewPtr eView, History::Events &ev_l);
10 void processEvents(History::Events &ev_l);
11 QList<unity::scopes::VariantArray> collapsedArrays_varr;
12 QList<unity::scopes::VariantMap> collapsedMaps_varr;
13
14=== modified file 'src/query.cpp'
15--- src/query.cpp 2015-10-16 21:51:06 +0000
16+++ src/query.cpp 2015-10-16 21:51:06 +0000
17@@ -101,43 +101,80 @@
18 return QString("<strong>%1</strong>").arg(str);
19 }
20
21-void Query::getEventsForDateRange(QDate start, QDate end, EventViewPtr eView, Events &ev_l)
22+Events Query::getEventsForDateRange(QDate start, QDate end, EventViewPtr eView, Events &ev_l)
23 {
24-
25+ // in order to optimize the parsing, this functions reuses the events that
26+ // were previously retrieved and then if necessary, get extra events
27 qDebug() << "=== calls in getEventsforDateRange";
28 qDebug() << "=== calls start: " << start;
29 qDebug() << "=== calls end: " << end;
30+ Events l_toadd;
31 bool going = true;
32 while (going){
33 try {
34- Events l = eView->nextPage();
35- if (l.size() == 0)
36- {
37- qDebug() << "=== calls NO events left";
38- break;
39- }
40- //iterate list and if out of date range remove event
41- //if all out of date range stop getting more events
42- Events l_toadd;
43- Q_FOREACH(const Event &event, l) {
44+ bool outOfBounds = false;
45+ // start by parsing the existing events
46+ Q_FOREACH(const Event &event, ev_l) {
47 QDate ev_date = event.timestamp().date();
48+
49+ // if the date is newer than the end date, keep searching
50+ // as the results are sorted from newer to older
51+ if (ev_date > end) {
52+ continue;
53+ }
54+
55+ // now if the date is older than the end date, we are already
56+ // out of bounds and can stop processing
57 if (ev_date < start) {
58+ outOfBounds = true;
59 break;
60 }
61- if (ev_date > end)
62- {
63- continue;
64- }
65+
66+ // if we got here, we want the event
67 l_toadd.append(event);
68 }
69- ev_l.append(l_toadd);
70+
71+ if (outOfBounds) {
72+ break;
73+ }
74+
75+ // now, if we didn't get out of bounds in the existing events,
76+ // we might want to fetch some more to get the full list
77+ outOfBounds = false;
78+ while (!outOfBounds) {
79+ Events l = eView->nextPage();
80+
81+ // append the events to the existing ones for the next query
82+ ev_l.append(l);
83+
84+ // and process them too
85+ Q_FOREACH(const Event &event, ev_l) {
86+ QDate ev_date = event.timestamp().date();
87+
88+ // if the date is newer than the end date, keep searching
89+ // as the results are sorted from newer to older
90+ if (ev_date > end) {
91+ continue;
92+ }
93+
94+ // now if the date is older than the end date, we are already
95+ // out of bounds and can stop processing
96+ if (ev_date < start) {
97+ outOfBounds = true;
98+ break;
99+ }
100+
101+ // if we got here, we want the event
102+ l_toadd.append(event);
103+ }
104+ }
105 }
106 catch (std::exception &e){
107 qDebug() << "=== calls exception caught";
108 break; // just to be sure
109 }
110 }
111- return;
112+ return l_toadd;
113 }
114
115 void Query::processEvents(Events &ev_l)
116@@ -358,10 +395,9 @@
117 EventViewPtr eView = manager->queryEvents(EventType::EventTypeVoice, sort);
118
119 Events ev_l;
120- getEventsForDateRange(today, today, eView, ev_l);
121- processEvents(ev_l);
122+ Events filtered = getEventsForDateRange(today, today, eView, ev_l);
123+ processEvents(filtered);
124
125- bool going = true;
126 bool agged = false;
127 if (search_metadata().is_aggregated())
128 {
129@@ -427,14 +463,12 @@
130 else
131 Query::pushReplies(vevents1, id_collEvs1, reply);
132
133- eView = manager->queryEvents(EventType::EventTypeVoice, sort);
134- getEventsForDateRange(sevenDaysStart, sevenDaysEnd, eView, ev_l);
135- processEvents(ev_l);
136+ filtered = getEventsForDateRange(sevenDaysStart, sevenDaysEnd, eView, ev_l);
137+ processEvents(filtered);
138 Query::pushReplies(vevents7, id_collEvs7, reply);
139
140- eView = manager->queryEvents(EventType::EventTypeVoice, sort);
141- getEventsForDateRange(thirtyDaysStart, thirtyDaysEnd, eView, ev_l);
142- processEvents(ev_l);
143+ filtered = getEventsForDateRange(thirtyDaysStart, thirtyDaysEnd, eView, ev_l);
144+ processEvents(filtered);
145 Query::pushReplies(vevents30, id_collEvs30, reply);
146 }
147 }

Subscribers

People subscribed via source and target branches