mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
Upgrades the impala-shell's bundled version of sqlparse to 0.3.1. There were some API changes in 0.2.0+ that required a re-write of the StripLeadingCommentFilter in impala_shell.py. A slight perf optimization was also added to avoid using the filter altogether if no leading comment is readily discernible. As 0.1.19 was the last version of sqlparse to support python 2.6, this patch also breaks Impala's compatibility with python 2.6. No new tests were added, but all existing tests passed without modification. Change-Id: I77a1fd5ae311634a18ee04b8c389d8a3f3a6e001 Reviewed-on: http://gerrit.cloudera.org:8080/15642 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2009-2018 the sqlparse authors and contributors
|
|
# <see AUTHORS file>
|
|
#
|
|
# This module is part of python-sqlparse and is released under
|
|
# the BSD License: https://opensource.org/licenses/BSD-3-Clause
|
|
|
|
"""Parse SQL statements."""
|
|
|
|
# Setup namespace
|
|
from sqlparse import sql
|
|
from sqlparse import cli
|
|
from sqlparse import engine
|
|
from sqlparse import tokens
|
|
from sqlparse import filters
|
|
from sqlparse import formatter
|
|
|
|
from sqlparse.compat import text_type
|
|
|
|
__version__ = '0.3.1'
|
|
__all__ = ['engine', 'filters', 'formatter', 'sql', 'tokens', 'cli']
|
|
|
|
|
|
def parse(sql, encoding=None):
|
|
"""Parse sql and return a list of statements.
|
|
|
|
:param sql: A string containing one or more SQL statements.
|
|
:param encoding: The encoding of the statement (optional).
|
|
:returns: A tuple of :class:`~sqlparse.sql.Statement` instances.
|
|
"""
|
|
return tuple(parsestream(sql, encoding))
|
|
|
|
|
|
def parsestream(stream, encoding=None):
|
|
"""Parses sql statements from file-like object.
|
|
|
|
:param stream: A file-like object.
|
|
:param encoding: The encoding of the stream contents (optional).
|
|
:returns: A generator of :class:`~sqlparse.sql.Statement` instances.
|
|
"""
|
|
stack = engine.FilterStack()
|
|
stack.enable_grouping()
|
|
return stack.run(stream, encoding)
|
|
|
|
|
|
def format(sql, encoding=None, **options):
|
|
"""Format *sql* according to *options*.
|
|
|
|
Available options are documented in :ref:`formatting`.
|
|
|
|
In addition to the formatting options this function accepts the
|
|
keyword "encoding" which determines the encoding of the statement.
|
|
|
|
:returns: The formatted SQL statement as string.
|
|
"""
|
|
stack = engine.FilterStack()
|
|
options = formatter.validate_options(options)
|
|
stack = formatter.build_filter_stack(stack, options)
|
|
stack.postprocess.append(filters.SerializerUnicode())
|
|
return u''.join(stack.run(sql, encoding))
|
|
|
|
|
|
def split(sql, encoding=None):
|
|
"""Split *sql* into single statements.
|
|
|
|
:param sql: A string containing one or more SQL statements.
|
|
:param encoding: The encoding of the statement (optional).
|
|
:returns: A list of strings.
|
|
"""
|
|
stack = engine.FilterStack()
|
|
return [text_type(stmt).strip() for stmt in stack.run(sql, encoding)]
|