ECPG - ECPG
ECPG je standardní vestavěné klientské programovací rozhraní v databázi PostgreSQL pro vkládání SQL do programů napsaných v programovacím jazyce C. Poskytuje možnost přístupu k databázi PostgreSQL přímo z kódu C v aplikaci pomocí příkazů SQL.
Používání
Použití lze rozdělit na 2 kroky. Nejprve je třeba vytvořit soubor .pgc, který se skládá z kódu C s vloženým kódem SQL . V takovém souboru bude kód SQL vložen přímo do kódu C aplikace. Příkazy SQL je třeba vložit do kódu C následujícím způsobem:
// ... C code ...
EXEC SQL <sql-statements>;
// ... C code ...
Příklad připojení k databázi:
EXEC SQL CONNECT TO databasename[@hostname][:port] [AS connectionname] [USER username];
Vložená část SQL bude zpracována pomocí preprocesoru ECPG, kde bude kód SQL nahrazen voláními knihovny ecpg (libecpg.a nebo libecpg.so). Soubor .pcg bude také předzpracován s ecpg , který jej převede na soubor .c podle standardů ANSI. V druhém kroku tedy lze vygenerovaný soubor .c přímo zkompilovat pomocí standardního kompilátoru C.
Následující příkaz vytvoří ze souboru my_c_file_with_embedded_sql_commands.pcg soubor my_c_file_with_embedded_sql_commands.c , který lze dále zpracovávat jako čistý C kód.
$ ecpg my_c_file_with_embedded_sql_commands.pcg
V git repozitáři PostgreSQL Source Code je také k dispozici zdrojový kód ecpg .
Poznámka: Při kompilaci předzpracovaného .c kódu nezapomeňte propojit knihovnu ecpg (libepcg), aby generovaná volání mohla najít své propojené metody.
Použití hostitelských proměnných
Důležitou součástí při vkládání příkazů databáze SQL do kódu aplikace je výměna dat mezi aplikací a databází. K tomuto účelu lze použít hostitelské proměnné. Hostitelské proměnné lze přímo použít z integrovaného kódu SQL, takže není třeba generovat příkazy SQL s hodnotami z kódu C ručně jako řetězec za běhu.
Za předpokladu, že v kódu C je proměnná s názvem variablename :
EXEC SQL INSERT INTO tablename VALUES (:variablename);
To lze použít v libovolném příkazu, příkaz INSERT byl zvolen pouze jako jednoduchý příklad pro ilustraci.
Výše uvedený příklad ukazuje, jak předat proměnnou C do SQL, ale data lze předávat také v opačném směru: zpět do aplikace. Následující příklad ukazuje, jak předat hodnotu z SQL zpět do proměnné C aplikace.
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR variablename;
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT columnname INTO :variablename FROM tablename;
Pro jednoduchost předpokládejme, že v názvu tabulky tabulky je pouze jeden řádek . Tento příkaz vloží hodnotu sloupce název sloupce do proměnné proměnné . Tímto způsobem lze použít každý příkaz, který podporuje klauzuli INTO , například příkaz FETCH .
Vypořádání se s chybou
Pro lepší zpracování chyb poskytuje ECPG také strukturu nazývanou komunikační oblast SQL (sqlca) . Tato struktura bude vyplněna po každém provedení příkazu sql (Každé vlákno má svou vlastní sqlca) a bude obsahovat varovné a chybové informace, např. Návratový kód. Data v sqlca budou vyplněna odpovídajícím způsobem podle odpovědi databáze a mohou být použita pro účely ladění.
Jiná rozhraní
Protože ECPG podporuje vkládání SQL do programovacího jazyka C , nepřímo také podporuje vkládání do programovacího jazyka C ++ . Části SQL jsou přeloženy do volání knihovny C. Ty jsou generovány uvnitř externí klauzule „C“ , která poskytuje propojení mezi moduly napsanými v různých programovacích jazycích. Používání ECPG s kódem C ++ má určitá omezení, protože preprocesor ECPG nerozumí konkrétní syntaxi a vyhrazeným slovům v programovacím jazyce C ++. Použití takové syntaxe a slov může vést k neočekávanému chování aplikace. Doporučuje se oddělit vložené příkazy SQL v propojeném modulu C, který bude propojen a volán z aplikace C ++.
Kromě interní ECPG jsou pro databázi PostgreSQL k dispozici také různá externí rozhraní pro C ++, Java , Lua , .NET , Node.js , Python , PHP a další , která lze přidat za účelem rozšíření možností integrovaného SQL. Existují také další databáze, které podporují integrovaný SQL, také v jiných jazycích než C, jako je Java, .NET, Fortran , COBOL , PL/I .
Reference
- ^ "Domovská stránka PostgreSQL" . PostgreSQL . Skupina globálního rozvoje PostgreSQL . Citováno 2015-06-06 .
- ^ Ahmed, Ibrar, Fayyaz, Asif a Shahzad, Amjad (27. února 2015). Příručka pro vývojáře PostgreSQL . Packt Publishing Ltd, 2015. s. 197. ISBN 978-1783989034. Citováno 6. června 2015 .Správa CS1: více jmen: seznam autorů ( odkaz )
- ^ "SQLCA" . PostgreSQL . Skupina globálního rozvoje PostgreSQL . Citováno 2018-01-23 .
- ^ "Propojení CPP" . Reference CPP . Reference CPP . Citováno 2015-06-06 .
- ^ "C ++ aplikace" . PostgreSQL . Skupina globálního rozvoje PostgreSQL . Citováno 2018-01-23 .