| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #
- # Copyright (C) 2009-2020 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 collections.abc import Generator
- from typing import IO, Any
- from sqlparse import cli, engine, filters, formatter, sql, tokens
- __version__ = "0.6.0"
- __all__ = ["cli", "engine", "filters", "formatter", "sql", "tokens"]
- def parse(
- sql: str, encoding: str | None = None
- ) -> tuple[sql.Statement, ...]:
- """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: str | IO[str], encoding: str | None = None
- ) -> Generator[sql.Statement, None, 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: str, encoding: str | None = None, **options: Any) -> str:
- """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 "".join(stack.run(sql, encoding))
- def split(
- sql: str, encoding: str | None = None, strip_semicolon: bool = False
- ) -> list[str]:
- """Split *sql* into single statements.
- :param sql: A string containing one or more SQL statements.
- :param encoding: The encoding of the statement (optional).
- :param strip_semicolon: If True, remove trailing semicolons
- (default: False).
- :returns: A list of strings.
- """
- stack = engine.FilterStack(strip_semicolon=strip_semicolon)
- return [str(stmt).strip() for stmt in stack.run(sql, encoding)]
|