mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
sqlparse-0.1.19 is the last version of sqlparse that supports Python 2.6. Testing: - Ran all end-to-end tests Change-Id: Ide51ef3ac52d25a96b0fa832e29b6535197d23cb Reviewed-on: http://gerrit.cloudera.org:8080/10354 Reviewed-by: David Knupp <dknupp@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
110 lines
3.8 KiB
Python
Executable File
110 lines
3.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Copyright (C) 2008 Andi Albrecht, albrecht.andi@gmail.com
|
|
#
|
|
# This module is part of python-sqlparse and is released under
|
|
# the BSD License: http://www.opensource.org/licenses/bsd-license.php.
|
|
|
|
import optparse
|
|
import os
|
|
import sys
|
|
|
|
import sqlparse
|
|
from sqlparse.exceptions import SQLParseError
|
|
|
|
|
|
_CASE_CHOICES = ['upper', 'lower', 'capitalize']
|
|
|
|
|
|
parser = optparse.OptionParser(usage='%prog [OPTIONS] FILE, ...',
|
|
version='%%prog %s' % sqlparse.__version__)
|
|
parser.set_description(('Format FILE according to OPTIONS. Use "-" as FILE '
|
|
'to read from stdin.'))
|
|
parser.add_option('-v', '--verbose', dest='verbose', action='store_true')
|
|
parser.add_option('-o', '--outfile', dest='outfile', metavar='FILE',
|
|
help='write output to FILE (defaults to stdout)')
|
|
group = parser.add_option_group('Formatting Options')
|
|
group.add_option('-k', '--keywords', metavar='CHOICE',
|
|
dest='keyword_case', choices=_CASE_CHOICES,
|
|
help=('change case of keywords, CHOICE is one of %s'
|
|
% ', '.join('"%s"' % x for x in _CASE_CHOICES)))
|
|
group.add_option('-i', '--identifiers', metavar='CHOICE',
|
|
dest='identifier_case', choices=_CASE_CHOICES,
|
|
help=('change case of identifiers, CHOICE is one of %s'
|
|
% ', '.join('"%s"' % x for x in _CASE_CHOICES)))
|
|
group.add_option('-l', '--language', metavar='LANG',
|
|
dest='output_format', choices=['python', 'php'],
|
|
help=('output a snippet in programming language LANG, '
|
|
'choices are "python", "php"'))
|
|
group.add_option('--strip-comments', dest='strip_comments',
|
|
action='store_true', default=False,
|
|
help='remove comments')
|
|
group.add_option('-r', '--reindent', dest='reindent',
|
|
action='store_true', default=False,
|
|
help='reindent statements')
|
|
group.add_option('--indent_width', dest='indent_width', default=2,
|
|
help='indentation width (defaults to 2 spaces)')
|
|
|
|
_FORMATTING_GROUP = group
|
|
|
|
|
|
def _error(msg, exit_=None):
|
|
"""Print msg and optionally exit with return code exit_."""
|
|
sys.stderr.write('[ERROR] %s\n' % msg)
|
|
if exit_ is not None:
|
|
sys.exit(exit_)
|
|
|
|
|
|
def _build_formatter_opts(options):
|
|
"""Convert command line options to dictionary."""
|
|
d = {}
|
|
for option in _FORMATTING_GROUP.option_list:
|
|
d[option.dest] = getattr(options, option.dest)
|
|
return d
|
|
|
|
|
|
def main():
|
|
options, args = parser.parse_args()
|
|
if options.verbose:
|
|
sys.stderr.write('Verbose mode\n')
|
|
|
|
if len(args) != 1:
|
|
_error('No input data.')
|
|
parser.print_usage()
|
|
sys.exit(1)
|
|
|
|
if '-' in args: # read from stdin
|
|
data = sys.stdin.read()
|
|
else:
|
|
try:
|
|
data = ''.join(open(args[0]).readlines())
|
|
except OSError:
|
|
err = sys.exc_info()[1] # Python 2.5 compatibility
|
|
_error('Failed to read %s: %s' % (args[0], err), exit_=1)
|
|
|
|
if options.outfile:
|
|
try:
|
|
stream = open(options.outfile, 'w')
|
|
except OSError:
|
|
err = sys.exc_info()[1] # Python 2.5 compatibility
|
|
_error('Failed to open %s: %s' % (options.outfile, err), exit_=1)
|
|
else:
|
|
stream = sys.stdout
|
|
|
|
formatter_opts = _build_formatter_opts(options)
|
|
try:
|
|
formatter_opts = sqlparse.formatter.validate_options(formatter_opts)
|
|
except SQLParseError:
|
|
err = sys.exc_info()[1] # Python 2.5 compatibility
|
|
_error('Invalid options: %s' % err, exit_=1)
|
|
|
|
s = sqlparse.format(data, **formatter_opts)
|
|
if sys.version_info < (3,):
|
|
s = s.encode('utf-8', 'replace')
|
|
stream.write(s)
|
|
stream.flush()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|