blob: b6686cc201bf73e4abc8ad4d827f84cccc7622da [file] [log] [blame]
mbligh237bed32007-09-05 13:05:57 +00001import sqlite, re, os
mblighd5c33db2006-10-08 21:34:16 +00002
3class db:
4 def __init__(self):
mbligh9bb92fe2007-09-12 15:54:23 +00005 if not os.path.exists('tko_db'):
6 os.system('sqlite tko_db < create_db')
mblighd5c33db2006-10-08 21:34:16 +00007 self.con = sqlite.connect('tko_db')
8 self.cur = self.con.cursor()
9
10
mbligh608c3252007-08-31 13:53:00 +000011 def select(self, fields, table, where_dict):
12 """\
13 select fields from table where {dictionary}
14 """
15 keys = [field + '=%s' for field in where_dict.keys()]
16 values = [where_dict[field] for field in where_dict.keys()]
17
18 where = 'and'.join(keys)
19 cmd = 'select %s from %s where %s' % (fields, table, where)
20 print cmd
21 print values
22 self.cur.execute(cmd, values)
mblighd5c33db2006-10-08 21:34:16 +000023 return self.cur.fetchall()
24
mbligh056d0d32006-10-08 22:31:10 +000025
mbligh608c3252007-08-31 13:53:00 +000026 def insert(self, table, data):
27 """\
28 'insert into table (keys) values (%s ... %s)', values
29
30 data:
31 dictionary of fields and data
32 """
33 fields = data.keys()
34 refs = ['%s' for field in fields]
35 values = [data[field] for field in fields]
36 cmd = 'insert into %s (%s) values (%s)' % \
37 (table, ','.join(fields), ','.join(refs))
38 print cmd
39 print values
40 self.cur.execute(cmd, values)
41 self.con.commit()
42
43
mbligh056d0d32006-10-08 22:31:10 +000044 def insert_job(self, tag, job):
mbligh608c3252007-08-31 13:53:00 +000045 self.insert('jobs', {'tag':tag, 'machine':'UNKNOWN'})
46 job.index = self.find_job(tag)
47 for test in job.tests:
48 self.insert_test(job, test)
49
mbligh237bed32007-09-05 13:05:57 +000050
mbligh608c3252007-08-31 13:53:00 +000051 def insert_test(self, job, test):
mbligh237bed32007-09-05 13:05:57 +000052 kver = self.insert_kernel_version(test.kernel)
mbligh608c3252007-08-31 13:53:00 +000053 data = {'job_idx':job.index, 'test':test.testname,
54 'subdir':test.dir,
55 'status':test.status, 'reason':test.reason}
56 self.insert('tests', data)
mblighe9cf9d42007-08-31 08:56:00 +000057
58
mbligh9bb92fe2007-09-12 15:54:23 +000059 def lookup_kernel(self, kernel):
60 rows = self.select('kernel_idx', 'kernels',
61 {'kernel_hash':kernel.kernel_hash})
mbligh237bed32007-09-05 13:05:57 +000062 if rows:
63 return rows[0][0]
64 else:
65 return None
mblighe9cf9d42007-08-31 08:56:00 +000066
67
mbligh237bed32007-09-05 13:05:57 +000068 def insert_kernel_version(self, kernel):
mbligh9bb92fe2007-09-12 15:54:23 +000069 kver = self.lookup_kernel(kernel)
mbligh237bed32007-09-05 13:05:57 +000070 if kver:
71 return kver
mbligh9bb92fe2007-09-12 15:54:23 +000072 self.insert('kernels', {'base':kernel.base,
73 'kernel_hash':kernel.kernel_hash,
74 'printable':kernel.base})
75 # WARNING - incorrectly shoving base into printable here.
76 kver = self.lookup_kernel(kernel)
mbligh237bed32007-09-05 13:05:57 +000077 for patch in kernel.patches:
78 self.insert_patch(kver, patch)
79 return kver
80
81
82 def insert_patch(self, kver, patch):
83 print patch.reference
84 name = os.path.basename(patch.reference)[:80]
mbligh9bb92fe2007-09-12 15:54:23 +000085 self.insert('patches', {'kernel_idx': kver,
mbligh237bed32007-09-05 13:05:57 +000086 'name':name,
87 'url':patch.reference,
88 'hash':patch.hash})
mbligh056d0d32006-10-08 22:31:10 +000089
90
91 def find_job(self, tag):
mbligh608c3252007-08-31 13:53:00 +000092 rows = self.select('job_idx', 'jobs', {'tag': tag})
93 if rows:
94 return rows[0][0]
95 else:
96 return None