summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/complex/test3.pgc
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/complex/test3.pgc')
-rw-r--r--src/interfaces/ecpg/test/complex/test3.pgc122
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);
+}