PHP 版 pg_builder 2.0.0 和 pg_wrapper 2.0.0 发布

发布于 2022-01-02,Alexey Borzov
相关开源软件

我很高兴地宣布 pg_builder (https://github.com/sad-spirit/pg-builder) 和 pg_wrapper (https://github.com/sad-spirit/pg-wrapper) 发布了新版本。本次发布的主题是支持 Postgres 14 和 PHP 8.1。

pg_builder 2.0.0 版本

pg_builder 是一个基于 PostgreSQL 自身 SQL 解析器的部分 PHP 重新实现的 Postgres 查询构建器。它几乎支持 Postgres 14 中 SELECT(及 VALUES)、INSERTUPDATEDELETE 查询的所有语法。

使用 pg_builder,可以从手动编写的查询开始,将其解析为抽象语法树,向该树添加查询部分(作为 Node 对象或字符串)或移除部分,最后将树转换回 SQL 字符串。

版本亮点

  • 支持 Postgres 14 的新语法:大多数关键字可以不带 AS 用作列别名;GROUP BYDISTINCT 子句;公共表表达式的 SEARCHCYCLE 子句;JOIN 表达式 USING 子句的别名。

  • 具有自定义参数格式的 SQL 函数(参数由关键字分隔、关键字作为参数等)现在会被解析为专门的 Node,并在生成的 SQL 中以源代码中的方式呈现:trim(trailing 'o' from 'foo') 而不是 pg_catalog.rtrim('foo', 'o')。这与 Postgres 14 自身的改变保持一致。

  • 在 PHP 8.1 下运行时不再出现 E_DEPRECATED 错误

完整发布说明 (https://github.com/sad-spirit/pg-builder/blob/v2.0.0/Changelog.md)

可以从 Github (https://github.com/sad-spirit/pg-builder/releases/tag/v2.0.0) 下载该包,或使用 Composer 安装:

$ composer require sad_spirit/pg_builder

pg_builder 可以独立使用,与 pg_wrapper 配合使用可以运行构建的查询,并实现查询参数到 Postgres 类型的透明转换。

pg_wrapper 2.0.0 版本

pg_wrapper 为 PostgreSQL 数据类型提供转换器,并提供了 PHP 原生 pgsql 扩展的面向对象封装,使用这些转换器。查询结果字段的转换通过数据库元数据自动完成,查询参数可能需要指定类型。

对于有对应原生 PHP 类型或类的数据类型,将直接使用(text -> string、timestamp -> DateTimeImmutable、hstore -> 关联数组等)。对于其他类型(几何类型、范围类型),该包提供了自定义类。

版本亮点

  • 完全支持 Postgres 14 中新增的多范围类型,使用 types\Multirange 及其派生类在 PHP 端表示值,使用 converters\containers\MultiRangeConverter 在数据库字符串表示之间转换值。

  • 支持 PHP 8.1 中对 pgsql 扩展的更改:连接和查询结果使用对象代替资源。

完整发布说明 (https://github.com/sad-spirit/pg-wrapper/blob/v2.0.0/Changelog.md)

可以从 Github (https://github.com/sad-spirit/pg-wrapper/releases/tag/v2.0.0) 下载该包,或使用 Composer 安装:

$ composer require sad_spirit/pg_wrapper