.. -- coding: utf-8 --
.. :Project: pglast — PostgreSQL Languages AST
.. :Created: mer 02 ago 2017 14:49:24 CEST
.. :Author: Lele Gaifax lele@metapensiero.it
.. :License: GNU General Public License version 3 or later
.. :Copyright: © 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Lele Gaifax
..
========
pglast
PostgreSQL Languages AST and statements prettifier
:Author: Lele Gaifax
:Contact: lele@metapensiero.it
:License: GNU General Public License version 3 or later
__
:Status: |build| |doc| |codecov|
:Version: 7
__
__ https://www.gnu.org/licenses/gpl.html
__ https://pglast.readthedocs.io/en/v7/development.html#history
.. |build| image:: https://github.com/lelit/pglast/actions/workflows/ci.yml/badge.svg?branch=v7
:target: https://github.com/lelit/pglast/actions/workflows/ci.yml
:alt: Build status
.. |doc| image:: https://readthedocs.org/projects/pglast/badge/?version=v7
:target: https://readthedocs.org/projects/pglast/builds/
:alt: Documentation status
.. |codecov| image:: https://codecov.io/gh/lelit/pglast/branch/v3/graph/badge.svg?token=A90D8tWnft
:target: https://codecov.io/gh/lelit/pglast
:alt: Test coverage status
This is a Python 3 module that exposes the parse tree of a PostgreSQL__ statement (extracted
by the almost standard PG parser repackaged as a standalone static library by libpg_query
__)
as set of interconnected nodes, usually called an abstract syntax tree.
__ https://www.postgresql.org/
__ https://github.com/pganalyze/libpg_query
See a more detailed introduction
__ in the documentation_.
__ https://pglast.readthedocs.io/en/v7/introduction.html
Installation
As usual, the easiest way is with pip::
$ pip install pglast
Alternatively you can clone the repository::
$ git clone https://github.com/lelit/pglast.git --recursive
and install from there::
$ pip install ./pglast
Development
There is a set of makefiles implementing the most common operations, a make help
will
show a brief table of contents. A comprehensive test suite, based on pytest__, covers__ nearly
99% of the source lines.
__ https://docs.pytest.org/en/latest/
__ https://codecov.io/gh/lelit/pglast/branch/v7/
Documentation
Latest documentation is hosted by Read the Docs
__ at https://pglast.readthedocs.io/en/v7
__ https://readthedocs.org/
.. -- coding: utf-8 --
.. _changes:
Changes
Version 7
#########
7.1 (2024-11-26)
- Merge with `Version 6`_
7.0 (2024-11-13)
7.0.dev1 (2024-11-01)
- Upgrade libpg_query to `17-6.0.0`__
__ https://github.com/pganalyze/libpg_query/releases/tag/17-6.0.0
7.0.dev0 (2024-10-31)
**Breaking changes**
Version 6
#########
6.11 (2024-11-26)
- Remove spurious trailing space in the ``ConstrTypePrinter.CONSTR_IDENTITY`` and the
``Constraint`` printers (issue `#165`__)
__ https://github.com/lelit/pglast/issues/165
6.10 (2024-11-01)
6.9 (2024-10-31)
- Fix regression introduced by recent modification to the ``CommonTableExpr`` printer that
impacted on the ``RawStream`` renderer (issue `#163`__)
__ https://github.com/lelit/pglast/issues/163
- Expose the ``RawStream`` renderer in the CLI tool with a new ``--normalize`` option
6.8 (2024-10-29)
6.7 (2024-10-28)
- Generate wheels on PyPI using Python 3.13.0 final release, thanks to cibuildwheel `2.21.3`__
__ https://cibuildwheel.pypa.io/en/stable/changelog/#v2213
- Improve ``CommonTableExpr`` printer, reducing horizontal space waste
6.6 (2024-09-30)
- Make recently introduced doctest related to issue #88 work on different Python versions
6.5 (2024-09-29)
- Fix glitch when using the ``--preserve-comments`` flag (issue `#159`__)
__ https://github.com/lelit/pglast/issues/159
- Finally add a note to ``parse_plpgsql()`` documentation mentioning how it differs from
``parse_sql()`` (issue `#88`__)
__ https://github.com/lelit/pglast/issues/88
6.4 (2024-09-28)
6.3 (2024-08-06)
- Fix ``SEQUENCE NAME`` in ``create_seq_stmt_def_elem`` (`PR #151`__), thanks to orages
__ https://github.com/lelit/pglast/pull/151
- Generate wheels on PyPI using Python 3.13.0rc1 release, thanks to cibuildwheel `2.20.0`__
__ https://cibuildwheel.pypa.io/en/stable/changelog/#v2200
- Use `Cython 3.0.11`__
__ https://github.com/cython/cython/blob/master/CHANGES.rst#3011-2024-08-05
6.2 (2024-02-01)
6.1 (2024-01-22)
- Inherit fix for issue `143`__ from `version 5`_
__ https://github.com/lelit/pglast/issues/143
6.0 (2024-01-22)
- Produce wheels for macOS arm64
6.0.dev2 (2024-01-21)
- Enable compilation on Windows and produce related 32bit and 64bit wheels (issue `#7`__)
__ https://github.com/lelit/pglast/issues/7
6.0.dev1 (2024-01-11)
6.0.dev0 (2023-12-29)
- No visible changes with respect to v5, apart from the support for new/revised syntaxes of
`PostgreSQL 16`__
__ https://www.postgresql.org/docs/16/release-16.html
- Do not build binary wheels for Python 3.8
- Skip compilation on Linux 32bit (see `this comment`__ for details)
__ https://github.com/pganalyze/libpg_query/pull/225#issuecomment-1864145089
~~~~~~~~~~~~~~~~~~~~
**Breaking changes**
~~~~~~~~~~~~~~~~~~~~
- Target PostgreSQL 16, thanks to libpg_query `16-5.0.0`__
__ https://github.com/pganalyze/libpg_query/releases/tag/16-5.0.0
Version 5
#########
5.9 (2024-01-22)
~~~~~~~~~~~~~~~~
- Fix issue `143`__, affecting ``AlterOwnerStmt`` and ``RenameStmt`` printers
__ https://github.com/lelit/pglast/issues/143
5.8 (2024-01-11)
~~~~~~~~~~~~~~~~
- Fix issue `#142`__, a glitch that affected 32-bit systems
__ https://github.com/lelit/pglast/issues/142
5.7 (2023-12-23)
~~~~~~~~~~~~~~~~
- Use `Cython 3.0.7`__
__ https://github.com/cython/cython/blob/master/CHANGES.rst#307-2023-12-19
- Update libpg_query to `15-4.2.4`__
__ https://github.com/pganalyze/libpg_query/releases/tag/15-4.2.4
5.6 (2023-12-07)
~~~~~~~~~~~~~~~~
- Fix issue `#138`__, a defect that hindered the creation of AST nodes that act as *markers*,
(currently ``A_Star`` and ``CheckPointStmt``), that do not carry any other information
__ https://github.com/lelit/pglast/issues/138
- Use `Cython 3.0.6`__
__ https://github.com/cython/cython/blob/master/CHANGES.rst#306-2023-11-26
- Handle the ``ENABLE TRIGGER ALL`` in ``AlterTableCmd``
- Fix issue `#136`__, a regression introduced by “Avoid overly abundancy of parentheses in
expressions”
__ https://github.com/lelit/pglast/issues/136
5.5 (2023-10-07)
~~~~~~~~~~~~~~~~
- Use `Cython 3.0.3`__
__ https://github.com/cython/cython/blob/master/CHANGES.rst#303-2023-10-05
- Produce wheels using final Python 3.12 release, thanks to ``cibuildwheel`` `2.16.2`__
__ https://cibuildwheel.readthedocs.io/en/stable/changelog/#v2162
5.4 (2023-08-24)
~~~~~~~~~~~~~~~~
- Improve documentation, adding ``parser.Displacements``, ``parser.scan`` and ``parser.split``
examples (`issue #128`__)
__ https://github.com/lelit/pglast/issues/128
- Fix issues `#129`__ and `#130`__ (merged from `version 4.4`__)
__ https://github.com/lelit/pglast/issues/129
__ https://github.com/lelit/pglast/issues/130
__ `4.4 (2023-08-24)`_
5.3 (2023-08-05)
~~~~~~~~~~~~~~~~
- Update libpg_query to `15-4.2.3`__
__ https://github.com/pganalyze/libpg_query/releases/tag/15-4.2.3
5.2 (2023-05-20)
~~~~~~~~~~~~~~~~
- Update libpg_query to `15-4.2.1`__
__ https://github.com/pganalyze/libpg_query/releases/tag/15-4.2.1
5.1 (2023-02-28)
~~~~~~~~~~~~~~~~
- Merge `version 4.2`__ changes
__ `4.2 (2023-02-27)`_
5.0 (2023-02-19)
~~~~~~~~~~~~~~~~
- No changes
5.0.dev1 (2023-02-11)
**Breaking changes**
5.0.dev0 (2022-12-19)
- No visible changes with respect to v4, apart from the support for new/revised syntaxes of
`PostgreSQL 15`__
__ https://www.postgresql.org/docs/15/release-15.html
~~~~~~~~~~~~~~~~~~~~
**Breaking changes**
~~~~~~~~~~~~~~~~~~~~
- Target PostgreSQL 15, thanks to libpg_query `15-4.0.0`__
__ https://github.com/pganalyze/libpg_query/releases/tag/15-4.0.0
Version 4
#########
4.5 (unreleased)
~~~~~~~~~~~~~~~~
- Use `Cython 3.0.2`__
__ https://github.com/cython/cython/blob/master/CHANGES.rst#302-2023-08-27
4.4 (2023-08-24)
~~~~~~~~~~~~~~~~
- Fix issues `#129`__ and `#130`__ (merged from `version 3.18`__)
__ https://github.com/lelit/pglast/issues/129
__ https://github.com/lelit/pglast/issues/130
__ `3.18 (2023-08-24)`_
4.3 (2023-04-27)
~~~~~~~~~~~~~~~~
- Fix `serialization issue`__ when column's ``DEFAULT`` value is an expression
__ https://github.com/pganalyze/libpg_query/issues/188
4.2 (2023-02-27)
~~~~~~~~~~~~~~~~
- Handle special syntax required by ``SET TIME ZONE INTERVAL '-08:00' hour to minute``
- Fix mistype mapping of raw C "long" and "double" attributes, that were decorated with the
wrong Python type
4.1 (2022-12-19)
~~~~~~~~~~~~~~~~
- Fix serialization glitches introduced by “Avoid overly abundancy of parentheses in
expressions” (to be precise, by this__ commit)
__ https://github.com/lelit/pglast/commit/6cfe75eea80f9c9bec4ba467e7ec1ec0796020de
4.0 (2022-12-12)
~~~~~~~~~~~~~~~~
- Update libpg_query to final `14-3.0.0`__
__ https://github.com/pganalyze/libpg_query/releases/tag/14-3.0.0
4.0.dev0 (2022-11-24)
**Breaking changes**
-
Target PostgreSQL 14
-
The wrapper classes used in previous versions, implemented in pglast.node
, are gone: now
everything works on top of the AST
classes (issue #80
__)
__ https://github.com/lelit/pglast/issues/80
-
The Ancestor
class is not iterable anymore: it was an internal implementation facility,
now moved to a _iter_members()
method
Version 3
#########
3.18 (2023-08-24)
- Fix ``BooleanTest`` printer, enclosing expression within parens in more cases (`issue
#129`__)
__ https://github.com/lelit/pglast/issues/129
- Fix ``Constraint`` printer, avoiding repetition of "DEFERRABLE INITIALLY DEFERRED" on some
kind of constraints (`issue #130`__)
__ https://github.com/lelit/pglast/issues/130
3.17 (2022-11-04)
- Fix
AlterSubscriptionStmt
printer, handling "SET PUBLICATION" without options
3.16 (2022-11-03)
- Update libpg_query to `13-2.2.0`__
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-220---2022-11-02
3.15 (2022-10-17)
3.14 (2022-08-08)
- Harden the way ``Visitor`` handle modifications to the AST (`issue #107`__)
__ https://github.com/lelit/pglast/issues/107
3.13 (2022-06-29)
3.12 (2022-06-19)
- Rewrite the implementation of the ``referenced_relations()`` function, that was flawed with
regard to CTEs handling (`issue #106`__), thanks to Michal Charemza for providing his own
version
__ https://github.com/lelit/pglast/issues/106
- Improve ``WithClause`` printer indentation
- Fix minor whitespace related issues in a few printer functions
3.11 (2022-05-29)
-
Fix the Visitor
class, it was ignoring nodes nested in sub-lists
-
Reduce the size of the generated parser by factoring out common code into helper functions
3.10 (2022-05-11)
- Update libpg_query to `13-2.1.1`__ (`PR #102`__), thanks to James Guthrie
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-211---2022-05-03
__ https://github.com/lelit/pglast/pull/102
- Produce `musllinux`__ wheels, thanks to ``cibuildwheel`` `2.5.0`__ (:PEP:`656` was actually
introduced in `2.2.0`__)
__ https://peps.python.org/pep-0656/
__ https://cibuildwheel.readthedocs.io/en/stable/changelog/#v250
__ https://cibuildwheel.readthedocs.io/en/stable/changelog/#v220
3.9 (2022-02-24)
~~~~~~~~~~~~~~~~
- Fix bug handling node containing a ``location`` field, e.g. ``CreateTableSpaceStmt`` (`issue
#98`__)
__ https://github.com/lelit/pglast/issues/98
- Properly handle dereferenced array expression (`issue #99`__)
__ https://github.com/lelit/pglast/issues/99
- Avoid improper "floatification" of literal integers (`issue #100`__)
__ https://github.com/lelit/pglast/issues/100
3.8 (2021-12-28)
~~~~~~~~~~~~~~~~
- Fix glitch in the AST extractor tool (`issue #97`__)
__ https://github.com/lelit/pglast/issues/97
- Add Linux AArch64 wheel build support (`PR #95`__), thanks to odidev
__ https://github.com/lelit/pglast/pull/95
- Fix type mismatch when using ``--remove-pg_catalog-from-functions`` (`PR #93`__), thanks
to Boris Zentner
__ https://github.com/lelit/pglast/pull/93/
3.7 (2021-10-13)
~~~~~~~~~~~~~~~~
- Update libpg_query to `13-2.1.0`__
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-210---2021-10-12_
3.6 (2021-10-09)
~~~~~~~~~~~~~~~~
- Use latest libpg_query, to fix an error parsing ``PLpgSQL`` statements (`issue #88`__)
__ https://github.com/lelit/pglast/issues/88
3.5 (2021-09-26)
~~~~~~~~~~~~~~~~
- Forward the ``special_functions`` option to substream, when concatenating items
(`issue #89`__)
__ https://github.com/lelit/pglast/issues/89
- Fix representation of floating point numbers without decimal digits (`issue #91`__)
__ https://github.com/lelit/pglast/issues/91
- Produce Python 3.10 wheels, thanks to ``cibuildwheel`` 2.1.2
- Update libpg_query to `13-2.0.7`__
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-207---2021-07-16_
- New option ``--remove-pg_catalog-from-functions`` on the command line tool (`PR #90`__), thanks
to Boris Zentner
__ https://github.com/lelit/pglast/pull/90/
- Implement more *special functions* (`PR #92`__), thanks to Boris Zentner
__ https://github.com/lelit/pglast/pull/92/
3.4 (2021-08-21)
~~~~~~~~~~~~~~~~
- Fix another packaging issue, that prevented recompilation from the sdist ``.tar.gz`` (`issue
#86`__), thanks to Christopher Brichford
__ https://github.com/lelit/pglast/issues/82
3.3 (2021-07-04)
~~~~~~~~~~~~~~~~
- Update libpg_query to `13-2.0.6`__
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-206---2021-06-29_
3.2 (2021-06-25)
~~~~~~~~~~~~~~~~
- Effectively include libpg_query's vendored sources (`issue #82`__)
__ https://github.com/lelit/pglast/issues/82
3.1 (2021-06-25)
~~~~~~~~~~~~~~~~
- Fix packaging glitch (`issue #82`__)
__ https://github.com/lelit/pglast/issues/82
- Build wheels also for macOS
- Update libpg_query to `13-2.0.5`__
__ https://github.com/pganalyze/libpg_query/blob/13-latest/CHANGELOG.md#13-205---2021-06-24_
3.0 (2021-06-04)
~~~~~~~~~~~~~~~~
- Fix glitch in the ``RawStream``, avoiding spurious space after an open parenthesis
- Improve the ``Visitor`` class, to make it easier altering the original tree
- Properly handle nested lists in the serialization of AST Node
3.0.dev2 (2021-05-22)
**Breaking changes**
-
To reduce confusion, the printer
module has been removed: print-specific stuff is now
directly exposed by the printers
subpackage while serialization classes are now in the
new stream
module
-
The default value for the safety_belt
option of the printify()
function is now
False
3.0.dev1 (2021-05-16)
- Fix ``AT_SetIdentity``, ``AT_EnableReplicaTrig`` and ``AlterSubscriptionStmt`` printers
- Improve ``AlterTSConfigType`` and ``IntoClause`` printers
- New generic "visitor pattern" (`issue #51`__) exemplified by a new
``referenced_relations()`` function (`issue #66`__)
__ https://github.com/lelit/pglast/issues/51
__ https://github.com/lelit/pglast/issues/66
- Refine printing of SQL comments
- Implement ``AlterExtensionStmt`` printer
3.0.dev0 (2021-05-03)
**Breaking changes**
-
Target PostgreSQL 13
-
The pglast.parser
module exposes all libpg_query
entry points, even the new
pg_query_deparse_protobuf()
function that is basically equivalent to
RawStream
\ -based printer
-
The split()
function is now based on the lower level pg_query_split_with_xxx()
functions
-
The parse_sql()
function returns native Python objects, not a JSON
string as before:
all PG nodes are now represented by subclasses of pglast.ast.Node
, without exception,
even Expr
and Value
are there. The latter impacts on pglast.node.Scalar
: for
example it now may contains a ast.Integer
instance instead of a Python int
-
The pgpp --parse-tree
output is a pprint
__ represention of the AST
, not a JSON
string as before
__ https://docs.python.org/3.9/library/pprint.html#pprint.pprint
-
The ParseError
exception does not expose the location
as an instance member anymore,
although its still there, as the second argument (ie .args[1]
); furthermore, its value
now corresponds to the index in the original Unicode string, instead of the offset in the
UTF-8
representation passed to the underlying C function
Version 2
#########
2.0.dev3 (2021-02-20)
- Handle ``INCLUDE`` clause in ``IndexStmt`` (`PR #67`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/67
2.0.dev2 (2020-10-24)
- Merge new
fingerprint
functionality from v1
(i.e. master
) branch
2.0.dev1 (2020-09-26)
- Require Python 3.6 or greater
- Handle ``ALTER TYPE .. RENAME VALUE`` in ``AlterEnumStmt`` (`PR #52`__), thanks to Ronan
Dunklau
__ https://github.com/lelit/pglast/pull/52
- Add support for Create / Alter / Drop PROCEDURE (`PR #48`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/48
- Use Ronan's fork__ of libpg_query, targeting PostgreSQL 12.1 (`PR #36`__)
__ https://github.com/rdunklau/libpg_query
__ https://github.com/lelit/pglast/pull/36
- Change get_postgresql_version() to return a ``(major, minor)`` tuple (`issue #38`__)
__ https://github.com/lelit/pglast/issues/38
- Handle ``ALTER TABLE ... ALTER COLUMN ... SET STORAGE ...``
- Handle PG12 materialized CTEs (`issue #57`)
- Support column numbers in ``ALTER INDEX`` (`PR #58`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/58
- Handle ``SET LOGGED`` and ``SET UNLOGGED`` in ``ALTER TABLE`` (`PR #59`__), thanks to Ronan
Dunklau
__ https://github.com/lelit/pglast/pull/59
- Handle ``ALTER TYPE ... RENAME`` (`PR #62`__), , thanks to Ronan
Dunklau
__ https://github.com/lelit/pglast/pull/62
Version 1
#########
1.18 (2021-06-01)
~~~~~~~~~~~~~~~~~
- Fix exclusion constraint printer (`issue #81`__)
__ https://github.com/lelit/pglast/issues/81
1.17 (2021-02-20)
~~~~~~~~~~~~~~~~~
- Fix the generic case in the ``RenameStmt`` printer
1.16 (2021-02-20)
~~~~~~~~~~~~~~~~~
- Promote to the *stable* state
- Move the job of building and uploading binary wheels from TravisCI to GitHub Actions
1.15 (2021-02-19)
~~~~~~~~~~~~~~~~~
- Fix ``IF EXISTS`` variant of ``RenameStmt`` printer (`PR #70`__), thanks to Jonathan
Mortensen
__ https://github.com/lelit/pglast/pull/70
- Update libpg_query to 10-1.0.5
1.14 (2020-10-24)
~~~~~~~~~~~~~~~~~
- Produce Python 3.9 wheels, thanks to ``cibuildwheel`` 1.6.3
- Expose the ``libpg_query``'s `fingerprint`__ functionality (`PR #64`__), thanks to Yiming
Wang
__ https://github.com/lfittl/libpg_query/wiki/Fingerprinting
__ https://github.com/lelit/pglast/pull/64
1.13 (2020-09-26)
~~~~~~~~~~~~~~~~~
- Handle ``SELECT FROM foo``
1.12 (2020-06-08)
~~~~~~~~~~~~~~~~~
- Double quote column names in the ``TYPE_FUNC_NAME_KEYWORDS`` set (`issue #55`__)
__ https://github.com/lelit/pglast/issues/55
- Possibly wrap ``SELECT`` in ``UNION``/``INTERSECT`` between parens, when needed
(`issue #55`__)
__ https://github.com/lelit/pglast/issues/55
1.11 (2020-05-08)
~~~~~~~~~~~~~~~~~
- Fix ``A_Expr`` printer, when ``lexpr`` is missing (`PR #54`__), thanks to Aiham
__ https://github.com/lelit/pglast/pull/54
- Support ``DISABLE ROW LEVEL SECURITY`` in ``AlterTableCmd`` (`PR #49`__), thanks to Ronan
Dunklau
__ https://github.com/lelit/pglast/pull/49
- Implement ``CreateOpClassStmt`` printer (`PR #47`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/47
1.10 (2020-01-25)
~~~~~~~~~~~~~~~~~
- Fix collation name printer (`PR #44`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/44
- Implement ``CreatePLangStmt`` printer (`PR #42`__), thanks to Bennie Swart
__ https://github.com/lelit/pglast/pull/42
- Fix privileges printer (`PR #41`__), thanks to Bennie Swart
__ https://github.com/lelit/pglast/pull/41
- Handle ``TRUNCATE`` event in ``CreateTrigStmt`` printer (`PR #40`__), thanks to Bennie Swart
__ https://github.com/lelit/pglast/pull/40
- Fix function body dollar quoting (`PR #39`__), thanks to Bennie Swart
__ https://github.com/lelit/pglast/pull/39
1.9 (2019-12-20)
~~~~~~~~~~~~~~~~
- Prettier ``INSERT`` representation
1.8 (2019-12-07)
~~~~~~~~~~~~~~~~
- Prettier ``CASE`` representation
- New option to emit a semicolon after the last statement (`issue #24`__)
__ https://github.com/lelit/pglast/issues/24
1.7 (2019-12-01)
~~~~~~~~~~~~~~~~
- Implement ``NotifyStmt`` printer
- Implement ``RuleStmt`` printer, thanks to Gavin M. Roy for his `PR #28`__
__ https://github.com/lelit/pglast/pull/28
- Fix ``RenameStmt``, properly handling object name
- Produce Python 3.8 wheels, thanks to `cibuildwheel`__ 1.0.0
__ https://github.com/joerick/cibuildwheel
- Support ``ALTER TABLE RENAME CONSTRAINT`` (`PR #35`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/35
1.6 (2019-09-04)
~~~~~~~~~~~~~~~~
- Fix issue with boolean expressions precedence (`issue #29`__)
__ https://github.com/lelit/pglast/issues/29
- Implement ``BitString`` printer
- Support ``LEAKPROOF`` option (`PR #31`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/31
- Support ``DEFERRABLE INITIALLY DEFERRED`` option (`PR #32`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/32
1.5 (2019-06-04)
~~~~~~~~~~~~~~~~
- Fix issue with ``RETURNS SETOF`` functions, a more general solution than the one proposed by
Ronan Dunklau (`PR #22`__)
__ https://github.com/lelit/pglast/pull/22
- Allow more than one empty line between statements (`PR #26`__), thanks to apnewberry
__ https://github.com/lelit/pglast/pull/26
1.4 (2019-04-06)
~~~~~~~~~~~~~~~~
- Fix wrap of trigger's WHEN expression (`issue #18`__)
__ https://github.com/lelit/pglast/issues/18
- Support for variadic functions (`PR #19`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/19
- Support ORDER / LIMIT / OFFSET for set operations (`PR #20`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/20
- Implement ``ConstraintsSetStmt`` and improve ``VariableSetStmt`` printers
1.3 (2019-03-28)
~~~~~~~~~~~~~~~~
- Support ``CROSS JOIN`` and timezone modifiers on time and timestamp datatypes (`PR #15`__),
thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/15
- Many new printers and several enhancements (`PR #14`__), thanks to Ronan Dunklau
__ https://github.com/lelit/pglast/pull/14
- Expose the package version as pglast.__version__ (`issue #12`__)
__ https://github.com/lelit/pglast/issues/12
1.2 (2019-02-13)
~~~~~~~~~~~~~~~~
- Implement new `split()` function (see `PR #10`__)
__ https://github.com/lelit/pglast/pull/10
- Implement ``BooleanTest`` printer (`issue #11`__)
__ https://github.com/lelit/pglast/issues/11
1.1 (2018-07-20)
~~~~~~~~~~~~~~~~
- No visible changes, but now PyPI carries binary wheels for Python 3.7.
1.0 (2018-06-16)
~~~~~~~~~~~~~~~~
.. important:: The name of the package has been changed from ``pg_query`` to ``pglast``, to
satisfy the request made by the author of ``libpg_query`` in `issue #9`__.
This affects both the main repository on GitHub, that from now on is
``https://github.com/lelit/pglast``, and the ReadTheDocs project that hosts the
documentation, ``http://pglast.readthedocs.io/en/latest/``.
I'm sorry for any inconvenience this may cause.
__ https://github.com/lelit/pglast/issues/9
0.28 (2018-06-06)
~~~~~~~~~~~~~~~~~
- Update libpg_query to 10-1.0.2
- Support the '?'-style parameter placeholder variant allowed by libpg_query (details__)
__ https://github.com/lfittl/libpg_query/issues/45
0.27 (2018-04-15)
~~~~~~~~~~~~~~~~~
- Prettier JOINs representation, aligning them with the starting relation
0.26 (2018-04-03)
~~~~~~~~~~~~~~~~~
- Fix cosmetic issue with ANY() and ALL()
0.25 (2018-03-31)
~~~~~~~~~~~~~~~~~
- Fix issue in the safety belt check performed by ``pgpp`` (`issue #4`__)
__ https://github.com/lelit/pglast/issues/4
0.24 (2018-03-02)
~~~~~~~~~~~~~~~~~
- Implement ``Null`` printer
0.23 (2017-12-28)
~~~~~~~~~~~~~~~~~
- Implement some other DDL statements printers
- New alternative style to print *comma-separated-values* lists, activated by a new
``--comma-at-eoln`` option on ``pgpp``
0.22 (2017-12-03)
~~~~~~~~~~~~~~~~~
- Implement ``TransactionStmt`` and almost all ``DROP xxx`` printers
0.21 (2017-11-22)
~~~~~~~~~~~~~~~~~
- Implement ``NamedArgExpr`` printer
- New alternative printers for a set of *special functions*, activated by a new
``--special-functions`` option on ``pgpp`` (`issue #2`__)
__ https://github.com/lelit/pglast/issues/2
0.20 (2017-11-21)
~~~~~~~~~~~~~~~~~
- Handle special de-reference (``A_Indirection``) cases
0.19 (2017-11-16)
~~~~~~~~~~~~~~~~~
- Fix serialization of column labels containing double quotes
- Fix corner issues surfaced implementing some more DDL statement printers
0.18 (2017-11-14)
~~~~~~~~~~~~~~~~~
- Fix endless loop due to sloppy conversion of command line option
- Install the command line tool as ``pgpp``
0.17 (2017-11-12)
~~~~~~~~~~~~~~~~~
- Rename printers.sql to printers.dml (**backward incompatibility**)
- List printer functions in the documentation, referencing the definition of related node type
- Fix inconsistent spacing in JOIN condition inside a nested expression
- Fix representation of unbound arrays
- Fix representation of ``interval`` data type
- Initial support for DDL statements
- Fix representation of string literals containing single quotes
0.16 (2017-10-31)
~~~~~~~~~~~~~~~~~
- Update libpg_query to 10-1.0.0
0.15 (2017-10-12)
~~~~~~~~~~~~~~~~~
- Fix indentation of boolean expressions in SELECT's targets (`issue #3`__)
__ https://github.com/lelit/pglast/issues/3
0.14 (2017-10-09)
~~~~~~~~~~~~~~~~~
- Update to latest libpg_query's 10-latest branch, targeting PostgreSQL 10.0 final
0.13 (2017-09-17)
~~~~~~~~~~~~~~~~~
- Fix representation of subselects requiring surrounding parens
0.12 (2017-08-22)
~~~~~~~~~~~~~~~~~
- New option ``--version`` on the command line tool
- Better enums documentation
- Release the GIL while calling libpg_query functions
0.11 (2017-08-11)
~~~~~~~~~~~~~~~~~
- Nicer indentation for JOINs, making OUTER JOINs stand out
- Minor tweaks to lists rendering, with less spurious whitespaces
- New option ``--no-location`` on the command line tool
0.10 (2017-08-11)
~~~~~~~~~~~~~~~~~
- Support Python 3.4 and Python 3.5 as well as Python 3.6
0.9 (2017-08-10)
~~~~~~~~~~~~~~~~
- Fix spacing before the $ character
- Handle type modifiers
- New option ``--plpgsql`` on the command line tool, just for fun
0.8 (2017-08-10)
~~~~~~~~~~~~~~~~
- Add enums subpackages to the documentation with references to their related headers
- New ``compact_lists_margin`` option to produce a more compact representation when possible
(see `issue #1`__)
__ https://github.com/lelit/pglast/issues/1
0.7 (2017-08-10)
~~~~~~~~~~~~~~~~
- Fix sdist including the Sphinx documentation
0.6 (2017-08-10)
~~~~~~~~~~~~~~~~
- New option ``--parse-tree`` on the command line tool to show just the parse tree
- Sphinx documentation, available online
0.5 (2017-08-09)
~~~~~~~~~~~~~~~~
- Handle some more cases when a name must be double-quoted
- Complete the serialization of the WindowDef node, handling its frame options
0.4 (2017-08-09)
~~~~~~~~~~~~~~~~
- Expose the actual PostgreSQL version the underlying libpg_query libray is built on thru a new
``get_postgresql_version()`` function
- New option `safety_belt` for the ``prettify()`` function, to protect the innocents
- Handle serialization of ``CoalesceExpr`` and ``MinMaxExpr``
0.3 (2017-08-07)
~~~~~~~~~~~~~~~~
- Handle serialization of ``ParamRef`` nodes
- Expose a ``prettify()`` helper function
0.2 (2017-08-07)
~~~~~~~~~~~~~~~~
- Test coverage at 99%
- First attempt at automatic wheel upload to PyPI, let's see...
0.1 (2017-08-07)
~~~~~~~~~~~~~~~~
- First release ("Hi daddy!", as my soul would tag it)