Added statev to sql transform script
authorSebastian Hack <hack@ipd.info.uni-karlsruhe.de>
Wed, 15 Aug 2007 16:47:40 +0000 (16:47 +0000)
committerSebastian Hack <hack@ipd.info.uni-karlsruhe.de>
Wed, 15 Aug 2007 16:47:40 +0000 (16:47 +0000)
[r15547]

ir/be/test/statev_sql.py [new file with mode: 0755]

diff --git a/ir/be/test/statev_sql.py b/ir/be/test/statev_sql.py
new file mode 100755 (executable)
index 0000000..2c546ee
--- /dev/null
@@ -0,0 +1,98 @@
+#! /usr/bin/env python
+
+import sys
+import fileinput
+import os
+import re
+
+from optparse import OptionParser
+
+def ev_create_stmt(heads):
+       create = 'create table if not exists ev (id int, time int, timeev int'
+       for x in heads:
+               create += (', %s real' % (x,))
+       create += ');'
+       return create
+
+def ctx_create_stmt(heads):
+       create = 'create table if not exists ctx (id int unique on conflict ignore'
+       for x in heads:
+               create += (', %s text' % (x,))
+       create += ');'
+       return create
+
+def find_heads(file):
+       ctx_heads = set()
+       ev_heads = set()
+       for line in fileinput.input(file):
+               items = re.split('\s+', line)
+               if items[0] == 'E':
+                       ev_heads.add(items[2])
+               elif items[0] == 'P':
+                       ctx_heads.add(items[2])
+       return (ev_heads, ctx_heads)
+
+def fill_tables(file):
+       keystack = []
+       valstack = []
+       for line in fileinput.input(file):
+               items = re.split('\s+', line)
+               op    = items[0]
+               id    = items[1]
+               if op == 'P':
+                       key   = items[2]
+                       val   = items[3]
+                       keystack.append(key)
+                       valstack.append(val)
+                       stmt = 'insert into ctx (id'
+                       for x in keystack:
+                               stmt += ', ' + x
+                       stmt += ') values (' + str(int(id, 16))
+                       for x in valstack:
+                               stmt += ', \'' + x + '\''
+                       stmt += ');'
+               elif op == 'O':
+                       keystack.pop()
+                       valstack.pop()
+                       stmt = ''
+               elif op == 'E':
+                       key   = items[2]
+                       val   = items[3]
+                       time   = items[4]
+                       timeev = items[5]
+                       t      = (id, val, time, timeev)
+                       stmt   = 'insert into ev (id, %s, time, timeev) values (%d, %s, %s, %s);' % (key, int(id, 16), val, time, timeev)
+
+               if stmt:
+                       print stmt
+
+
+def main():
+       parser = OptionParser('usage: %prog [options] input')
+       parser.add_option("-c", "--create", action="store_true")
+       (options, args) = parser.parse_args()
+
+       if len(args) < 1:
+               parser.print_help()
+               sys.exit(1)
+
+       file = args[0]
+
+       if not os.path.isfile(file):
+               print "cannot find input file %s" % (file, )
+               sys.exit(2)
+
+       (ev_heads, ctx_heads) = find_heads(file)
+
+       if options.create:
+               print ev_create_stmt(ev_heads)
+               print ctx_create_stmt(ctx_heads)
+
+       else:
+               print 'begin transaction;'
+               fill_tables(file)
+               print 'commit;'
+
+
+if __name__ == "__main__":
+       main()