PGINTERFACE 2.0
Pod tímto názvem se skrývá céčkovská knihovna, obsahující některé užitečné funkce pro Postgresql v6.1.1. Sám autor těchto funkcí je nazývá jako 4gl SQL interface. Používá v nich služeb knihovny libpq.
Knihovna a spustitelné příklady se nacházejí na Meduse v adresáři /konig/PgInterface.
Seznam funkcí:
connectdb() - připojí se k zadané databázi
doquery() - provede sql příkaz
fetch() - vrací hodnoty
fetchwithnulls() - vrací hodnoty i s Null
disconnectdb() - odpojí se od databáze
Dále jsou k dispozici chybová přepínadla:
on_error_continue()
on_error_stop().
Příklad na využití PgInterface:
* insert.c * */
#include <stdio.h> #include <signal.h> #include <time.h> #include <libpq-fe.h> #include "halt.h" #include "pginterface.h"
int main(int argc, char **argv) \{ char query[4000]; int row =1; int aint; float afloat; double adouble; char achar[11], achar16[17], abpchar[11], avarchar[51], atext[51]; time_t aabstime;
if (argc != 2) halt("Usage: %s database\\n",argv[0]);
connectdb(argv[1],NULL,NULL,NULL,NULL);
on_error_continue(); doquery("DROP TABLE testfetch"); on_error_stop();
doquery("\\ CREATE TABLE testfetch( \\ aint int4, \\ afloat float4, \\ adouble float8, \\ achar char, \\ achar16 char16, \\ abpchar char(10), \\ avarchar varchar(50), \\ atext text, \\ aabstime abstime) \\ ");
while(1) \{ sprintf(query,"INSERT INTO testfetch VALUES ( \\ %d, \\ 2322.12, \\ '923121.0323'::float8, \\ 'A', \\ 'Betty', \\ 'Charley', \\ 'Doug', \\ 'Ernie', \\ 'now' )", row); doquery(query);
doquery("BEGIN WORK"); doquery("DECLARE c_testfetch BINARY CURSOR FOR \\ SELECT * FROM testfetch");
doquery("FETCH ALL IN c_testfetch");
while (fetch( &aint, &afloat, &adouble, achar, achar16, abpchar, avarchar, atext, &aabstime) != END_OF_TUPLES) printf("int %d\\nfloat %f\\ndouble %f\\nchar %s\\nchar16 %s\\n\\ bpchar %s\\nvarchar %s\\ntext %s\\nabstime %s", aint, afloat, adouble, achar, achar16, abpchar, avarchar, atext, ctime(&aabstime));
doquery("CLOSE c_testfetch"); doquery("COMMIT WORK"); printf("--- %-d rows inserted so far\\n",row);
row++; \}
disconnectdb(); return 0; \}