Add a way to delete an individual set of job results.

People have been asking for a way to delete bad jobs.

Signed-off-by: Martin Bligh <mbligh@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@968 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/tko/db.py b/tko/db.py
index 7b1f265..d76312e 100644
--- a/tko/db.py
+++ b/tko/db.py
@@ -114,6 +114,20 @@
 			self.con.commit()
 
 
+	def delete(self, table, where, commit = None):
+		cmd = ['delete from', table]
+		if commit == None:
+			commit = self.autocommit
+		if where and isinstance(where, types.DictionaryType):
+			keys = [field + '=%s' for field in where.keys()]
+			values = [where[field] for field in where.keys()]
+			cmd += ['where', ' and '.join(keys)]
+		self.dprint('%s %s' % (' '.join(cmd),values))
+		self.cur.execute(' '.join(cmd), values)
+		if commit:
+			self.con.commit()
+		
+
 	def update(self, table, data, where, commit = None):
 		"""\
 			'update table set data values (%s ... %s) where ...'
@@ -139,6 +153,17 @@
 			self.con.commit()
 
 
+	def delete_job(self, tag, commit = None):
+		job_idx = self.find_job(tag)
+		for test_idx in self.find_tests(job_idx):
+			where = {'test_idx' : test_idx}
+			self.delete('iteration_result', where)
+			self.delete('test_attributes', where)
+		where = {'job_idx' : job_idx}
+		self.delete('tests', where)
+		self.delete('jobs', where)
+
+
 	def insert_job(self, tag, job, commit = None):
 		job.machine_idx = self.lookup_machine(job.machine)
 		if not job.machine_idx:
@@ -153,6 +178,7 @@
 		for test in job.tests:
 			self.insert_test(job, test, commit=commit)
 
+
 	def insert_test(self, job, test, commit = None):
 		kver = self.insert_kernel(test.kernel, commit=commit)
 		data = {'job_idx':job.index, 'test':test.testname,
@@ -250,6 +276,15 @@
 			return None
 
 
+	def find_tests(self, job_idx):
+		where = { 'job_idx':job_idx }
+		rows = self.select('test_idx', 'tests', where)
+		if rows:
+			return [row[0] for row in rows]
+		else:
+			return None
+
+
 	def find_job(self, tag):
 		rows = self.select('job_idx', 'jobs', {'tag': tag})
 		if rows: