diff options
Diffstat (limited to 'src/interfaces/ecpg/test/complex/test3.pgc')
-rw-r--r-- | src/interfaces/ecpg/test/complex/test3.pgc | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/test/complex/test3.pgc b/src/interfaces/ecpg/test/complex/test3.pgc new file mode 100644 index 0000000000..5525fd137c --- /dev/null +++ b/src/interfaces/ecpg/test/complex/test3.pgc @@ -0,0 +1,122 @@ +/****************************************************************************/ +/* Test comment */ +/*--------------------------------------------------------------------------*/ +exec sql include header_test; +exec sql include ../regression; + +exec sql type str is varchar[10]; + +#include <stdlib.h> +#include <string.h> + +int +main (void) +{ +exec sql begin declare section; + typedef struct { long born; short age; } birthinfo; + 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, movevalue = 2; + int ind_children; + str *married = NULL; + char *wifesname="Petra"; + char *query="select * from meskes where name = ?"; +exec sql end declare section; + + exec sql declare cur cursor for + select name, born, age, married, children from meskes; + + char msg[128]; + + ECPGdebug(1, stderr); + + strcpy(msg, "connect"); + exec sql connect to REGRESSDB1; + + strcpy(msg, "create"); + exec sql create table meskes(name char(8), born integer, age smallint, married date, children integer); + + strcpy(msg, "insert"); + exec sql insert into meskes(name, married, children) values (:wifesname, '19900404', 3); + exec sql insert into meskes(name, born, age, married, children) values ('Michael', 19660117, 35, '19900404', 3); + exec sql insert into meskes(name, born, age) values ('Carsten', 19910103, 10); + exec sql insert into meskes(name, born, age) values ('Marc', 19930907, 8); + exec sql insert into meskes(name, born, age) values ('Chris', 19970923, 4); + + strcpy(msg, "commit"); + exec sql commit; + + strcpy(msg, "open"); + exec sql open cur; + + strcpy(msg, "move"); + exec sql move :movevalue in cur; + + exec sql whenever not found do break; + + while (1) { + strcpy(msg, "fetch"); + exec sql fetch from cur 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 %ld", 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; + + /* and now a query with prepare */ + exec sql prepare MM from :query; + exec sql declare prep cursor for MM; + + strcpy(msg, "open"); + exec sql open prep using :wifesname; + + 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 %ld", 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; + + return (0); +} |