Articulo de referencia

ECPG

ECPG es la interfaz de programación de cliente estándar, integrada en la base de datos PostgreSQL , para incorporar SQL en programas escritos en el lenguaje de programación C. [...

ECPG es la interfaz de programación de cliente estándar, integrada en la base de datos PostgreSQL , para incorporar SQL en programas escritos en el lenguaje de programación C. [ 1 ] Proporciona la opción de acceder a la base de datos PostgreSQL directamente desde el código C de la aplicación, utilizando comandos SQL.

Uso

El uso se puede dividir en dos pasos. Primero, se debe crear un archivo .pcg , que consta de código C con código SQL incrustado . En dicho archivo, el código SQL se insertará directamente en el código C de la aplicación. Los comandos SQL deben insertarse en el código C de la siguiente manera:

// ... código C ... EJECUTAR SQL <sentencias SQL>; // ... código C ... 

Un ejemplo de cómo conectarse a una base de datos:

EXEC SQL CONNECT TO databasename [ @ hostname ][: port ] [ AS connectionname ] [ USER username ];

La parte SQL integrada se procesará mediante el preprocesador ECPG, donde el código SQL se reemplazará con llamadas a la biblioteca ecpg (libecpg.a o libecpg.so). El archivo .pcg también se preprocesará con ecpg , que lo convierte a un archivo .c según los estándares ANSI. Por lo tanto, en el segundo paso, el archivo .c generado se puede compilar directamente con un compilador C estándar. [ 2 ]

El siguiente comando creará, a partir del archivo my_c_file_with_embedded_sql_commands.pcg , un archivo my_c_file_with_embedded_sql_commands.c , que podrá procesarse posteriormente como código C puro.

$ ecpg mi_archivo_c_con_comandos_sql_integrados.pcg 

También está disponible el código fuente de ecpg en el repositorio git de código fuente de PostgreSQL .

Nota: Al compilar el código .c preprocesado, no olvide enlazar la biblioteca ecpg (libepcg), para que las llamadas generadas puedan encontrar sus métodos enlazados.

Utilizando variables de host

Un aspecto importante al integrar comandos de base de datos SQL en el código de una aplicación es el intercambio de datos entre la aplicación y la base de datos. Para ello, se pueden utilizar variables de host. Estas variables se pueden usar directamente desde el código SQL integrado, eliminando la necesidad de generar manualmente sentencias SQL con valores del código C como cadenas de texto durante la ejecución.

Suponiendo que existe una variable llamada variablename en su código C:

EXEC SQL INSERT INTO tablename VALUES (: variablename );

Esto se puede utilizar en cualquier instrucción; la instrucción INSERT se eligió simplemente como un ejemplo sencillo para ilustrarlo.

El ejemplo anterior muestra cómo pasar una variable de C a SQL, pero también se pueden pasar datos en sentido contrario: de vuelta a la aplicación. El siguiente ejemplo muestra cómo pasar un valor de SQL a una variable de C de la aplicación.

EXEC SQL BEGIN DECLARE SECTION ; VARCHAR nombre_variable ; EXEC SQL END DECLARE SECTION ;EXEC SQL SELECT nombre_columna INTO : nombre_variable FROM nombre_tabla ;

Para simplificar, supongamos que solo hay una fila en la tabla . Esta instrucción insertará el valor de la columna en la variable . Cualquier comando que admita la cláusula INTO puede usarse de esta manera, por ejemplo, el comando FETCH .

Manejo de errores

Para una mejor gestión de errores, ECPG también proporciona una estructura denominada área de comunicación SQL (sqlca) . Esta estructura se rellena después de cada ejecución de una instrucción SQL (cada hilo tiene su propia sqlca [ 3 ] ) y contiene información de advertencia y error, como el código de retorno. Los datos de sqlca se rellenan según la respuesta de la base de datos y pueden utilizarse para la depuración.

Otras interfaces

Dado que ECPG admite la incrustación de SQL en el lenguaje de programación C , también admite indirectamente la incrustación en el lenguaje de programación C++ . Las partes SQL se traducen en llamadas a la biblioteca C. Estas se generan dentro de una cláusula extern "C" , que proporciona enlace entre módulos escritos en diferentes lenguajes de programación. [ 4 ] El uso de ECPG con código C++ tiene algunas limitaciones, ya que el preprocesador ECPG no comprende la sintaxis específica ni las palabras reservadas en el lenguaje de programación C++ . El uso de dicha sintaxis y palabras puede provocar un comportamiento inesperado de la aplicación. Se recomienda separar los comandos SQL incrustados en un módulo C enlazado, que se enlazará y llamará desde la aplicación C++. [ 5 ]

Además del ECPG interno, existen diversas interfaces externas para C++, Java , Lua , .NET , Node.js , Python , PHP y otras disponibles para la base de datos PostgreSQL , que se pueden agregar para ampliar las opciones de SQL integrado. También existen otras bases de datos que admiten SQL integrado, incluso en otros lenguajes además de C, como Java, .NET, Fortran , COBOL y PL/I .

Referencias

  1. "Página principal de PostgreSQL" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 6 de junio de 2015 .
  2. Ahmed, Ibrar, Fayyaz, Asif y Shahzad, Amjad (27 de febrero de 2015). Guía del desarrollador de PostgreSQL . Packt Publishing Ltd, 2015. pág. 197. ISBN  978-1783989034Consultado el 6 de junio de 2015 .{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
  3. "SQLCA" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 23 de enero de 2018 .
  4. "Vínculo CPP" . Referencia CPP . Referencia CPP . Consultado el 06/06/2015 .
  5. "Aplicaciones C++" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 23 de enero de 2018 .
  • Documentación de PostgreSQL - ECPG - SQL embebido en C