Lanzamiento de los paquetes pg_builder 1.0.0 y pg_wrapper 1.0.0 para PHP
Me complace anunciar las primeras versiones estables de los paquetes pg_builder y pg_wrapper.
Ambos paquetes, que ahora requieren PHP 7.2+, han sido probados y están soportados en PHP 8 y han superado el análisis de código estático con las herramientas phpstan y psalm.
pg_builder versión 1.0.0
pg_builder es un generador de consultas para Postgres respaldado por una reimplementación parcial en PHP del propio analizador SQL de PostgreSQL. Soporta casi toda la sintaxis disponible en Postgres 13 para consultas SELECT
(y VALUES
), INSERT
, UPDATE
y DELETE
.
Con pg_builder es posible empezar con una consulta escrita manualmente, analizarla en un Árbol de Sintaxis Abstracta, añadir partes de la consulta (ya sea como objetos nodo o como cadenas) al árbol o eliminarlas, y finalmente convertir nuevamente el árbol en una cadena SQL.
Lo más destacado de la versión
- Se ha implementado la compatibilidad con los escapes Unicode en cadenas e identificadores.
- Se ha corregido el análisis sintáctico de las construcciones tipo función en la cláusula
FROM
. - Al generar SQL, es posible apuntar a PDO en lugar de a la extensión pg_wrapper / pgsql nativa.
- Mejoras sustanciales en el rendimiento, especialmente al utilizar la caché para almacenar las consultas analizadas.
El paquete puede descargarse de Github o instalarse con Composer:
$ composer require sad_spirit/pg_builder
Aunque pg_builder puede ser utilizado de forma independiente, su uso junto con pg_wrapper permite ejecutar consultas generadas con una conversión transparente de los parámetros de consulta a los tipos de Postgres.
pg_wrapper versión 1.0.0
pg_wrapper proporciona convertidores para los tipos de datos de PostgreSQL y un wrapper OO alrededor de la extensión nativa de PHP pgsql que utiliza estos convertidores. La conversión de los campos de los resultados de la consulta se realiza automáticamente mediante los metadatos de la base de datos. Los parámetros de la consulta pueden requerir la especificación del tipo.
Se utiliza para aquellos tipos que cuentan con un tipo o clase nativa de PHP correspondiente (text -> string, timestamp -> DateTimeImmutable, hstore -> associative array, etc.). Para los demás tipos (tipos geométricos, rangos) el paquete proporciona clases personalizadas.
Lo más destacado de la versión
- Los metadatos de los tipos se rellenan previamente con los tipos de datos integrados en PostgreSQL. La carga de los metadatos desde la base de datos / caché sólo será necesaria cuando se utilicen tipos personalizados.
- El método
Connection::atomic()
acepta declaraciones de tipo callable y las ejecuta de forma atómica. Las llamadas aatomic()
pueden anidarse y pueden establecer callbacks que se ejecuten tras unCOMMIT
oROLLBACK
final. - Subclases de excepciones especializadas que se generan en caso de errores en la base de datos, en función del código de error
SQLSTATE
. - Los objetos que representan tipos de bases de datos son ahora inmutables.
El paquete puede descargarse de Github o instalarse con Composer:
$ composer require sad_spirit/pg_wrapper