2c9615338fe3f7c620421e2a265a63cf30cf98f1 braney Sat Mar 5 17:33:06 2022 -0800 move sqlToAs out of oneShot an into utils diff --git src/utils/sqlToAs/sqlToAs src/utils/sqlToAs/sqlToAs new file mode 100755 index 0000000..0f4e550 --- /dev/null +++ src/utils/sqlToAs/sqlToAs @@ -0,0 +1,98 @@ +#!/usr/bin/env python +import logging, optparse, sys + +# === COMMAND LINE INTERFACE, OPTIONS AND HELP === +parser = optparse.OptionParser("usage: %prog [options] <filename> - convert mysql .sql CREATE TABLE file to autoSql format") +parser.add_option("-d", "--debug", dest="debug", action="store_true", help="show debug messages") +(options, args) = parser.parse_args() + +if options.debug: + logging.basicConfig(level=logging.DEBUG) +else: + logging.basicConfig(level=logging.INFO) + +# ----------- MAIN -------------- +if args==[]: + parser.print_help() + sys.exit(1) + +filename = args[0] + +# sql type -> autoSql type +# from src/lib/asParse.c +sqlToAs = \ +{ +"double": "double", +"float": "float", +"char": "char", +"int": "int", +"int unsigned": "int", +"smallint": "short", +"smallint unsigned": "ushort", +"tinyint": "byte", +"tinyint unsigned": "ubyte", +"bigint": "bigint", +"varchar": "string", +"longblob":"lstring", +"blob" : "lstring", +"enum": "enum", +"set": "set" +} + +fieldLines = [] + +tableCommentDone = False +tableComment = "" + +for line in open(filename).read().splitlines(): + line = line.strip() + lowLine = line.lower() + logging.debug(line) + if len(line)<=3: + continue + if line.startswith("#"): + if tableCommentDone: + continue + tableComment = '"%s"' % line.strip().strip("#") + tableCommentDone = True + elif line.startswith("CREATE TABLE"): + name = line.split()[2].strip("`") + tableLine = "table %s" % name + continue + elif lowLine.startswith("key") or lowLine.startswith("primary") or lowLine.startswith("fulltext") \ + or "character set" in lowLine: + continue + + # `chrom` varchar(255) NOT NULL, # chromosome + # `start` int unsigned NOT NULL, # start + else: + parts = line.split() + fieldName, sqlType = parts[:2] + # special case for integers + if len(parts)>2 and "signed" in parts[2]: + sqlType=sqlType+" "+parts[2] + + fieldName = fieldName.strip("`").strip(",") + sqlType = sqlType.strip(",") + + if sqlType.startswith("char"): + asType = sqlType.replace("(","[").replace(")","]") + else: + sqlType = sqlType.split("(")[0] + asType = sqlToAs[sqlType] + + if "#" in line: + comment = line.split("#")[1].strip() + else: + comment = "" + + spaces = "".join((20-len(fieldName)-len(asType))*[" "]) + asLine = '%s %s;%s"%s"' % (asType, fieldName, spaces, comment) + fieldLines.append(asLine) + +print tableLine +print tableComment +print " (" +for asLine in fieldLines: + print " "+asLine +print " )"