我很高兴地宣布 pg_builder 和 pg_wrapper 包的第一个稳定版本发布。
这两个包现在需要 PHP 7.2+,并且支持 PHP 8,并已通过 phpstan 和 psalm 工具的静态代码分析。
pg_builder 是一个用于 Postgres 的查询构建器,它部分 PHP 重实现了 PostgreSQL 自己的 SQL 解析器。它支持 Postgres 13 中几乎所有的 SELECT
(和 VALUES
)、INSERT
、UPDATE
和 DELETE
查询的语法。
使用 pg_builder,您可以从手动编写的查询开始,将其解析为抽象语法树(AST),然后向该树添加查询部分(可以是 Node 对象或字符串)或移除它们,最后将树转换回 SQL 字符串。
发行亮点
FROM
子句中函数类结构的解析。该包可以从 Github 下载 或使用 Composer 安装
$ composer require sad_spirit/pg_builder
pg_builder 可以独立使用,将其与 pg_wrapper 一起使用可以运行构建的查询,并能透明地将查询参数转换为 Postgres 类型。
pg_wrapper 提供了 PostgreSQL 数据类型的转换器,以及一个围绕 PHP 原生 pgsql 扩展的面向对象的封装,该封装使用了这些转换器。查询结果字段的转换是自动完成的,利用数据库元数据;查询参数可能需要指定类型。
对于有对应原生 PHP 类型或类的类型,将使用它们(text -> string,timestamp -> DateTimeImmutable,hstore -> 关联数组等)。对于其他类型(几何类型、范围类型),该包提供了自定义类。
发行亮点
Connection::atomic()
方法接受一个可调用对象并以原子方式执行它。atomic()
调用可以嵌套,并且可以设置在最终 COMMIT
或 ROLLBACK
之后执行的回调。SQLSTATE
错误代码在数据库错误时抛出。该包可以从 Github 下载 或使用 Composer 安装
$ composer require sad_spirit/pg_wrapper