Blog

Noticias

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.

Notas completas de la versión

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 a atomic() pueden anidarse y pueden establecer callbacks que se ejecuten tras un COMMIT o ROLLBACK 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.

Notas completas de la versión

El paquete puede descargarse de Github o instalarse con Composer:

$ composer require sad_spirit/pg_wrapper

Haz clic aquí para leer la noticia original en inglés en la página web oficial de PostgreSQL.