# Changelog

## Unreleased

* ...


## 6.2.2     2026-01-27

* Upgrade to libpg_query 17-6.2.2
  - Add IsUtilityStmt function to determine if query text contains utility statements
    - This is a fast check for callers that don't actually need the parse tree itself
  - Add Summary function to get summary information about a statement quickly
    - This allows gathering certain information, for example which tables are referenced in a
      statement, without requiring a Protobuf serialization step in a higher level library
    - Additionally this can also be used to perform "smart truncation" of a query by
      omitting deeply nested information (e.g. a CTE definition, or a target list) whilst
        preserving more essential parts like the FROM clause
  - Normalize:
    - Fix handling of special strings in DefElem
      - This avoids a crash when running the normalize function on certain utility statements
    - Add support for CALL statements
  - Deparser:
    - Introduce pretty printing / formatting
      - Introduces a new optional pretty print mode that emits a human readable
        output. A detailed explanation of the mechanism can be found at the start
        of the deparser file.
    - Rework handling of expressions inside typecasts
      - Prefer (..)::type syntax, unless we are already in a function call.
    - Use lowercase keywords in xmlroot functions
      - This matches other XML functions as well as the Postgres documentation,
        since these are closer to function argument names than regular keywords.
    - Fix deparse of ALTER TABLE a ALTER b SET STATISTICS DEFAULT
    - Fix the null pointer dereference when handling identity columns
  - Allow alternate definitions of NAMEDATALEN identifier limit
    - This allows building libpg_query with an override of the built-time limit of
      Postgres identifiers (typically 63 characters)
  - Bump Postgres to 17.7 and switch back to release tarballs
