2 from __future__ import print_function
9 from sqlparse.compat import text_type
10 from mysql2sql.print_tokens import print_tokens
11 from mysql2sql.process_tokens import requote_names, StatementGrouper
13 from m_lib.defenc import default_encoding
14 from m_lib.pbar.tty_pbar import ttyProgressBar
19 fp.seek(0, os.SEEK_END)
21 return None # File size is unknown
23 fp.seek(0, os.SEEK_SET)
27 def main(infile, encoding, outfile, output_encoding, use_pbar):
29 size = get_fsize(infile)
33 print("Converting: ", end='', file=sys.stderr)
37 pbar = ttyProgressBar(0, size-1)
40 grouper = StatementGrouper(encoding=encoding)
43 if isinstance(line, text_type):
44 cur_pos += len(line.encode(encoding))
48 grouper.process_line(line)
49 if grouper.statements:
50 for statement in grouper.get_statements():
51 requote_names(statement)
52 print_tokens(statement, outfile=outfile,
53 encoding=output_encoding)
54 tokens = grouper.close()
57 print_tokens(token, outfile=outfile, encoding=output_encoding)
63 if __name__ == '__main__':
64 parser = argparse.ArgumentParser(description='Convert MySQL to SQL')
65 parser.add_argument('-e', '--encoding', default='utf-8',
66 help='input/output encoding, default is utf-8')
67 parser.add_argument('-E', '--output-encoding',
68 help='separate output encoding, default is the same '
69 'as -e except for console; for console output '
70 'charset from the current locale is used')
71 parser.add_argument('-o', '--outfile', help='output file name')
72 parser.add_argument('-P', '--no-pbar', action='store_true',
73 help='inhibit progress bar')
74 parser.add_argument('infile', help='input file name')
75 parser.add_argument('output_file', nargs='?', help='output file name')
76 args = parser.parse_args()
79 if args.infile == '-':
82 infile = open(args.infile, 'rt', encoding=args.encoding)
87 print("Error: cannot read from console", file=sys.stderr)
93 print("Error: too many output files", file=sys.stderr)
97 outfile = args.outfile
99 elif args.output_file:
100 outfile = args.output_file
105 if args.output_encoding:
106 output_encoding = args.output_encoding
108 output_encoding = default_encoding
110 output_encoding = args.encoding
116 outfile = open(outfile, 'wt', encoding=output_encoding)
118 if infile is not sys.stdin:
122 main(infile, args.encoding, outfile, output_encoding, not args.no_pbar)