Siegfried Gevatter has proposed merging lp:~zeitgeist/zeitgeist/fix772041 into
lp:zeitgeist.
Requested reviews:
Zeitgeist Framework Team (zeitgeist)
Related bugs:
Bug #772041 in Zeitgeist Framework: "Timestamp isn't considered when choosing
events by popularity"
https://bugs.launchpad.net/zeitgeist/+bug/772041
For more details, see:
https://code.launchpad.net/~zeitgeist/zeitgeist/fix772041/+merge/59810
Here we go!
The elif's could be simplified out in exchange of some name parsing code in
_zeitgeist/engine/datamodel.py, but it's probably not worth it since it'd just
complicate it more.
Once this is merged I'll follow up with the code for sorting by event_origin
and current_uri.
--
https://code.launchpad.net/~zeitgeist/zeitgeist/fix772041/+merge/59810
Your team Zeitgeist Framework Team is requested to review the proposed merge of
lp:~zeitgeist/zeitgeist/fix772041 into lp:zeitgeist.
=== modified file '_zeitgeist/engine/main.py'
--- _zeitgeist/engine/main.py 2011-04-27 18:56:34 +
+++ _zeitgeist/engine/main.py 2011-05-03 17:57:25 +
@@ -447,43 +447,84 @@
else:
raise NotImplementedError, "Unsupported return_mode."
- if order == ResultType.OldestActor:
- sql += """
+ wheresql = " WHERE %s" % where.sql if where else ""
+
+ def group_and_sort(field, wheresql, time_asc=False, count_asc=None,
+ aggregation_type='max'):
+
+ args = {
+'field': field,
+'aggregation_type': aggregation_type,
+'where_sql': wheresql,
+'time_sorting': 'ASC' if time_asc else 'DESC',
+'aggregation_sql': '',
+'order_sql': '',
+ }
+
+ if count_asc is not None:
+args['aggregation_sql'] = ', COUNT(%s) AS num_events' % \
+ field
+args['order_sql'] = 'num_events %s,' % \
+ ('ASC' if count_asc else 'DESC')
+
+ return """
NATURAL JOIN (
- SELECT actor, min(timestamp) AS timestamp
- FROM event_view %s
- GROUP BY actor)
-""" % ("WHERE " + where.sql if where.sql else "")
- elif where:
- sql += " WHERE " + where.sql
+ SELECT %(field)s,
+ %(aggregation_type)s(timestamp) AS timestamp
+ %(aggregation_sql)s
+ FROM event_view %(where_sql)s
+ GROUP BY %(field)s)
+GROUP BY %(field)s
+ORDER BY %(order_sql)s timestamp %(time_sorting)s
+""" % args
- sql += (
- " ORDER BY timestamp DESC",
- " ORDER BY timestamp ASC",
- # thekorn: please note, event.subj_id == uri.id, as in
- # the subj_id points directly to an entry in the uri table,
- # so we are in fact grouping by subj_uris here
- " GROUP BY subj_id ORDER BY timestamp DESC",
- " GROUP BY subj_id ORDER BY timestamp ASC",
- " GROUP BY subj_id ORDER BY COUNT(subj_id) DESC, timestamp DESC",
- " GROUP BY subj_id ORDER BY COUNT(subj_id) ASC, timestamp ASC",
- " GROUP BY actor ORDER BY COUNT(actor) DESC, timestamp DESC",
- " GROUP BY actor ORDER BY COUNT(actor) ASC, timestamp ASC",
- " GROUP BY actor ORDER BY timestamp DESC",
- " GROUP BY actor ORDER BY timestamp ASC",
- " GROUP BY subj_origin ORDER BY timestamp DESC",
- " GROUP BY subj_origin ORDER BY timestamp ASC",
- " GROUP BY subj_origin ORDER BY COUNT(subj_origin) DESC, timestamp DESC",
- " GROUP BY subj_origin ORDER BY COUNT(subj_origin) ASC, timestamp ASC",
- " GROUP BY actor ORDER BY timestamp ASC",
- " GROUP BY subj_interpretation ORDER BY timestamp DESC",
- " GROUP BY subj_interpretation ORDER BY timestamp ASC",
- " GROUP BY subj_interpretation ORDER BY COUNT(subj_interpretation) DESC",
- " GROUP BY subj_interpretation ORDER BY COUNT(subj_interpretation) ASC",
- " GROUP BY subj_mimetype ORDER BY timestamp DESC",
- " GROUP BY subj_mimetype ORDER BY timestamp ASC",
- " GROUP BY subj_mimetype ORDER BY COUNT(subj_mimetype) DESC",
- " GROUP BY subj_mimetype ORDER BY COUNT(subj_mimetype) ASC")[order]
+ if order == ResultType.MostRecentEvents:
+ sql += wheresql + " ORDER BY timestamp DESC"
+ elif order == ResultType.LeastRecentEvents:
+ sql += wheresql + " ORDER BY timestamp ASC"
+ elif order == ResultType.MostRecentSubjects:
+ # Remember, event.subj_id identifies the subject URI
+ sql += group_and_sort('subj_id', wheresql, time_asc=False)
+ elif order == ResultType.LeastRecentSubjects:
+ sql += group_and_sort('subj_id', wheresql, time_asc=True)
+ elif order == ResultType.MostPopularSubjects:
+ sql += group_and_sort('subj_id', wheresql, time_asc=False, count_asc=False)
+ elif order == ResultType.LeastPopularSubjects:
+ sql += group_and_sort('subj_id', wheresql, time_asc=True, count_asc=True)
+ elif order == ResultType.MostRecentActor:
+ sql += group_and_sort('actor', wheresql, time_asc=False)
+ elif order == ResultType.LeastRecentActor:
+ sql += group_and_sort('actor', wheresql, time_asc=True)
+ elif order == ResultType.MostPopularActor:
+ sql += group_and_sort('actor', wheresql, time_asc=False, count_asc=False)
+ elif order == ResultType.LeastPopularActor:
+ sql += group_and_sort('actor', wheresql, time_asc=True, count