Siegfried Gevatter has proposed merging lp:~zeitgeist/zeitgeist/querybystorage 
into lp:zeitgeist.

Requested reviews:
  Zeitgeist Framework Team (zeitgeist)

For more details, see:
https://code.launchpad.net/~zeitgeist/zeitgeist/querybystorage/+merge/57911
-- 
https://code.launchpad.net/~zeitgeist/zeitgeist/querybystorage/+merge/57911
Your team Zeitgeist Framework Team is requested to review the proposed merge of 
lp:~zeitgeist/zeitgeist/querybystorage into lp:zeitgeist.
=== modified file '_zeitgeist/engine/main.py'
--- _zeitgeist/engine/main.py	2011-04-07 08:29:36 +0000
+++ _zeitgeist/engine/main.py	2011-04-15 17:16:28 +0000
@@ -387,22 +387,25 @@
 	
 	def _build_sql_event_filter(self, time_range, templates, storage_state):
 		
-		# FIXME: We need to take storage_state into account
-		if storage_state != StorageState.Any:
-			raise NotImplementedError
+		where = WhereClause(WhereClause.AND)
 		
 		# thekorn: we are using the unary operator here to tell sql to not use
 		# the index on the timestamp column at the first place. This `fix` for
 		# (LP: #672965) is based on some benchmarks, which suggest a performance
 		# win, but we might not oversee all implications.
 		# (see http://www.sqlite.org/optoverview.html section 6.0)
-		where = WhereClause(WhereClause.AND)
 		min_time, max_time = time_range
 		if min_time != 0:
 			where.add("+timestamp >= ?", min_time)
 		if max_time != sys.maxint:
 			where.add("+timestamp <= ?", max_time)
 		
+		if storage_state in (StorageState.Available, StorageState.NotAvailable):
+			where.add("(subj_storage_state = ? OR subj_storage_state IS NULL)",
+				storage_state)
+		elif storage_state != StorageState.Any:
+			raise ValueError, "Unknown storage state '%d'" % storage_state
+		
 		where.extend(self._build_sql_from_event_templates(templates))
 		
 		return where

=== modified file 'test/engine-test.py'
--- test/engine-test.py	2011-04-07 06:56:54 +0000
+++ test/engine-test.py	2011-04-15 17:16:28 +0000
@@ -280,10 +280,20 @@
 			(1, 10000000),
 			[],
 			StorageState.Any,
-			5,
-			0,)
-		self.assertEquals(5, len(result))
-	
+			0,
+			0)
+		self.assertEquals(5, len(result))
+
+	def testFindFiveWithStorageState(self):
+		import_events("test/data/five_events.js", self.engine)
+		# The event's storage is unknown, so we get them back always.
+		result = self.engine.find_eventids(TimeRange.always(), [],
+			StorageState.Available, 0, 0)
+		self.assertEquals(5, len(result))
+		result = self.engine.find_eventids(TimeRange.always(), [],
+			StorageState.NotAvailable, 0, 0)
+		self.assertEquals(5, len(result))
+
 	def testFindWithNonExistantActor(self):
 		# Bug 496109: filtering by timerange and a non-existing actor gave an
 		# incorrect result.
@@ -417,18 +427,7 @@
 		orig_ids = self.engine.insert_events([event])
 		result_ids = self.engine.find_eventids(TimeRange.always(), [Event()], StorageState.Any, 0, 1)
 		self.assertEquals(orig_ids, result_ids)
-	
-	def testDontFindState(self):
-		# searchin by storage state is currently not implemented
-		# checking for the error
-		import_events("test/data/twenty_events.js", self.engine)
-		self.assertRaises(NotImplementedError, self.engine.find_eventids,
-			(1, 10000000),
-			[],
-			StorageState.Available,
-			1,
-			0,)
-			
+
 	def testFindEventsEventTemplate(self):
 		import_events("test/data/five_events.js", self.engine)
 		subj = Subject.new_for_values(interpretation="stfu:Bee")

_______________________________________________
Mailing list: https://launchpad.net/~zeitgeist
Post to     : zeitgeist@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zeitgeist
More help   : https://help.launchpad.net/ListHelp

Reply via email to