針對 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 類型或類別的類型,將使用它(text -> string, timestamp -> DateTimeImmutable, hstore -> 關聯陣列等等)。對於其他類型(幾何類型、範圍),該套件提供了自訂類別。

版本重點

  • 類型元數據已預先填入 PostgreSQL 的內建資料類型。 僅在使用自訂類型時才需要從 DB / 快取載入元數據。
  • Connection::atomic() 方法,它接受一個可呼叫物件並以原子方式執行它。 atomic() 呼叫可以巢狀,並且可以設定在最終 COMMITROLLBACK 之後執行的回呼。
  • 基於 SQLSTATE 錯誤代碼在資料庫錯誤時拋出的特殊異常子類別。
  • 現在表示資料庫類型的物件是不可變的。

完整版本說明

該套件可以從 Github 下載 或使用 Composer 安裝

$ composer require sad_spirit/pg_wrapper