| #include <stdlib.h> |
| #include <string.h> |
| |
| exec sql include ../regression; |
| |
| exec sql whenever sqlerror stop; |
| |
| exec sql type c is char reference; |
| typedef char* c; |
| |
| exec sql type ind is union { int integer; short smallint; }; |
| typedef union { int integer; short smallint; } ind; |
| |
| #define BUFFERSIZ 8 |
| exec sql type str is varchar[BUFFERSIZ]; |
| |
| #define CURNAME "mycur" |
| |
| int |
| main (void) |
| { |
| exec sql begin declare section; |
| char *stmt1 = "SELECT id, t FROM t1"; |
| char *curname1 = CURNAME; |
| char *curname2 = CURNAME; |
| char *curname3 = CURNAME; |
| varchar curname4[50]; |
| char *curname5 = CURNAME; |
| int count; |
| int id; |
| char t[64]; |
| exec sql end declare section; |
| |
| char msg[128]; |
| |
| ECPGdebug(1, stderr); |
| |
| strcpy(msg, "connect"); |
| exec sql connect to REGRESSDB1 as test1; |
| exec sql connect to REGRESSDB2 as test2; |
| |
| strcpy(msg, "set"); |
| exec sql at test1 set datestyle to iso; |
| |
| strcpy(msg, "create"); |
| exec sql at test1 create table t1(id serial primary key, t text); |
| exec sql at test2 create table t1(id serial primary key, t text); |
| |
| strcpy(msg, "insert"); |
| exec sql at test1 insert into t1(id, t) values (default, 'a'); |
| exec sql at test1 insert into t1(id, t) values (default, 'b'); |
| exec sql at test1 insert into t1(id, t) values (default, 'c'); |
| exec sql at test1 insert into t1(id, t) values (default, 'd'); |
| exec sql at test2 insert into t1(id, t) values (default, 'e'); |
| |
| strcpy(msg, "commit"); |
| exec sql at test1 commit; |
| exec sql at test2 commit; |
| |
| /* Dynamic cursorname test with INTO list in FETCH stmts */ |
| |
| strcpy(msg, "declare"); |
| exec sql at test1 declare :curname1 cursor for |
| select id, t from t1; |
| |
| strcpy(msg, "open"); |
| exec sql at test1 open :curname1; |
| |
| strcpy(msg, "fetch from"); |
| exec sql at test1 fetch forward from :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch"); |
| exec sql at test1 fetch forward :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch 1 from"); |
| exec sql at test1 fetch 1 from :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count from"); |
| count = 1; |
| exec sql at test1 fetch :count from :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "move in"); |
| exec sql at test1 move absolute 0 in :curname1; |
| |
| strcpy(msg, "fetch 1"); |
| exec sql at test1 fetch 1 :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count"); |
| count = 1; |
| exec sql at test1 fetch :count :curname1 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "close"); |
| exec sql at test1 close :curname1; |
| |
| /* Dynamic cursorname test with INTO list in DECLARE stmt */ |
| |
| strcpy(msg, "declare"); |
| exec sql at test1 declare :curname2 cursor for |
| select id, t into :id, :t from t1; |
| |
| strcpy(msg, "open"); |
| exec sql at test1 open :curname2; |
| |
| strcpy(msg, "fetch from"); |
| exec sql at test1 fetch from :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch"); |
| exec sql at test1 fetch :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch 1 from"); |
| exec sql at test1 fetch 1 from :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count from"); |
| count = 1; |
| exec sql at test1 fetch :count from :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "move"); |
| exec sql at test1 move absolute 0 :curname2; |
| |
| strcpy(msg, "fetch 1"); |
| exec sql at test1 fetch 1 :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count"); |
| count = 1; |
| exec sql at test1 fetch :count :curname2; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "close"); |
| exec sql at test1 close :curname2; |
| |
| /* Dynamic cursorname test with PREPARED stmt */ |
| |
| strcpy(msg, "prepare"); |
| exec sql at test1 prepare st_id1 from :stmt1; |
| exec sql at test2 prepare st_id1 from :stmt1; |
| |
| strcpy(msg, "declare"); |
| exec sql at test1 declare :curname3 cursor for st_id1; |
| exec sql at test2 declare :curname5 cursor for st_id1; |
| |
| strcpy(msg, "open"); |
| exec sql at test1 open :curname3; |
| exec sql at test2 open :curname5; |
| |
| strcpy(msg, "fetch"); |
| exec sql at test2 fetch :curname5 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch from"); |
| exec sql at test1 fetch from :curname3 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch 1 from"); |
| exec sql at test1 fetch 1 from :curname3 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count from"); |
| count = 1; |
| exec sql at test1 fetch :count from :curname3 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "move"); |
| exec sql at test1 move absolute 0 :curname3; |
| |
| strcpy(msg, "fetch 1"); |
| exec sql at test1 fetch 1 :curname3 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count"); |
| count = 1; |
| exec sql at test1 fetch :count :curname3 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "close"); |
| exec sql at test1 close :curname3; |
| exec sql at test2 close :curname5; |
| |
| strcpy(msg, "deallocate prepare"); |
| exec sql at test1 deallocate prepare st_id1; |
| exec sql at test2 deallocate prepare st_id1; |
| |
| /* Dynamic cursorname test with PREPARED stmt, |
| cursor name in varchar */ |
| |
| curname4.len = strlen(CURNAME); |
| strcpy(curname4.arr, CURNAME); |
| |
| strcpy(msg, "prepare"); |
| exec sql at test1 prepare st_id2 from :stmt1; |
| |
| strcpy(msg, "declare"); |
| exec sql at test1 declare :curname4 cursor for st_id2; |
| |
| strcpy(msg, "open"); |
| exec sql at test1 open :curname4; |
| |
| strcpy(msg, "fetch from"); |
| exec sql at test1 fetch from :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch"); |
| exec sql at test1 fetch :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch 1 from"); |
| exec sql at test1 fetch 1 from :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count from"); |
| count = 1; |
| exec sql at test1 fetch :count from :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "move"); |
| exec sql at test1 move absolute 0 :curname4; |
| |
| strcpy(msg, "fetch 1"); |
| exec sql at test1 fetch 1 :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "fetch :count"); |
| count = 1; |
| exec sql at test1 fetch :count :curname4 into :id, :t; |
| printf("%d %s\n", id, t); |
| |
| strcpy(msg, "close"); |
| exec sql at test1 close :curname4; |
| |
| strcpy(msg, "deallocate prepare"); |
| exec sql at test1 deallocate prepare st_id2; |
| |
| /* End test */ |
| |
| strcpy(msg, "drop"); |
| exec sql at test1 drop table t1; |
| exec sql at test2 drop table t1; |
| |
| strcpy(msg, "commit"); |
| exec sql at test1 commit; |
| |
| strcpy(msg, "disconnect"); |
| exec sql disconnect all; |
| |
| return 0; |
| } |