Changes¶
Version 6¶
6.2 (2024-02-01)¶
Almost no-op release to fix issue 144, producing correct wheels for macOS arm64
6.1 (2024-01-22)¶
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)
6.0.dev1 (2024-01-11)¶
Re-enable Linux 32bit wheels, thanks to libpg_query to 16-5.1.0
6.0.dev0 (2023-12-29)¶
No visible changes with respect to v5, apart from the support for new/revised syntaxes of PostgreSQL 16
Do not build binary wheels for Python 3.8
Skip compilation on Linux 32bit (see this comment for details)
Breaking changes¶
Target PostgreSQL 16, thanks to libpg_query 16-5.0.0
Version 5¶
5.9 (2024-01-22)¶
Fix issue 143, affecting
AlterOwnerStmt
andRenameStmt
printers
5.8 (2024-01-11)¶
Fix issue #142, a glitch that affected 32-bit systems
5.7 (2023-12-23)¶
Use Cython 3.0.7
Update libpg_query to 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
andCheckPointStmt
), that do not carry any other informationUse Cython 3.0.6
Handle the
ENABLE TRIGGER ALL
inAlterTableCmd
Fix issue #136, a regression introduced by “Avoid overly abundancy of parentheses in expressions”
5.5 (2023-10-07)¶
Use Cython 3.0.3
Produce wheels using final Python 3.12 release, thanks to
cibuildwheel
2.16.2
5.4 (2023-08-24)¶
Improve documentation, adding
parser.Displacements
,parser.scan
andparser.split
examples (issue #128)Fix issues #129 and #130 (merged from version 4.4)
5.3 (2023-08-05)¶
Update libpg_query to 15-4.2.3
5.2 (2023-05-20)¶
Update libpg_query to 15-4.2.1
5.1 (2023-02-28)¶
Merge version 4.2 changes
5.0 (2023-02-19)¶
No changes
5.0.dev1 (2023-02-11)¶
Update libpg_query to 15-4.2.0
Breaking changes¶
Change the type of the
ast.Float
value fromDecimal
tostr
Using a
Decimal
implies potential differences in the representation of floating numbers, and already caused issues (#91 and #100) in the past, making it impossible to render, say,SELECT 0.0e1
, due to the fact thatDecimal('0.0e1')
resolves toDecimal('0')
.
5.0.dev0 (2022-12-19)¶
No visible changes with respect to v4, apart from the support for new/revised syntaxes of PostgreSQL 15
Breaking changes¶
Target PostgreSQL 15, thanks to libpg_query 15-4.0.0
Version 4¶
4.5 (unreleased)¶
Use Cython 3.0.2
4.4 (2023-08-24)¶
Fix issues #129 and #130 (merged from version 3.18)
4.3 (2023-04-27)¶
Fix serialization issue when column’s
DEFAULT
value is an expression
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)
4.0 (2022-12-12)¶
Update libpg_query to final 14-3.0.0
4.0.dev0 (2022-11-24)¶
Update libpg_query to 14-3.0.0
Avoid overly abundancy of parentheses in expressions
Prefer
SELECT a FROM b LIMIT ALL
to... LIMIT NONE
Breaking changes¶
Target PostgreSQL 14
The wrapper classes used in previous versions, implemented in
pglast.node
, are gone: now everything works on top of theAST
classes (issue #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)Fix
Constraint
printer, avoiding repetition of “DEFERRABLE INITIALLY DEFERRED” on some kind of constraints (issue #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
3.15 (2022-10-17)¶
3.14 (2022-08-08)¶
Harden the way
Visitor
handle modifications to the AST (issue #107)
3.13 (2022-06-29)¶
Update libpg_query to 13-2.1.2
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 versionImprove
WithClause
printer indentationFix 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-listsReduce the size of the generated parser by factoring out common code into helper functions
3.10 (2022-05-11)¶
3.9 (2022-02-24)¶
Fix bug handling node containing a
location
field, e.g.CreateTableSpaceStmt
(issue #98)Properly handle dereferenced array expression (issue #99)
Avoid improper “floatification” of literal integers (issue #100)
3.8 (2021-12-28)¶
3.7 (2021-10-13)¶
Update libpg_query to 13-2.1.0
3.6 (2021-10-09)¶
Use latest libpg_query, to fix an error parsing
PLpgSQL
statements (issue #88)
3.5 (2021-09-26)¶
Forward the
special_functions
option to substream, when concatenating items (issue #89)Fix representation of floating point numbers without decimal digits (issue #91)
Produce Python 3.10 wheels, thanks to
cibuildwheel
2.1.2Update libpg_query to 13-2.0.7
New option
--remove-pg_catalog-from-functions
on the command line tool (PR #90), thanks to Boris ZentnerImplement more special functions (PR #92), thanks to Boris Zentner
3.4 (2021-08-21)¶
Fix another packaging issue, that prevented recompilation from the sdist
.tar.gz
(issue #86), thanks to Christopher Brichford
3.3 (2021-07-04)¶
Update libpg_query to 13-2.0.6
3.2 (2021-06-25)¶
Effectively include libpg_query’s vendored sources (issue #82)
3.1 (2021-06-25)¶
3.0 (2021-06-04)¶
Fix glitch in the
RawStream
, avoiding spurious space after an open parenthesisImprove the
Visitor
class, to make it easier altering the original treeProperly handle nested lists in the serialization of AST Node
3.0.dev2 (2021-05-22)¶
Fix bug in
CreateStmt
printer (issue #79)Make it possible to pass also concrete
ast.Node
s toRawStream`
Breaking changes¶
To reduce confusion, the
printer
module has been removed: print-specific stuff is now directly exposed by theprinters
subpackage while serialization classes are now in the newstream
moduleThe default value for the
safety_belt
option of theprintify()
function is nowFalse
3.0.dev1 (2021-05-16)¶
Fix
AT_SetIdentity
,AT_EnableReplicaTrig
andAlterSubscriptionStmt
printersImprove
AlterTSConfigType
andIntoClause
printersNew generic “visitor pattern” (issue #51) exemplified by a new
referenced_relations()
function (issue #66)Refine printing of SQL comments
Implement
AlterExtensionStmt
printer
3.0.dev0 (2021-05-03)¶
Expose the new
pg_query_scan()
function asparser.scan()
Expose the
pg_query_parse()
function asparser.parse_sql_json()
Expose the new
pg_query_parse_protobuf()
function asparser.parse_sql_protobuf()
Expose the new
pg_query_deparse_protobuf()
function asparser.deparse_protobuf()
Honor the
catalogname
of aRangeVar
if present (issue #71)Cover almost all
SQL
statements, testing against the wholePostgreSQL
regression suite (issue #68, PR #72 and PR #77), thanks to Ronan Dunklau and Hong ChengNew rudimentary support for the preserve comments feature (issue #23)
Breaking changes¶
Target PostgreSQL 13
The
pglast.parser
module exposes alllibpg_query
entry points, even the newpg_query_deparse_protobuf()
function that is basically equivalent toRawStream
-based printerThe
split()
function is now based on the lower levelpg_query_split_with_xxx()
functionsThe
parse_sql()
function returns native Python objects, not aJSON
string as before: all PG nodes are now represented by subclasses ofpglast.ast.Node
, without exception, evenExpr
andValue
are there. The latter impacts onpglast.node.Scalar
: for example it now may contains aast.Integer
instance instead of a Pythonint
The
pgpp --parse-tree
output is a pprint represention of theAST
, not aJSON
string as beforeThe
ParseError
exception does not expose thelocation
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 theUTF-8
representation passed to the underlying C function
Version 2¶
2.0.dev3 (2021-02-20)¶
Handle
INCLUDE
clause inIndexStmt
(PR #67), thanks to Ronan Dunklau
2.0.dev2 (2020-10-24)¶
Merge new
fingerprint
functionality fromv1
(i.e.master
) branch
2.0.dev1 (2020-09-26)¶
Require Python 3.6 or greater
Handle
ALTER TYPE .. RENAME VALUE
inAlterEnumStmt
(PR #52), thanks to Ronan DunklauAdd support for Create / Alter / Drop PROCEDURE (PR #48), thanks to Ronan Dunklau
Use Ronan’s fork of libpg_query, targeting PostgreSQL 12.1 (PR #36)
Change get_postgresql_version() to return a
(major, minor)
tuple (issue #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 DunklauHandle
SET LOGGED
andSET UNLOGGED
inALTER TABLE
(PR #59), thanks to Ronan DunklauHandle
ALTER TYPE ... RENAME
(PR #62), , thanks to Ronan Dunklau
Version 1¶
1.18 (2021-06-01)¶
Fix exclusion constraint printer (issue #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 ofRenameStmt
printer (PR #70), thanks to Jonathan MortensenUpdate libpg_query to 10-1.0.5
1.14 (2020-10-24)¶
Produce Python 3.9 wheels, thanks to
cibuildwheel
1.6.3Expose the
libpg_query
’s fingerprint functionality (PR #64), thanks to Yiming Wang
1.13 (2020-09-26)¶
Handle
SELECT FROM foo
1.12 (2020-06-08)¶
1.11 (2020-05-08)¶
1.10 (2020-01-25)¶
Fix collation name printer (PR #44), thanks to Ronan Dunklau
Implement
CreatePLangStmt
printer (PR #42), thanks to Bennie SwartFix privileges printer (PR #41), thanks to Bennie Swart
Handle
TRUNCATE
event inCreateTrigStmt
printer (PR #40), thanks to Bennie SwartFix function body dollar quoting (PR #39), thanks to Bennie Swart
1.9 (2019-12-20)¶
Prettier
INSERT
representation
1.8 (2019-12-07)¶
Prettier
CASE
representationNew option to emit a semicolon after the last statement (issue #24)
1.7 (2019-12-01)¶
Implement
NotifyStmt
printerImplement
RuleStmt
printer, thanks to Gavin M. Roy for his PR #28Fix
RenameStmt
, properly handling object nameProduce Python 3.8 wheels, thanks to cibuildwheel 1.0.0
Support
ALTER TABLE RENAME CONSTRAINT
(PR #35), thanks to Ronan Dunklau
1.6 (2019-09-04)¶
1.5 (2019-06-04)¶
1.4 (2019-04-06)¶
1.3 (2019-03-28)¶
1.2 (2019-02-13)¶
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.
0.28 (2018-06-06)¶
Update libpg_query to 10-1.0.2
Support the ‘?’-style parameter placeholder variant allowed by libpg_query (details)
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)
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 onpgpp
0.22 (2017-12-03)¶
Implement
TransactionStmt
and almost allDROP xxx
printers
0.21 (2017-11-22)¶
Implement
NamedArgExpr
printerNew alternative printers for a set of special functions, activated by a new
--special-functions
option onpgpp
(issue #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 typeInitial 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)
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 toolBetter 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)
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 treeSphinx 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()
functionNew option safety_belt for the
prettify()
function, to protect the innocentsHandle serialization of
CoalesceExpr
andMinMaxExpr
0.3 (2017-08-07)¶
Handle serialization of
ParamRef
nodesExpose 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)