发布了用于 PHP 的 pg_builder 2.0.0 和 pg_wrapper 2.0.0 包

由 Alexey Borzov 发布于 2022-01-02
相关开源

我很高兴宣布发布 pg_builderpg_wrapper 包的新版本。这些版本的主要主题是支持 Postgres 14 和 PHP 8.1

pg_builder 版本 2.0.0

pg_builder 是一个用于 Postgres 的查询构建器,由 PostgreSQL 自己的 SQL 解析器的部分 PHP 重新实现提供支持。它支持 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 错误

完整发行说明

该软件包可以从 Github 下载 或通过 Composer 安装

$ composer require sad_spirit/pg_builder

pg_builder 可以单独使用,将其与 pg_wrapper 一起使用可以运行构建的查询,并透明地将查询参数转换为 Postgres 类型。

pg_wrapper 版本 2.0.0

pg_wrapper 为 PostgreSQL 数据类型提供转换器,以及一个围绕 PHP 原生 pgsql 扩展的 OO 包装器,该包装器使用这些转换器。查询结果字段的转换使用数据库元数据自动完成,查询参数可能需要指定类型。

对于那些有相应的原生 PHP 类型或类的类型(text -> string,timestamp -> DateTimeImmutable,hstore -> 关联数组等)使用它。对于其他类型(几何类型、范围),该软件包提供自定义类。

版本亮点

  • 完全支持 Postgres 14 中添加的多范围类型,使用 types\Multirange 及其后代在 PHP 端表示值,并使用 converters\containers\MultiRangeConverter 将值转换为 DB 字符串表示形式或从中转换。
  • 支持对 PHP 8.1 中 pgsql 扩展的更改:对象用于连接和查询结果,而不是资源。

完整发行说明

该软件包可以从 Github 下载 或通过 Composer 安装

$ composer require sad_spirit/pg_wrapper