我很高兴地宣布 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)、INSERT、UPDATE 和 DELETE 查询的所有语法。
使用 pg_builder,可以从手动编写的查询开始,将其解析为抽象语法树,向该树添加查询部分(作为 Node 对象或字符串)或移除部分,最后将树转换回 SQL 字符串。
版本亮点
支持 Postgres 14 的新语法:大多数关键字可以不带 AS 用作列别名;GROUP BY 的 DISTINCT 子句;公共表表达式的 SEARCH 和 CYCLE 子句;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