Merge lp:~rainct/zeitgeist/fts-sorting into lp:~zeitgeist/zeitgeist/bluebird

Proposed by Siegfried Gevatter
Status: Merged
Approved by: Michal Hruby
Approved revision: no longer in the source branch.
Merged at revision: 438
Proposed branch: lp:~rainct/zeitgeist/fts-sorting
Merge into: lp:~zeitgeist/zeitgeist/bluebird
Diff against target: 296 lines (+108/-51)
3 files modified
extensions/fts++/indexer.cpp (+19/-8)
src/datamodel.vala (+51/-1)
src/db-reader.vala (+38/-42)
To merge this branch: bzr merge lp:~rainct/zeitgeist/fts-sorting
Reviewer Review Type Date Requested Status
Michal Hruby (community) Approve
Review via email: mp+97985@code.launchpad.net
To post a comment you must log in.
lp:~rainct/zeitgeist/fts-sorting updated
433. By Seif Lotfy

Merged Trever's fixes for bug 953041

434. By Seif Lotfy

DS-Registry: fix vala 0.16 incompatiblity

435. By Seif Lotfy

Storage Monitor Extensions: fix bug lp:950983

436. By Seif Lotfy

Storage Monitor Extension: refactor the INSERT OR REPLACE statement

Revision history for this message
Michal Hruby (mhr3) wrote :

Looks fine.

review: Approve
Revision history for this message
Michal Hruby (mhr3) wrote :

But perhaps the is_asc method should be a (static?) method of ResultType.

lp:~rainct/zeitgeist/fts-sorting updated
437. By Siegfried Gevatter

Fix typo in table-lookup comment.

438. By Siegfried Gevatter

Refactor ResultType sorting and fix FTS++'s Search() with LeastRecent*

Revision history for this message
Michal Hruby (mhr3) wrote :

