X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=scripts%2Fstatev_sql.py;h=b8b2bab52ace9fcf559ffb470671cfd60f863617;hb=41fac672b8f412b67e502dff0f9b03af6ceaef73;hp=04fc256e7359de8733d1012647b88d24d7f4fe4e;hpb=00eaff418ed10a4ed133c02e5cdabcc3e9ac32b4;p=libfirm diff --git a/scripts/statev_sql.py b/scripts/statev_sql.py index 04fc256e7..b8b2bab52 100755 --- a/scripts/statev_sql.py +++ b/scripts/statev_sql.py @@ -21,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 @@ -71,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: @@ -120,14 +122,22 @@ 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 = ['?'] @@ -137,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): @@ -160,11 +186,13 @@ class Conv: self.valid_keys = set() - for line in self.input(): + 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