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;
\}