#include #include #include #include /* just a test comment */ exec sql whenever sqlerror do PrintAndStop(msg); exec sql whenever sqlwarning do warn(); static void PrintAndStop(char *msg) { fprintf(stderr, "Error in statement '%s':\n", msg); sqlprint(); exit(-1); } static void warn(void) { fprintf(stderr, "Warning: At least one column was truncated\n"); } /* comment */ exec sql define AMOUNT 6; exec sql define NAMELEN 8; exec sql type intarray is int[AMOUNT]; typedef int intarray[AMOUNT]; int main(void) { exec sql begin declare section; exec sql ifdef NAMELEN; typedef char string[NAMELEN]; intarray amount; int increment=100; char name[AMOUNT][NAMELEN]; char letter[AMOUNT][1]; struct name_letter_struct { char name[NAMELEN]; int amount; char letter; } name_letter[AMOUNT]; exec sql endif; struct ind_struct { short a; short b; short c; } ind[AMOUNT]; char command[128]; char *connection="pm"; int how_many; char *user="postgres"; exec sql end declare section; exec sql var name is string[AMOUNT]; char msg[128]; FILE *dbgs; int i,j; if ((dbgs = fopen("log", "w")) != NULL) ECPGdebug(1, dbgs); strcpy(msg, "connect"); exec sql connect to mm as main; strcpy(msg, "connect"); exec sql connect to pm user :user; strcpy(msg, "create"); exec sql at main create table "Test" (name char(NAMELEN), amount int, letter char(1)); exec sql create table "Test" (name char(NAMELEN), amount int, letter char(1)); strcpy(msg, "commit"); exec sql at main commit; exec sql commit; strcpy(msg, "set connection"); exec sql set connection to main; strcpy(msg, "execute insert 1"); sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: ''mm''', 1, 'f')"); exec sql execute immediate :command; printf("New tuple got OID = %ld\n", sqlca.sqlerrd[1]); sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: ''mm''', 2, 't')"); exec sql execute immediate :command; strcpy(msg, "execute insert 2"); sprintf(command, "insert into \"Test\" (name, amount, letter) values ('db: ''pm''', 1, 'f')"); exec sql at pm execute immediate :command; strcpy(msg, "execute insert 3"); sprintf(command, "insert into \"Test\" (name, amount, letter) select name, amount+10, letter from \"Test\""); exec sql execute immediate :command; printf("Inserted %ld tuples via execute immediate\n", sqlca.sqlerrd[2]); strcpy(msg, "execute insert 4"); sprintf(command, "insert into \"Test\" (name, amount, letter) select name, amount+?, letter from \"Test\""); exec sql prepare I from :command; exec sql at pm execute I using :increment; printf("Inserted %ld tuples via prepared execute\n", sqlca.sqlerrd[2]); strcpy(msg, "commit"); exec sql commit; /* Start automatic transactioning for connection pm. */ exec sql at pm set autocommit to on; exec sql at pm begin transaction; strcpy(msg, "select"); exec sql select * into :name, :amount, :letter from "Test"; printf("Database: mm\n"); for (i=0, how_many=j=sqlca.sqlerrd[2]; i