Yey!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'extensions/fts++/indexer.cpp'
--- extensions/fts++/indexer.cpp 2012-03-16 20:03:05 +0000
+++ extensions/fts++/indexer.cpp 2012-03-19 20:01:23 +0000
@@ -778,7 +778,9 @@
778 }778 }
779 else779 else
780 {780 {
781 enquire->set_sort_by_value (VALUE_TIMESTAMP, true);781 bool reversed_sort = not
782 zeitgeist_result_type_is_sort_order_asc (result_type);
783 enquire->set_sort_by_value (VALUE_TIMESTAMP, reversed_sort);
782 }784 }
783785
784 if (result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_SUBJECTS ||786 if (result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_SUBJECTS ||
@@ -786,7 +788,20 @@
786 result_type == ZEITGEIST_RESULT_TYPE_MOST_POPULAR_SUBJECTS ||788 result_type == ZEITGEIST_RESULT_TYPE_MOST_POPULAR_SUBJECTS ||
787 result_type == ZEITGEIST_RESULT_TYPE_LEAST_POPULAR_SUBJECTS)789 result_type == ZEITGEIST_RESULT_TYPE_LEAST_POPULAR_SUBJECTS)
788 {790 {
789 enquire->set_collapse_key (VALUE_URI_HASH);791 enquire->set_collapse_key (VALUE_URI_HASH);
792 }
793 else if (result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_ORIGIN ||
794 result_type == ZEITGEIST_RESULT_TYPE_LEAST_RECENT_ORIGIN ||
795 result_type == ZEITGEIST_RESULT_TYPE_MOST_POPULAR_ORIGIN ||
796 result_type == ZEITGEIST_RESULT_TYPE_LEAST_POPULAR_ORIGIN)
797 {
798 // FIXME: not really correct but close :)
799 enquire->set_collapse_key (VALUE_URI_HASH);
800 }
801 else if (result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_EVENTS ||
802 result_type == ZEITGEIST_RESULT_TYPE_LEAST_RECENT_EVENTS)
803 {
804 enquire->set_collapse_key (VALUE_EVENT_ID);
790 }805 }
791806
792 Xapian::Query q(query_parser->parse_query (query_string, QUERY_PARSER_FLAGS));807 Xapian::Query q(query_parser->parse_query (query_string, QUERY_PARSER_FLAGS));
@@ -1096,12 +1111,8 @@
1096 return NULL;1111 return NULL;
1097 }1112 }
10981113
1099 bool reversed_sort =1114 bool reversed_sort = not
1100 result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_EVENTS ||1115 zeitgeist_result_type_is_sort_order_asc (result_type);
1101 result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_SUBJECTS ||
1102 result_type == ZEITGEIST_RESULT_TYPE_MOST_POPULAR_SUBJECTS ||
1103 result_type == ZEITGEIST_RESULT_TYPE_MOST_RECENT_ORIGIN ||
1104 result_type == ZEITGEIST_RESULT_TYPE_MOST_POPULAR_ORIGIN;
11051116
1106 if (result_type == RELEVANCY_RESULT_TYPE)1117 if (result_type == RELEVANCY_RESULT_TYPE)
1107 {1118 {
11081119
=== modified file 'src/datamodel.vala'
--- src/datamodel.vala 2012-02-18 21:33:57 +0000
+++ src/datamodel.vala 2012-03-19 20:01:23 +0000
@@ -230,10 +230,60 @@
230 // different origin ordered230 // different origin ordered
231 // by the popularity of the231 // by the popularity of the
232 // origins232 // origins
233 LEAST_POPULAR_EVENT_ORIGIN = 30, // The last event of each233 LEAST_POPULAR_EVENT_ORIGIN = 30; // The last event of each
234 // different origin, ordered234 // different origin, ordered
235 // ascendingly by the235 // ascendingly by the
236 // popularity of the origin236 // popularity of the origin
237
238 /*
239 * Returns true if the results for the given result_type will be sorted
240 * ascendantly by date, false if they'll be sorted descendingly.
241 **/
242 public static bool is_sort_order_asc (ResultType result_type)
243 {
244 switch (result_type)
245 {
246 // FIXME: Why are LEAST_POPULAR_* using ASC?
247 case ResultType.LEAST_RECENT_EVENTS:
248 case ResultType.LEAST_RECENT_EVENT_ORIGIN:
249 case ResultType.LEAST_POPULAR_EVENT_ORIGIN:
250 case ResultType.LEAST_RECENT_SUBJECTS:
251 case ResultType.LEAST_POPULAR_SUBJECTS:
252 case ResultType.LEAST_RECENT_CURRENT_URI:
253 case ResultType.LEAST_POPULAR_CURRENT_URI:
254 case ResultType.LEAST_RECENT_ACTOR:
255 case ResultType.LEAST_POPULAR_ACTOR:
256 case ResultType.OLDEST_ACTOR:
257 case ResultType.LEAST_RECENT_ORIGIN:
258 case ResultType.LEAST_POPULAR_ORIGIN:
259 case ResultType.LEAST_RECENT_SUBJECT_INTERPRETATION:
260 case ResultType.LEAST_POPULAR_SUBJECT_INTERPRETATION:
261 case ResultType.LEAST_RECENT_MIMETYPE:
262 case ResultType.LEAST_POPULAR_MIMETYPE:
263 return true;
264
265 case ResultType.MOST_RECENT_EVENTS:
266 case ResultType.MOST_RECENT_EVENT_ORIGIN:
267 case ResultType.MOST_POPULAR_EVENT_ORIGIN:
268 case ResultType.MOST_RECENT_SUBJECTS:
269 case ResultType.MOST_POPULAR_SUBJECTS:
270 case ResultType.MOST_RECENT_CURRENT_URI:
271 case ResultType.MOST_POPULAR_CURRENT_URI:
272 case ResultType.MOST_RECENT_ACTOR:
273 case ResultType.MOST_POPULAR_ACTOR:
274 case ResultType.MOST_RECENT_ORIGIN:
275 case ResultType.MOST_POPULAR_ORIGIN:
276 case ResultType.MOST_RECENT_SUBJECT_INTERPRETATION:
277 case ResultType.MOST_POPULAR_SUBJECT_INTERPRETATION:
278 case ResultType.MOST_RECENT_MIMETYPE:
279 case ResultType.MOST_POPULAR_MIMETYPE:
280 return false;
281
282 default:
283 warning ("Unrecognized ResultType: %u", (uint) result_type);
284 return true;
285 }
286 }
237 }287 }
238288
239 /*289 /*
240290
=== modified file 'src/db-reader.vala'
--- src/db-reader.vala 2012-03-17 14:47:09 +0000
+++ src/db-reader.vala 2012-03-19 20:01:23 +0000
@@ -173,109 +173,107 @@
173 switch (result_type)173 switch (result_type)
174 {174 {
175 case ResultType.MOST_RECENT_EVENTS:175 case ResultType.MOST_RECENT_EVENTS:
176 sql += where_sql + " ORDER BY timestamp DESC";176 sql += where_sql + " ORDER BY ";
177 break;177 break;
178 case ResultType.LEAST_RECENT_EVENTS:178 case ResultType.LEAST_RECENT_EVENTS:
179 sql += where_sql + " ORDER BY timestamp ASC";179 sql += where_sql + " ORDER BY ";
180 break;180 break;
181 case ResultType.MOST_RECENT_EVENT_ORIGIN:181 case ResultType.MOST_RECENT_EVENT_ORIGIN:
182 sql += group_and_sort ("origin", where_sql, false);182 sql += group_and_sort ("origin", where_sql);
183 break;183 break;
184 case ResultType.LEAST_RECENT_EVENT_ORIGIN:184 case ResultType.LEAST_RECENT_EVENT_ORIGIN:
185 sql += group_and_sort ("origin", where_sql, true);185 sql += group_and_sort ("origin", where_sql);
186 break;186 break;
187 case ResultType.MOST_POPULAR_EVENT_ORIGIN:187 case ResultType.MOST_POPULAR_EVENT_ORIGIN:
188 sql += group_and_sort ("origin", where_sql, false, false);188 sql += group_and_sort ("origin", where_sql, false);
189 break;189 break;
190 case ResultType.LEAST_POPULAR_EVENT_ORIGIN:190 case ResultType.LEAST_POPULAR_EVENT_ORIGIN:
191 sql += group_and_sort ("origin", where_sql, true, true);191 sql += group_and_sort ("origin", where_sql, true);
192 break;192 break;
193 case ResultType.MOST_RECENT_SUBJECTS:193 case ResultType.MOST_RECENT_SUBJECTS:
194 sql += group_and_sort ("subj_id", where_sql, false);194 sql += group_and_sort ("subj_id", where_sql);
195 break;195 break;
196 case ResultType.LEAST_RECENT_SUBJECTS:196 case ResultType.LEAST_RECENT_SUBJECTS:
197 sql += group_and_sort ("subj_id", where_sql, true);197 sql += group_and_sort ("subj_id", where_sql);
198 break;198 break;
199 case ResultType.MOST_POPULAR_SUBJECTS:199 case ResultType.MOST_POPULAR_SUBJECTS:
200 sql += group_and_sort ("subj_id", where_sql, false, false);200 sql += group_and_sort ("subj_id", where_sql, false);
201 break;201 break;
202 case ResultType.LEAST_POPULAR_SUBJECTS:202 case ResultType.LEAST_POPULAR_SUBJECTS:
203 sql += group_and_sort ("subj_id", where_sql, true, true);203 sql += group_and_sort ("subj_id", where_sql, true);
204 break;204 break;
205 case ResultType.MOST_RECENT_CURRENT_URI:205 case ResultType.MOST_RECENT_CURRENT_URI:
206 sql += group_and_sort ("subj_id_current", where_sql, false);206 sql += group_and_sort ("subj_id_current", where_sql);
207 break;207 break;
208 case ResultType.LEAST_RECENT_CURRENT_URI:208 case ResultType.LEAST_RECENT_CURRENT_URI:
209 sql += group_and_sort ("subj_id_current", where_sql, true);209 sql += group_and_sort ("subj_id_current", where_sql);
210 break;210 break;
211 case ResultType.MOST_POPULAR_CURRENT_URI:211 case ResultType.MOST_POPULAR_CURRENT_URI:
212 sql += group_and_sort ("subj_id_current", where_sql,212 sql += group_and_sort ("subj_id_current", where_sql, false);
213 false, false);
214 break;213 break;
215 case ResultType.LEAST_POPULAR_CURRENT_URI:214 case ResultType.LEAST_POPULAR_CURRENT_URI:
216 sql += group_and_sort ("subj_id_current", where_sql,215 sql += group_and_sort ("subj_id_current", where_sql, true);
217 true, true);
218 break;216 break;
219 case ResultType.MOST_RECENT_ACTOR:217 case ResultType.MOST_RECENT_ACTOR:
220 sql += group_and_sort ("actor", where_sql, false);218 sql += group_and_sort ("actor", where_sql);
221 break;219 break;
222 case ResultType.LEAST_RECENT_ACTOR:220 case ResultType.LEAST_RECENT_ACTOR:
223 sql += group_and_sort ("actor", where_sql, true);221 sql += group_and_sort ("actor", where_sql);
224 break;222 break;
225 case ResultType.MOST_POPULAR_ACTOR:223 case ResultType.MOST_POPULAR_ACTOR:
226 sql += group_and_sort ("actor", where_sql, false, false);224 sql += group_and_sort ("actor", where_sql, false);
227 break;225 break;
228 case ResultType.LEAST_POPULAR_ACTOR:226 case ResultType.LEAST_POPULAR_ACTOR:
229 sql += group_and_sort ("actor", where_sql, true, true);227 sql += group_and_sort ("actor", where_sql, true);
230 break;228 break;
231 case ResultType.OLDEST_ACTOR:229 case ResultType.OLDEST_ACTOR:
232 sql += group_and_sort ("actor", where_sql, true, null, "min");230 sql += group_and_sort ("actor", where_sql, null, "min");
233 break;231 break;
234 case ResultType.MOST_RECENT_ORIGIN:232 case ResultType.MOST_RECENT_ORIGIN:
235 sql += group_and_sort ("subj_origin", where_sql, false);233 sql += group_and_sort ("subj_origin", where_sql);
236 break;234 break;
237 case ResultType.LEAST_RECENT_ORIGIN:235 case ResultType.LEAST_RECENT_ORIGIN:
238 sql += group_and_sort ("subj_origin", where_sql, true);236 sql += group_and_sort ("subj_origin", where_sql);
239 break;237 break;
240 case ResultType.MOST_POPULAR_ORIGIN:238 case ResultType.MOST_POPULAR_ORIGIN:
241 sql += group_and_sort ("subj_origin", where_sql, false, false);239 sql += group_and_sort ("subj_origin", where_sql, false);
242 break;240 break;
243 case ResultType.LEAST_POPULAR_ORIGIN:241 case ResultType.LEAST_POPULAR_ORIGIN:
244 sql += group_and_sort ("subj_origin", where_sql, true, true);242 sql += group_and_sort ("subj_origin", where_sql, true);
245 break;243 break;
246 case ResultType.MOST_RECENT_SUBJECT_INTERPRETATION:244 case ResultType.MOST_RECENT_SUBJECT_INTERPRETATION:
247 sql += group_and_sort ("subj_interpretation", where_sql, false);245 sql += group_and_sort ("subj_interpretation", where_sql);
248 break;246 break;
249 case ResultType.LEAST_RECENT_SUBJECT_INTERPRETATION:247 case ResultType.LEAST_RECENT_SUBJECT_INTERPRETATION:
250 sql += group_and_sort ("subj_interpretation", where_sql, true);248 sql += group_and_sort ("subj_interpretation", where_sql);
251 break;249 break;
252 case ResultType.MOST_POPULAR_SUBJECT_INTERPRETATION:250 case ResultType.MOST_POPULAR_SUBJECT_INTERPRETATION:
253 sql += group_and_sort ("subj_interpretation", where_sql,251 sql += group_and_sort ("subj_interpretation", where_sql, false);
254 false, false);
255 break;252 break;
256 case ResultType.LEAST_POPULAR_SUBJECT_INTERPRETATION:253 case ResultType.LEAST_POPULAR_SUBJECT_INTERPRETATION:
257 sql += group_and_sort ("subj_interpretation", where_sql,254 sql += group_and_sort ("subj_interpretation", where_sql, true);
258 true, true);
259 break;255 break;
260 case ResultType.MOST_RECENT_MIMETYPE:256 case ResultType.MOST_RECENT_MIMETYPE:
261 sql += group_and_sort ("subj_mimetype", where_sql, false);257 sql += group_and_sort ("subj_mimetype", where_sql);
262 break;258 break;
263 case ResultType.LEAST_RECENT_MIMETYPE:259 case ResultType.LEAST_RECENT_MIMETYPE:
264 sql += group_and_sort ("subj_mimetype", where_sql, true);260 sql += group_and_sort ("subj_mimetype", where_sql);
265 break;261 break;
266 case ResultType.MOST_POPULAR_MIMETYPE:262 case ResultType.MOST_POPULAR_MIMETYPE:
267 sql += group_and_sort ("subj_mimetype", where_sql,263 sql += group_and_sort ("subj_mimetype", where_sql, false);
268 false, false);
269 break;264 break;
270 case ResultType.LEAST_POPULAR_MIMETYPE:265 case ResultType.LEAST_POPULAR_MIMETYPE:
271 sql += group_and_sort ("subj_mimetype", where_sql,266 sql += group_and_sort ("subj_mimetype", where_sql, true);
272 true, true);
273 break;267 break;
274 default:268 default:
275 string error_message = "Invalid ResultType.";269 string error_message = "Invalid ResultType.";
276 warning (error_message);270 warning (error_message);
277 throw new EngineError.INVALID_ARGUMENT (error_message);271 throw new EngineError.INVALID_ARGUMENT (error_message);
278 }272 }
273
274 // complete the sort rule
275 bool time_asc = ResultType.is_sort_order_asc ((ResultType) result_type);
276 sql += " timestamp %s".printf ((time_asc) ? "ASC" : "DESC");
279277
280 int rc;278 int rc;
281 Sqlite.Statement stmt;279 Sqlite.Statement stmt;
@@ -578,10 +576,8 @@
578576
579 // Used by find_event_ids577 // Used by find_event_ids
580 private string group_and_sort (string field, string where_sql,578 private string group_and_sort (string field, string where_sql,
581 bool time_asc=false, bool? count_asc=null,579 bool? count_asc=null, string aggregation_type="max")
582 string aggregation_type="max")
583 {580 {
584 string time_sorting = (time_asc) ? "ASC" : "DESC";
585 string aggregation_sql = "";581 string aggregation_sql = "";
586 string order_sql = "";582 string order_sql = "";
587583
@@ -599,7 +595,7 @@
599 FROM event_view %s595 FROM event_view %s
600 GROUP BY %s)596 GROUP BY %s)
601 GROUP BY %s597 GROUP BY %s
602 ORDER BY %s timestamp %s598 ORDER BY %s
603 """.printf (599 """.printf (
604 field,600 field,
605 aggregation_type,601 aggregation_type,
@@ -607,7 +603,7 @@
607 where_sql,603 where_sql,
608 field,604 field,
609 field,605 field,
610 order_sql, time_sorting);606 order_sql);
611 }607 }
612608
613 // Used by find_event_ids609 // Used by find_event_ids

Subscribers

People subscribed via source and target branches