* Avoid conflicts with other cgo libraries utilizing xxhash by using XXH_NAMESPACE [#144](https://github.com/pganalyze/pg_query_go/pull/144)
* Remove redundant copy of result in ParseToProtobuf [#139](https://github.com/pganalyze/pg_query_go/pull/139)


## 6.1.0     2025-02-24

* Upgrade to libpg_query 17-6.1.0
  - Update to Postgres 17.4, and add recent patches scheduled for Postgres 17.5 (not yet released)
    - Notably, this pulls in support for macOS 15.4 which defines strchrnul
    in its standard library, fixing builds on up-to-date macOS versions.
  - Deparser improvements
    - Add parenthesis around AT LOCAL / AT TIMEZONE if needed
    - Correctness improvements related to expressions and function calls
* Allow vendoring pg_query_go with built-in "go mod vendor" command [(#131)](https://github.com/pganalyze/pg_query_go/pull/131)


## 6.0.0     2024-11-26

* Upgrade to libpg_query 17-6.0.0
  - Updates to the Postgres 17 parser
  - Deparser improvements:
    - Add support for deparsing `JSON_TABLE`, `JSON_QUERY`, `JSON_EXISTS`, `JSON_VALUE`
    - Add support for deparsing `JSON`, `JSON_SCALAR`, `JSON_SERIALIZE`
    - Add support for deparsing `COPY ... FORCE_NULL(*)`
    - Add support for deparsing `ALTER COLUMN ... SET EXPRESSION AS`
    - Add support for deparsing `SET STATISTICS DEFAULT`
    - Add support for deparsing `SET ACCESS METHOD DEFAULT`
    - Add support for deparsing `... AT LOCAL`
    - Add support for deparsing `merge_action()`
    - Add support for deparsing `MERGE ... RETURNING`
    - Add support for deparsing `NOT MATCHED [ BY TARGET ]`
* Add function `TestNormalizeUtility` to normalize only utility statements [(#116)](https://github.com/pganalyze/pg_query_go/pull/116)

## 5.1.0     2024-01-09

* Update to libpg_query 16-5.1.0
  - Add support for running on Windows
  - Add support for compiling on 32-bit systems


## 5.0.0     2023-12-23

* Upgrade to libpg_query 16-5.0.0
  - Updates to the Postgres 16 parser
  - Multiple deparser improvements
* Allow importing parse tree proto with cgo disabled
* Add parser.SplitWithScanner() and parser.SplitWithParser()


## 4.2.3     2023-08-04

* Update to libpg_query 15-4.2.3, including changes from 15-4.2.2
  - Fix builds when compiling with `glibc >=  2.38` [#203](https://github.com/pganalyze/libpg_query/pull/203)
  - Deparser: Add support for COALESCE and other expressions in LIMIT clause [#199](https://github.com/pganalyze/libpg_query/pull/199)
  - Deparser: Add support for multi-statement CREATE PROCEDURE definitions [#197](https://github.com/pganalyze/libpg_query/pull/197)
  - Deparser: Correctly quote identifier in ALTER TABLE ... ADD CONSTRAINT [x] [#196](https://github.com/pganalyze/libpg_query/pull/196)
  - Deparser: Add support for index fillfactor within CREATE TABLE, fix SHOW ALL [#193](https://github.com/pganalyze/libpg_query/pull/193)
  - Deparser: Move to dedicated file for easier inclusion in third-party projects [#192](https://github.com/pganalyze/libpg_query/pull/192)


## 4.2.1     2023-05-25

* Update to libpg_query 15-4.2.1 ([#85](https://github.com/pganalyze/pg_query_go/pull/85))
  - Deparser: Handle INTERVAL correctly when used in SET statements [#184](https://github.com/pganalyze/libpg_query/pull/184)
  - Deparser: Ensure index names are quoted as identifiers [#182](https://github.com/pganalyze/libpg_query/pull/182)
* Suppress -Wdeprecated-non-prototype warnings ([#83](https://github.com/pganalyze/pg_query_go/pull/83) and [#84](https://github.com/pganalyze/pg_query_go/pull/84))
* Return full structured error info instead of just error message ([#76](https://github.com/pganalyze/pg_query_go/pull/76))


## 4.2.0     2023-02-08

* Update to libpg_query 15-4.2.0
  - Update to PostgreSQL 15.1


## 2.2.0     2022-11-02

* Update to libpg_query 13-2.2.0 ([#64](https://github.com/pganalyze/pg_query_go/pull/64))
  - Fingerprinting version 3.1
    - Fixes issue with "SELECT DISTINCT" having the same fingerprint as "SELECT"
      (fingerprints for "SELECT DISTINCT" will change with this revision)
    - Group additional DDL statements together that otherwise generate a lot of
      unique fingerprints (ListenStmt, UnlistenStmt, NotifyStmt, CreateFunctionStmt,
      FunctionParameter and DoStmt)
  - Update to Postgres 13.8 patch release
  - Backport Xcode 14.1 build fix from upcoming 13.9 release
  - Normalize additional DDL statements


## 2.1.2      2022-06-28

* Update libpg_query to 13-2.1.2 ([#58](https://github.com/pganalyze/pg_query_go/pull/58))
  - Add support for analyzing PL/pgSQL code inside DO blocks [#142](https://github.com/pganalyze/libpg_query/pull/142)
  - Fix memory leak in pg_query_fingerprint error handling [#141](https://github.com/pganalyze/libpg_query/pull/141)
  - PL/pgSQL parser:
    - Add support for Assert [#135](https://github.com/pganalyze/libpg_query/pull/135)
    - Add support for SET, COMMIT, ROLLBACK and CALL [#130](https://github.com/pganalyze/libpg_query/pull/130)
  - Add support for parsing more operators that include a `?` character (special cased to support old pg_stat_statements query texts)
    - ltree extension [#136](https://github.com/pganalyze/libpg_query/pull/136)
    - promscale extension [#133](https://github.com/pganalyze/libpg_query/pull/133)
  - Deparser improvements
    - Prefix errors with "deparse", and remove some asserts [#131](https://github.com/pganalyze/libpg_query/pull/131)
    - Fix potential segfault when passing invalid protobuf (RawStmt without Stmt) [#128](https://github.com/pganalyze/libpg_query/pull/128)


## 2.1.0      2021-10-12

* Update libpg_query to 13-2.1.0 ([#53](https://github.com/pganalyze/pg_query_go/pull/53))
  - Normalize: add funcname error object
  - Normalize: Match GROUP BY against target list and re-use param refs
  - PL/pgSQL: Setup namespace items for parameters, support RECORD types
    - This significantly improves parsing for PL/pgSQL functions, to the
      extent that most functions should now parse successfully


## 2.0.5      2021-07-16

* Update libpg_query to 13-2.0.7 ([#49](https://github.com/pganalyze/pg_query_go/pull/49))
  - Normalize: Don't modify constants in TypeName typmods/arrayBounds fields
  - Don't fail builds on systems that have strchrnul support (FreeBSD)


## 2.0.4      2021-06-29

* Update libpg_query to 13-2.0.6 ([#47](https://github.com/pganalyze/pg_query_go/pull/47))
  - Normalize: Don't touch "ORDER BY 1" expressions, keep original text


## 2.0.3      2021-06-28

* Update libpg_query to 13-2.0.5 ([#45](https://github.com/pganalyze/pg_query_go/pull/45))
  - Update to Postgres 13.3 patch release
  - Normalize: Don't touch "GROUP BY 1" type statements, keep original text
  - Fingerprint: Cache list item hashes to fingerprint complex queries faster
  - Deparser: Emit the RangeVar catalogname if present
  - Fix crash in pg_scan function when encountering backslash escapes
* Add pg_query.Scan to access Postgres scanner ([#43](https://github.com/pganalyze/pg_query_go/pull/43))


## 2.0.2      2021-04-02

* Update to libpg_query 13-2.0.3
  - Normalize: Fix handling of two subsequent DefElem elements
* Parser CFLAGS: Build with -std=gnu99 to ensure CentOS compatibility


## 2.0.1      2021-03-30

* Update to libpg_query 13-2.0.2
  - Fix ARM builds: Avoid dependency on cpuid.h header
  - Simplify deparser of TableLikeClause
  - Fix asprintf warnings by ensuring _GNU_SOURCE is set early enough
* Add FingerprintToUInt64 method for callers that prefer to handle uint64s
  - This prevents a caller from having to do a hex string to uint64 conversion
    by simply returning the uint64 version of the fingerprint instead, which
    is already always provided by libpg_query.
* Add HashXXH3_64 helper method for generating XXH3 64-bit hash values
  - This can be useful when trying to fit other values into a data structure
    sized for the fingerprint, such as when encountering a parsing error
    during fingerprinting, and wanting to encode that fact uniquely into
    the fingerprint value.


## 2.0.0      2021-03-18

* Update libpg_query to 13-2.0.0
* Switch to use Protobuf generated nodes instead of custom logic
  - WARNING: This is breaking API change!
  - This is a breaking change in the API, but necessary in order to
    significantly improve the performance of parsing a query into Go structs,
    as well as allowing future bi-directional passing of parse trees between
    Go and C, such as for a future addition of a deparser.
* Rename pg_query.FastFingerprint to pg_query.Fingerprint
  - WARNING: This is breaking API change!
  - We no longer have direct support for running the fingerprint in the Go
    library, as its unnecessarily complex to support, and we can instead
    rely on the C fingerprinting method.
* Add support for deparsing parse trees back into a SQL statement
  - Call the new `pg_query.Deparse` method to get back the SQL text for
    a particular parse tree structure
  - This relies on the new deparser in libpg_query to transform a given parse
    tree back into a SQL statement. Note that this is currently considered
    experimental, and should not be used on unsanitized input, due to the risk
    of crashes in the C code with unexpected conditions.
* Update import path to `github.com/pganalyze/pg_query_go`


## 1.0.2      2021-02-18

* Update libpg_query to 10-1.0.5
  - This resolves memory leak problems, adds PPC architecture support,
    and refreshes the Postgres minor version to 10.16.


## 1.0.1      2020-11-07

* Update libpg_query to 10-1.0.3
  - This fixes ARM builds, and refreshes the Postgres patch version. This
    commit does not change the Postgres major version yet (still at PG 10).


## 1.0.0      2019-01-11

* Initial release with a tagged version
  - Note that 1.X releases will reflect Postgres 10 parser based releases from
    now on. When the Postgres 11 parser is released, that will be a new major
    version.
