Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v85LO-00CUBd-FV for pgsql-announce@arkaria.postgresql.org; Sun, 12 Oct 2025 23:19:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v85LK-002jOi-Ow for pgsql-announce@arkaria.postgresql.org; Sun, 12 Oct 2025 23:19:11 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v85LJ-002jNq-OT for pgsql-announce@lists.postgresql.org; Sun, 12 Oct 2025 23:19:10 +0000 Received: from mahout.postgresql.org ([2001:4800:3e1:1::227]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v85LH-001p5x-24 for pgsql-announce@lists.postgresql.org; Sun, 12 Oct 2025 23:19:10 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Message-ID:Date:Reply-To:From:To:Subject: MIME-Version:Content-Type:Sender:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:In-Reply-To:References; bh=HqXzXnaji4kKWq4ZwebWOZvRUQOifi9J9JOYbOFxgRc=; b=KjCyyvFWkQAmg0a2wlVEJVBJzD VUMeeOise+2FisbPe+O+aBy/KPRTAVa7unWMJdlmK39xcfm7UrXkeycGrCXm3wUMcNvkeCS8RbjxL KUTNg45BeBh+sjHJJWdYYU9FF96vIdT6wfUKwP3MaF7IglUrbcOk3jVdatdbXXRKvqc5/QMiw/Jwo UM+T3vXpt91LcuSMa5BJNtBBn0htXmmUOHlibWkmxOcNkr5Su4OMLn09ioykO2rsA0DnNjmvuX0wn BYZPYRwq3jMpK1cxbNEQSrIeszDJATWaTaIq+gPDTayMvyfKwB1AipK/Au6cZJyskCO9iZZvI93Pc zuMOPIVw==; Received: from wrigleys.postgresql.org ([2a02:16a8:dc51::60]) by mahout.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v85LF-003wGb-0E for pgsql-announce@lists.postgresql.org; Sun, 12 Oct 2025 23:19:05 +0000 Received: from localhost ([127.0.0.1] helo=wrigleys.postgresql.org) by wrigleys.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1v85LC-00EOh8-2C for pgsql-announce@lists.postgresql.org; Sun, 12 Oct 2025 23:19:03 +0000 Content-Type: multipart/mixed; boundary="===============3594665439388072411==" MIME-Version: 1.0 Subject: pg_builder 3.2 and pg_wrapper 3.3 released with support for Postgres 18 To: PostgreSQL Announce From: Alexey Borzov via PostgreSQL Announce Reply-To: avb@php.net Date: Sun, 12 Oct 2025 23:18:26 +0000 Message-ID: <176031110646.763.9354932388889523869@wrigleys.postgresql.org> X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-pglister-tags: related X-pglister-tagsig: 4200513c6427dea3f12b9b07f70991b607d25ed1a72b11438e50ca06c06cd194 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --===============3594665439388072411== Content-Type: multipart/alternative; boundary="===============2876357930635114179==" MIME-Version: 1.0 --===============2876357930635114179== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable I am pleased to announce the release of [pg_builder](https://github.com/sad= -spirit/pg-builder) and [pg_wrapper](https://github.com/sad-spirit/pg-wrapp= er) packages for PHP updated for Postgres 18. ## pg_builder 3.2 pg_builder is a query builder for Postgres backed by a partial PHP reimplem= entation of PostgreSQL's own SQL parser. It supports almost all syntax avai= lable in Postgres 18 for `SELECT` (and `VALUES`), `INSERT`, `UPDATE`, `DELE= TE`, and `MERGE` queries. With pg_builder it is possible to start with a manually written query, pars= e it into an Abstract Syntax Tree, add query parts (either as Node objects = or as strings) to this tree or remove them, and finally convert the tree ba= ck to an SQL string. Release highlights: * Support for new syntax of PostgreSQL 18: aliases for `OLD` and `NEW` in = `RETURNING` clause of DML statements. * Node objects use `WeakReference` to keep a link to their parent node, th= is prevents circular references and allows garbage collection of AST fragme= nts. [Full release notes](https://github.com/sad-spirit/pg-builder/blob/v3.2.0/C= hangelog.md) The package can be [downloaded from GitHub](https://github.com/sad-spirit/p= g-builder/releases/tag/v3.2.0) or installed with Composer: ``` $ composer require sad_spirit/pg_builder ``` ## pg_wrapper 3.3 pg_wrapper provides converters for PostgreSQL data types and an object-orie= nted wrapper for PHP's native pgsql extension that uses these converters. C= onversion of query result fields is done automatically using database metad= ata, query parameters may require specifying type. For those types where a corresponding native PHP type or class is available= it is used (`text` -> `string`, `timestamp` -> `DateTimeImmutable`, `hstor= e` -> associative array, etc.). For other types (geometric types, ranges) t= he package provides custom classes. If a base type can be converted, then c= omposite types, arrays, ranges using it can be automatically handled as wel= l. Release highlights: * New error codes from PostgreSQL 18. [Full release notes](https://github.com/sad-spirit/pg-wrapper/blob/v3.3.0/C= hangelog.md) The package can be [downloaded from GitHub](https://github.com/sad-spirit/p= g-wrapper/releases/tag/v3.3.0) or installed with Composer: ``` $ composer require sad_spirit/pg_wrapper ``` --===============2876357930635114179== Content-Type: text/html; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable pg_builder 3.2 and pg_wrapper 3.3 released with support for Post= gres 18
 

pg_builder 3.2 and pg_wrapper 3.3 released with support for Postgres = 18

I am pleased to announce the release of pg_builder and pg_wrapper packages for PHP updated for Postgres 18.

pg_builder 3.2

pg_builder is a query builder for Postgres = backed by a partial PHP reimplementation of PostgreSQL's own SQL parser. It= supports almost all syntax available in Postgres 18 for SELECT (and VALUES), INSERT, UPDATE, DELETE, and MERGE queries.

With pg_builder it is possible to start wit= h a manually written query, parse it into an Abstract Syntax Tree, add quer= y parts (either as Node objects or as strings) to this tree or remove them,= and finally convert the tree back to an SQL string.

Release highlights:

  • Support for new= syntax of PostgreSQL 18: aliases for OLD and NEW= in RETURNING clause of DML statements.
  • Node objects us= e WeakReference to keep a link to their parent node, this prev= ents circular references and allows garbage collection of AST fragments.

Full release notes

The package can be downloaded from GitHub or installed with Com= poser:

$ composer require sad_spirit/pg_buil= der

pg_wrapper 3.3

pg_wrapper provides converters for PostgreS= QL data types and an object-oriented wrapper for PHP's native pgsql extensi= on that uses these converters. Conversion of query result fields is done au= tomatically using database metadata, query parameters may require specifyin= g type.

For those types where a corresponding nativ= e PHP type or class is available it is used (text -> = string, timestamp -> DateTimeImmutable,= hstore -> associative array, etc.). For other types (geome= tric types, ranges) the package provides custom classes. If a base type can= be converted, then composite types, arrays, ranges using it can be automat= ically handled as well.

Release highlights:

  • New error codes= from PostgreSQL 18.

Full release notes

The package can be downloaded from GitHub or installed with Com= poser:

$ composer require sad_spirit/pg_wrap= per

This email was sent to you from Alexey Borzov. It was delivered on their be= half by the PostgreSQL project. Any questions about the content of the message shou= ld be sent to Alexey Borzov.

You were sent this email as a subscriber of the pgsql-announce mai= linglist, for the content tag Related Open Source. To unsubscribe from further emails, or change which emails you want to receive, please click th= e personal unsubscribe link that you can find in the headers of this email, or visit https://lists.postgresql.org/unsubscribe/.
 
--===============2876357930635114179==-- --===============3594665439388072411==--