X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=scripts%2Fstatev_sql.py;h=b8b2bab52ace9fcf559ffb470671cfd60f863617;hb=41fac672b8f412b67e502dff0f9b03af6ceaef73;hp=8b8db52df093969f1fa62d801583864b3e452f87;hpb=06430e7ba8fa72b1d9abd19fe63f09ca16f84da8;p=libfirm diff --git a/scripts/statev_sql.py b/scripts/statev_sql.py index 8b8db52df..b8b2bab52 100755 --- a/scripts/statev_sql.py +++ b/scripts/statev_sql.py @@ -5,9 +5,6 @@ import os import re import time import stat -import profile -import sqlite3 -import MySQLdb import fileinput import tempfile import optparse @@ -24,7 +21,7 @@ class EmitBase: for x in cols.iterkeys(): sorted[cols[x]] = x for x in sorted: - create += (', %s %s' % (x, type)) + create += (", '%s' %s" % (x, type)) create += ');' return create @@ -43,6 +40,8 @@ class EmitMysqlInfile(EmitBase): return res def __init__(self, options, tables, ctxcols, evcols): + import MySQLdb + args = dict() if options.password: args['passwd'] = options.password @@ -72,8 +71,10 @@ class EmitMysqlInfile(EmitBase): c = self.conn.cursor() c.execute('drop table if exists ' + self.evtab) c.execute('drop table if exists ' + self.ctxtab) - c.execute(self.create_table(self.ctxcols, self.ctxtab, 'char(80)', 'unique')) - c.execute(self.create_table(self.evcols, self.evtab, 'double default null', '')) + table_ctx = self.create_table(self.ctxcols, self.ctxtab, 'char(80)', 'unique') + c.execute(table_ctx) + table_ev = self.create_table(self.evcols, self.evtab, 'double default null', '') + c.execute(table_ev) self.conn.commit() if options.verbose: @@ -119,14 +120,24 @@ class EmitMysqlInfile(EmitBase): class EmitSqlite3(EmitBase): def __init__(self, options, tables, ctxcols, evcols): + import sqlite3 + + if options.database == None: + print "Have to specify database (file-)name for sqlite" + sys.exit(1) + if os.path.isfile(options.database): os.unlink(options.database) self.ctxtab = tables['ctx'] self.evtab = tables['ev'] self.conn = sqlite3.connect(options.database) - self.conn.execute(self.create_table(ctxcols, self.ctxtab, 'text', 'unique')) - self.conn.execute(self.create_table(evcols, self.evtab, 'double', '')) + table_ctx = self.create_table(ctxcols, self.ctxtab, 'text', 'unique') + self.conn.execute(table_ctx) + self.conn.execute("CREATE INDEX IF NOT EXISTS ctxindex ON ctx(id)") + table_ev = self.create_table(evcols, self.evtab, 'double', '') + self.conn.execute(table_ev) + self.conn.execute("CREATE INDEX IF NOT EXISTS evindex ON ev(id)") n = max(len(ctxcols), len(evcols)) + 1 q = ['?'] @@ -136,13 +147,29 @@ class EmitSqlite3(EmitBase): q.append('?') def ev(self, curr_id, evitems): - keys = ','.join(evitems.keys()) - stmt = 'insert into %s (id, %s) values (%s)' % (self.evtab, keys, self.quests[len(evitems)]) + keys = "" + first = True + for key in evitems.keys(): + if first: + first = False + else: + keys += ", " + keys += "'%s'" % (key) + + stmt = "insert into '%s' (id, %s) values (%s)" % (self.evtab, keys, self.quests[len(evitems)]) self.conn.execute(stmt, (curr_id,) + tuple(evitems.values())) def ctx(self, curr_id, ctxitems): - keys = ','.join(ctxitems.keys()) - stmt = 'insert into %s (id, %s) values (%s)' % (self.ctxtab, keys, self.quests[len(ctxitems)]) + keys = "" + first = True + for key in ctxitems.keys(): + if first: + first = False + else: + keys += ", " + keys += "'%s'" % (key) + + stmt = "insert into '%s' (id, %s) values (%s)" % (self.ctxtab, keys, self.quests[len(ctxitems)]) self.conn.execute(stmt, (curr_id,) + tuple(ctxitems.values())) def commit(self): @@ -152,19 +179,20 @@ class Conv: engines = { 'sqlite3': EmitSqlite3, 'mysql': EmitMysqlInfile } def find_heads(self): n_ev = 0 - ctxind = 0 - evind = 0 - ctxcols = dict() - evcols = dict() + ctxind = 0 + evind = 0 + ctxcols = dict() + evcols = dict() self.valid_keys = set() - for line in self.input(): - heads = None + inp = self.input() + + for line in inp: if line[0] == 'P': ind = line.index(';', 2) key = line[2:ind] - if not key in ctxcols: + if not ctxcols.has_key(key): ctxcols[key] = ctxind ctxind += 1 @@ -173,7 +201,7 @@ class Conv: key = line[2:ind] if self.filter.match(key): self.n_events += 1 - if not key in evcols: + if not evcols.has_key(key): self.valid_keys.add(key) evcols[key] = evind evind += 1 @@ -187,6 +215,7 @@ class Conv: lineno = 0 ids = 0 curr_id = 0 + last_push_curr_id = 0 keystack = [] idstack = [] curr_event = 0 @@ -202,7 +231,7 @@ class Conv: if op == 'P': # flush the current events if len(evcols): - self.emit.ev(curr_id, evcols) + self.emit.ev(last_push_curr_id, evcols) evcols.clear() # push the key @@ -210,6 +239,7 @@ class Conv: val = items[2] keystack.append(key) curr_id = ids + last_push_curr_id = curr_id ids += 1 idstack.append(curr_id) ctxcols[key] = val