ECPG es la interfaz de programación de cliente estándar incorporada en la base de datos PostgreSQL para incrustar 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 en la aplicación, usando comandos SQL.
Uso
El uso se puede dividir en 2 pasos. Primero, se debe crear un archivo .pgc, que consiste en 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 ... EXEC SQL < sql - sentencias > ; // ... código C ...
Un ejemplo de cómo conectarse a una base de datos:
EXEC SQL CONNECT TO nombre de la base de datos [ @ nombre de host ] [: puerto ] [ AS nombre de conexión ] [ nombre de usuario del USUARIO ];
La parte de SQL incorporado se procesará a través del preprocesador ECPG donde el código SQL se reemplazará con las llamadas a la biblioteca ecpg (libecpg.a o libecpg.so). El archivo .pcg también se procesará previamente con ecpg , que lo convierte en un archivo .c de acuerdo con 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 se puede seguir procesando como un código C puro.
$ ecpg my_c_file_with_embedded_sql_commands.pcg
También hay código fuente del ecpg disponible en el repositorio git de código fuente de PostgreSQL .
Nota: Mientras compila el código .c preprocesado, no olvide vincular la biblioteca ecpg (libepcg), para que las llamadas generadas puedan encontrar sus métodos vinculados.
Usar variables de host
Una parte importante al incorporar comandos de base de datos SQL en el código de la aplicación es el intercambio de datos entre la aplicación y la base de datos. Para este propósito, se pueden utilizar variables del lenguaje principal. Las variables de host se pueden usar directamente desde el código SQL incorporado, por lo que no es necesario generar declaraciones SQL con valores del código C manualmente como una cadena en el tiempo de ejecución.
Suponiendo que hay una variable llamada variablename en su código C:
EXEC SQL INSERT INTO tablename VALUES (: variablename );
Esto se puede usar en cualquier declaración, la declaración INSERT se eligió solo como un ejemplo simple para la ilustración.
El ejemplo anterior muestra cómo pasar una variable C al SQL, pero los datos también se pueden pasar en la dirección opuesta: de vuelta a la aplicación. El siguiente ejemplo muestra cómo pasar un valor de SQL a la variable C de la aplicación.
EXEC SQL BEGIN DECLARE SECTION ; VARCHAR nombre de variable ; EXEC SQL END DECLARE SECTION ;EXEC SQL SELECT nombre de columna INTO : nombre de variable FROM nombre de tabla ;
Para simplificar, supongamos que solo hay una fila en el nombre de la tabla . Esta declaración insertará el valor de la columna nombre de columna en la variable variable . Todos los comandos que admiten la cláusula INTO se pueden utilizar de esta manera, por ejemplo, el comando FETCH .
Manejo de errores
Para un mejor manejo de errores, ECPG también proporciona una estructura llamada área de comunicación SQL (sqlca) . Esta estructura se llenará después de cada ejecución de la instrucción sql (cada hilo tiene su propia sqlca [3] ) y contiene información de advertencia y error, por ejemplo, el código de retorno. Los datos en sqlca se completarán de acuerdo con la respuesta de la base de datos y se pueden usar con fines de 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 de SQL se traducen en llamadas de biblioteca C. Estos se generan dentro de una cláusula "C" externa , que proporciona un enlace entre módulos escritos en diferentes lenguajes de programación. [4] El uso de ECPG con el código C ++ tiene algunas limitaciones, ya que el preprocesador de ECPG no comprende la sintaxis específica y 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 integrados en un módulo C vinculado, que se vinculará y se llamará desde la aplicación C ++. [5]
Además del ECPG interno, también existen diferentes 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 embebido. También hay otras bases de datos que el apoyo de SQL incorporado, también en otros idiomas aparte del C tales como Java, .NET, Fortran , COBOL , PL / I .
Referencias
- ^ "Página de inicio de PostgreSQL" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 6 de junio de 2015 .
- ^ 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-1783989034. Consultado el 6 de junio de 2015 .CS1 maint: varios nombres: lista de autores ( enlace )
- ^ "SQLCA" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 23 de enero de 2018 .
- ^ "Enlace CPP" . Referencia CPP . Referencia CPP . Consultado el 6 de junio de 2015 .
- ^ "Aplicaciones C ++" . PostgreSQL . El Grupo de Desarrollo Global de PostgreSQL . Consultado el 23 de enero de 2018 .