test3.pgc 3.16 KB
Newer Older
Michael Meskes's avatar
Michael Meskes committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
exec sql include header_test;

exec sql type str is varchar[10];

int
main ()
{
	typedef struct { long born; short age; } birthinfo;
	exec sql type birthinfo is struct { long born; short age; };
exec sql begin declare section;
	struct personal_struct	{	str name;
					birthinfo birth;
				} personal;
	struct personal_indicator {	int ind_name;
					birthinfo ind_birth;
				  } ind_personal;
	int *ind_married = NULL;
	int children;
	int ind_children;
	str *married = NULL;
Michael Meskes's avatar
Michael Meskes committed
21
	char *wifesname="Petra";
Michael Meskes's avatar
Michael Meskes committed
22
	char *query="select * from meskes where name = :var1";
Michael Meskes's avatar
Michael Meskes committed
23 24 25 26 27 28 29 30 31 32 33 34
exec sql end declare section;

	exec sql declare cur cursor for
	       select name, born, age, married, children from meskes;

	char msg[128], command[128];
	FILE *dbgs;

	if ((dbgs = fopen("log", "w")) != NULL)
                ECPGdebug(1, dbgs);

	strcpy(msg, "connect");
Michael Meskes's avatar
Michael Meskes committed
35
	exec sql connect to unix:postgresql://localhost:5432/mm;
Michael Meskes's avatar
Michael Meskes committed
36 37 38 39 40

	strcpy(msg, "create");
	exec sql create table meskes(name char(8), born integer, age smallint, married date, children integer);

	strcpy(msg, "insert");
Michael Meskes's avatar
Michael Meskes committed
41
	exec sql insert into meskes(name, married, children) values (:wifesname, '19900404', 3);
Michael Meskes's avatar
Michael Meskes committed
42 43
	exec sql insert into meskes(name, born, age, married, children) values ('Michael', 19660117, 33, '19900404', 3);
	exec sql insert into meskes(name, born, age) values ('Carsten', 19910103, 8);
Michael Meskes's avatar
Michael Meskes committed
44 45
	exec sql insert into meskes(name, born, age) values ('Marc', 19930907, 6);
	exec sql insert into meskes(name, born, age) values ('Chris', 19970923, 2);
Michael Meskes's avatar
Michael Meskes committed
46 47 48 49 50 51 52 53 54 55 56

	strcpy(msg, "commit");
	exec sql commit;

	strcpy(msg, "open");
	exec sql open cur;

	exec sql whenever not found do break;

	while (1) {
		strcpy(msg, "fetch");
Michael Meskes's avatar
Michael Meskes committed
57
		exec sql fetch cur into :personal:ind_personal, :married:ind_married, :children:ind_children;
Michael Meskes's avatar
Michael Meskes committed
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
		printf("%8.8s", personal.name.arr);
		if (ind_personal.ind_birth.born >= 0)
			printf(", born %d", personal.birth.born);
		if (ind_personal.ind_birth.age >= 0)
			printf(", age = %d", personal.birth.age);
		if (ind_married >= 0)
			printf(", married %10.10s", married->arr);
		if (ind_children >= 0)
			printf(", children = %d", children);
		putchar('\n');

		free(married);
		married = NULL;
	}

	strcpy(msg, "close");
	exec sql close cur;

Michael Meskes's avatar
Michael Meskes committed
76
	/* and now a query with prepare */
Michael Meskes's avatar
Michael Meskes committed
77
	exec sql prepare MM from "select name, born, age, married, children from meskes where name = ?";
Michael Meskes's avatar
Michael Meskes committed
78 79 80
	exec sql declare prep cursor for MM;

	strcpy(msg, "open");
Michael Meskes's avatar
Michael Meskes committed
81
	exec sql open prep using :wifesname;
Michael Meskes's avatar
Michael Meskes committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

	exec sql whenever not found do break;

	while (1) {
		strcpy(msg, "fetch");
		exec sql fetch in prep into :personal:ind_personal, :married:ind_married, :children:ind_children;
		printf("%8.8s", personal.name.arr);
		if (ind_personal.ind_birth.born >= 0)
			printf(", born %d", personal.birth.born);
		if (ind_personal.ind_birth.age >= 0)
			printf(", age = %d", personal.birth.age);
		if (ind_married >= 0)
			printf(", married %10.10s", married->arr);
		if (ind_children >= 0)
			printf(", children = %d", children);
		putchar('\n');
	}

	free(married);

	strcpy(msg, "close");
	exec sql close prep;

	strcpy(msg, "drop");
	exec sql drop table meskes;

	strcpy(msg, "commit");
	exec sql commit;

	strcpy(msg, "disconnect"); 
	exec sql disconnect;
Michael Meskes's avatar
Michael Meskes committed
113

Michael Meskes's avatar
Michael Meskes committed
114 115 116 117 118
	if (dbgs != NULL)
                fclose(dbgs);

	return (0);
}