針對 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 wrapper,它使用這些轉換器。 查詢結果欄位的轉換使用資料庫元資料自動完成,查詢參數可能需要指定類型。

對於那些提供相應原生 PHP 類型或類別的類型,將使用它(text -> string,timestamp -> DateTimeImmutable,hstore -> 關聯陣列等)。 對於其他類型(幾何類型、範圍),該套件提供自定義類別。

版本重點

  • 完全支援 Postgres 14 中新增的 multirange 類型,使用 types\Multirange 及其後代來表示 PHP 端的數值,並使用 converters\containers\MultiRangeConverter 將數值轉換為 DB 字串表示形式以及從 DB 字串表示形式轉換。
  • 支援在 PHP 8.1 中對 pgsql 擴展所做的更改:物件用於代替連接和查詢結果的資源。

完整發行說明

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

$ composer require sad_spirit/pg_wrapper