Merge lp:~zeitgeist/zeitgeist/querybystorage into lp:zeitgeist/0.1

Proposed by Siegfried Gevatter
Status: Merged
Approved by: Seif Lotfy
Approved revision: 1715
Merged at revision: 1716
Proposed branch: lp:~zeitgeist/zeitgeist/querybystorage
Merge into: lp:zeitgeist/0.1
Diff against target: 82 lines (+22/-20)
2 files modified
_zeitgeist/engine/main.py (+7/-4)
test/engine-test.py (+15/-16)
To merge this branch: bzr merge lp:~zeitgeist/zeitgeist/querybystorage
Reviewer Review Type Date Requested Status
Seif Lotfy Approve
Review via email: mp+57911@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Seif Lotfy (seif) wrote :

Works here good job!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '_zeitgeist/engine/main.py'
2--- _zeitgeist/engine/main.py 2011-04-07 08:29:36 +0000
3+++ _zeitgeist/engine/main.py 2011-04-15 17:16:39 +0000
4@@ -387,22 +387,25 @@
5
6 def _build_sql_event_filter(self, time_range, templates, storage_state):
7
8- # FIXME: We need to take storage_state into account
9- if storage_state != StorageState.Any:
10- raise NotImplementedError
11+ where = WhereClause(WhereClause.AND)
12
13 # thekorn: we are using the unary operator here to tell sql to not use
14 # the index on the timestamp column at the first place. This `fix` for
15 # (LP: #672965) is based on some benchmarks, which suggest a performance
16 # win, but we might not oversee all implications.
17 # (see http://www.sqlite.org/optoverview.html section 6.0)
18- where = WhereClause(WhereClause.AND)
19 min_time, max_time = time_range
20 if min_time != 0:
21 where.add("+timestamp >= ?", min_time)
22 if max_time != sys.maxint:
23 where.add("+timestamp <= ?", max_time)
24
25+ if storage_state in (StorageState.Available, StorageState.NotAvailable):
26+ where.add("(subj_storage_state = ? OR subj_storage_state IS NULL)",
27+ storage_state)
28+ elif storage_state != StorageState.Any:
29+ raise ValueError, "Unknown storage state '%d'" % storage_state
30+
31 where.extend(self._build_sql_from_event_templates(templates))
32
33 return where
34
35=== modified file 'test/engine-test.py'
36--- test/engine-test.py 2011-04-07 06:56:54 +0000
37+++ test/engine-test.py 2011-04-15 17:16:39 +0000
38@@ -280,10 +280,20 @@
39 (1, 10000000),
40 [],
41 StorageState.Any,
42- 5,
43- 0,)
44- self.assertEquals(5, len(result))
45-
46+ 0,
47+ 0)
48+ self.assertEquals(5, len(result))
49+
50+ def testFindFiveWithStorageState(self):
51+ import_events("test/data/five_events.js", self.engine)
52+ # The event's storage is unknown, so we get them back always.
53+ result = self.engine.find_eventids(TimeRange.always(), [],
54+ StorageState.Available, 0, 0)
55+ self.assertEquals(5, len(result))
56+ result = self.engine.find_eventids(TimeRange.always(), [],
57+ StorageState.NotAvailable, 0, 0)
58+ self.assertEquals(5, len(result))
59+
60 def testFindWithNonExistantActor(self):
61 # Bug 496109: filtering by timerange and a non-existing actor gave an
62 # incorrect result.
63@@ -417,18 +427,7 @@
64 orig_ids = self.engine.insert_events([event])
65 result_ids = self.engine.find_eventids(TimeRange.always(), [Event()], StorageState.Any, 0, 1)
66 self.assertEquals(orig_ids, result_ids)
67-
68- def testDontFindState(self):
69- # searchin by storage state is currently not implemented
70- # checking for the error
71- import_events("test/data/twenty_events.js", self.engine)
72- self.assertRaises(NotImplementedError, self.engine.find_eventids,
73- (1, 10000000),
74- [],
75- StorageState.Available,
76- 1,
77- 0,)
78-
79+
80 def testFindEventsEventTemplate(self):
81 import_events("test/data/five_events.js", self.engine)
82 subj = Subject.new_for_values(interpretation="stfu:Bee")