适用于 PHP 的 pg_builder 1.0.0 和 pg_wrapper 1.0.0 软件包已发布

由 Alexey Borzov 于 2021-07-06 发布
相关开源

我很高兴地宣布 pg_builderpg_wrapper 软件包的首次稳定版本发布。

这两个软件包现在都需要 PHP 7.2+,在 PHP 8 上进行了测试和支持,并通过了 phpstan 和 psalm 工具的静态代码分析。

pg_builder 版本 1.0.0

pg_builder 是一个用于 Postgres 的查询构建器,它由 PostgreSQL 自己的 SQL 解析器的部分 PHP 重新实现提供支持。它支持 Postgres 13 中几乎所有可用于 SELECT(和 VALUES)、INSERTUPDATEDELETE 查询的语法。

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

版本亮点

  • 实现了对字符串和标识符中 Unicode 转义的支持。
  • 修复了 FROM 子句中类函数结构的解析。
  • 生成 SQL 时,可以面向 PDO 而不是 pg_wrapper / 原生 pgsql 扩展。
  • 显著的性能改进,尤其是在使用缓存存储解析的查询时。

完整发行说明

该软件包可以从 Github 下载 或使用 Composer 安装

$ composer require sad_spirit/pg_builder

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

pg_wrapper 版本 1.0.0

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

对于那些有相应的原生 PHP 类型或类的类型,它会使用这些类型(文本 -> 字符串,时间戳 -> DateTimeImmutable,hstore -> 关联数组等)。对于其他类型(几何类型,范围),该软件包提供了自定义类。

版本亮点

  • 类型元数据预先填充了 PostgreSQL 的内置数据类型。只有在使用自定义类型时才需要从数据库/缓存加载元数据。
  • Connection::atomic() 方法,它接受一个可调用对象并以原子方式执行它。atomic() 调用可以嵌套,并且可以设置在最终 COMMITROLLBACK 后执行的回调。
  • 基于 SQLSTATE 错误代码抛出的数据库错误专用异常子类。
  • 表示数据库类型的对象现在是不可变的。

完整发行说明

该软件包可以从 Github 下载 或使用 Composer 安装

$ composer require sad_spirit/pg_wrapper