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
=== modified file 'include/query.h'
--- include/query.h 2015-10-16 21:51:06 +0000
+++ include/query.h 2015-10-16 21:51:06 +0000
@@ -61,7 +61,7 @@
61 unity::scopes::Category::SCPtr cat7;61 unity::scopes::Category::SCPtr cat7;
62 unity::scopes::Category::SCPtr cat30;62 unity::scopes::Category::SCPtr cat30;
6363
64 void getEventsForDateRange(QDate start, QDate end, History::EventViewPtr eView, History::Events &ev_l);64 History::Events getEventsForDateRange(QDate start, QDate end, History::EventViewPtr eView, History::Events &ev_l);
65 void processEvents(History::Events &ev_l);65 void processEvents(History::Events &ev_l);
66 QList<unity::scopes::VariantArray> collapsedArrays_varr;66 QList<unity::scopes::VariantArray> collapsedArrays_varr;
67 QList<unity::scopes::VariantMap> collapsedMaps_varr;67 QList<unity::scopes::VariantMap> collapsedMaps_varr;
6868
=== modified file 'src/query.cpp'
--- src/query.cpp 2015-10-16 21:51:06 +0000
+++ src/query.cpp 2015-10-16 21:51:06 +0000
@@ -101,43 +101,80 @@
101 return QString("<strong>%1</strong>").arg(str);101 return QString("<strong>%1</strong>").arg(str);
102}102}
103103
104void Query::getEventsForDateRange(QDate start, QDate end, EventViewPtr eView, Events &ev_l)104Events Query::getEventsForDateRange(QDate start, QDate end, EventViewPtr eView, Events &ev_l)
105{105{
106106 // in order to optimize the parsing, this functions reuses the events that
107 // were previously retrieved and then if necessary, get extra events
107 qDebug() << "=== calls in getEventsforDateRange";108 qDebug() << "=== calls in getEventsforDateRange";
108 qDebug() << "=== calls start: " << start;109 qDebug() << "=== calls start: " << start;
109 qDebug() << "=== calls end: " << end;110 qDebug() << "=== calls end: " << end;
111 Events l_toadd;
110 bool going = true;112 bool going = true;
111 while (going){113 while (going){
112 try {114 try {
113 Events l = eView->nextPage();115 bool outOfBounds = false;
114 if (l.size() == 0)116 // start by parsing the existing events
115 {117 Q_FOREACH(const Event &event, ev_l) {
116 qDebug() << "=== calls NO events left";
117 break;
118 }
119 //iterate list and if out of date range remove event
120 //if all out of date range stop getting more events
121 Events l_toadd;
122 Q_FOREACH(const Event &event, l) {
123 QDate ev_date = event.timestamp().date();118 QDate ev_date = event.timestamp().date();
119
120 // if the date is newer than the end date, keep searching
121 // as the results are sorted from newer to older
122 if (ev_date > end) {
123 continue;
124 }
125
126 // now if the date is older than the end date, we are already
127 // out of bounds and can stop processing
124 if (ev_date < start) {128 if (ev_date < start) {
129 outOfBounds = true;
125 break;130 break;
126 }131 }
127 if (ev_date > end)132
128 {133 // if we got here, we want the event
129 continue;
130 }
131 l_toadd.append(event);134 l_toadd.append(event);
132 }135 }
133 ev_l.append(l_toadd);136
137 if (outOfBounds) {
138 break;
139 }
140
141 // now, if we didn't get out of bounds in the existing events,
142 // we might want to fetch some more to get the full list
143 outOfBounds = false;
144 while (!outOfBounds) {
145 Events l = eView->nextPage();
146
147 // append the events to the existing ones for the next query
148 ev_l.append(l);
149
150 // and process them too
151 Q_FOREACH(const Event &event, ev_l) {
152 QDate ev_date = event.timestamp().date();
153
154 // if the date is newer than the end date, keep searching
155 // as the results are sorted from newer to older
156 if (ev_date > end) {
157 continue;
158 }
159
160 // now if the date is older than the end date, we are already
161 // out of bounds and can stop processing
162 if (ev_date < start) {
163 outOfBounds = true;
164 break;
165 }
166
167 // if we got here, we want the event
168 l_toadd.append(event);
169 }
170 }
134 }171 }
135 catch (std::exception &e){172 catch (std::exception &e){
136 qDebug() << "=== calls exception caught";173 qDebug() << "=== calls exception caught";
137 break; // just to be sure174 break; // just to be sure
138 }175 }
139 }176 }
140 return;177 return l_toadd;
141}178}
142179
143void Query::processEvents(Events &ev_l)180void Query::processEvents(Events &ev_l)
@@ -358,10 +395,9 @@
358 EventViewPtr eView = manager->queryEvents(EventType::EventTypeVoice, sort);395 EventViewPtr eView = manager->queryEvents(EventType::EventTypeVoice, sort);
359396
360 Events ev_l;397 Events ev_l;
361 getEventsForDateRange(today, today, eView, ev_l);398 Events filtered = getEventsForDateRange(today, today, eView, ev_l);
362 processEvents(ev_l);399 processEvents(filtered);
363400
364 bool going = true;
365 bool agged = false;401 bool agged = false;
366 if (search_metadata().is_aggregated())402 if (search_metadata().is_aggregated())
367 {403 {
@@ -427,14 +463,12 @@
427 else463 else
428 Query::pushReplies(vevents1, id_collEvs1, reply);464 Query::pushReplies(vevents1, id_collEvs1, reply);
429465
430 eView = manager->queryEvents(EventType::EventTypeVoice, sort);466 filtered = getEventsForDateRange(sevenDaysStart, sevenDaysEnd, eView, ev_l);
431 getEventsForDateRange(sevenDaysStart, sevenDaysEnd, eView, ev_l);467 processEvents(filtered);
432 processEvents(ev_l);
433 Query::pushReplies(vevents7, id_collEvs7, reply);468 Query::pushReplies(vevents7, id_collEvs7, reply);
434469
435 eView = manager->queryEvents(EventType::EventTypeVoice, sort);470 filtered = getEventsForDateRange(thirtyDaysStart, thirtyDaysEnd, eView, ev_l);
436 getEventsForDateRange(thirtyDaysStart, thirtyDaysEnd, eView, ev_l);471 processEvents(filtered);
437 processEvents(ev_l);
438 Query::pushReplies(vevents30, id_collEvs30, reply);472 Query::pushReplies(vevents30, id_collEvs30, reply);
439 }473 }
440}474}

Subscribers

People subscribed via source and target branches