#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 type intarray is int[AMOUNT]; exec sql type string is char(8); typedef int intarray[AMOUNT]; int main () { exec sql begin declare section; intarray amount; int increment=100; char name[AMOUNT][8]; char letter[AMOUNT][1]; struct name_letter_struct { char name[8]; int amount; char letter; } name_letter[AMOUNT]; struct ind_struct { short a; short b; short c; } ind[AMOUNT]; char command[128]; char *connection="pm"; 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; strcpy(msg, "create"); exec sql at main create table "Test" (name char(8), amount int, letter char(1)); exec sql create table "Test" (name char(8), 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, j=sqlca.sqlerrd[2]; i