summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/preproc
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2006-09-08 09:03:40 +0000
committerMichael Meskes <meskes@postgresql.org>2006-09-08 09:03:40 +0000
commit52a013bea86906bc8296781eb16deee7e281a87e (patch)
treeba1e328a50816eff1f345357fcca47edee2de1e5 /src/interfaces/ecpg/test/preproc
parent893632be4e17ccd791cfda17d2e99bb2312f6ff8 (diff)
downloadpostgresql-52a013bea86906bc8296781eb16deee7e281a87e.tar.gz
More logic from complex/test* moved to their own testcases.
Diffstat (limited to 'src/interfaces/ecpg/test/preproc')
-rw-r--r--src/interfaces/ecpg/test/preproc/Makefile4
-rw-r--r--src/interfaces/ecpg/test/preproc/define.pgc109
-rw-r--r--src/interfaces/ecpg/test/preproc/type.pgc78
-rw-r--r--src/interfaces/ecpg/test/preproc/variable.pgc97
4 files changed, 231 insertions, 57 deletions
diff --git a/src/interfaces/ecpg/test/preproc/Makefile b/src/interfaces/ecpg/test/preproc/Makefile
index 2184beb187..005bc33598 100644
--- a/src/interfaces/ecpg/test/preproc/Makefile
+++ b/src/interfaces/ecpg/test/preproc/Makefile
@@ -5,7 +5,9 @@ include $(top_srcdir)/$(subdir)/../Makefile.regress
TESTS = define define.c \
- init init.c
+ init init.c \
+ type type.c \
+ variable variable.c
all: $(TESTS)
diff --git a/src/interfaces/ecpg/test/preproc/define.pgc b/src/interfaces/ecpg/test/preproc/define.pgc
index 1a4ac7444b..aa404b2ea6 100644
--- a/src/interfaces/ecpg/test/preproc/define.pgc
+++ b/src/interfaces/ecpg/test/preproc/define.pgc
@@ -1,64 +1,61 @@
-#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
-EXEC SQL include ../regression;
+exec sql include ../regression;
-EXEC SQL typedef long mmInteger;
-EXEC SQL typedef char mmChar;
-EXEC SQL typedef short mmSmallInt;
+exec sql whenever sqlerror sqlprint;
-EXEC SQL BEGIN DECLARE SECTION;
-struct TBempl
-{
- mmInteger idnum;
- mmChar name[21];
- mmSmallInt accs;
-};
-EXEC SQL END DECLARE SECTION;
+exec sql define AMOUNT 6;
+exec sql define NAMELEN 8;
+
+exec sql type intarray is int[AMOUNT];
+typedef int intarray[AMOUNT];
int
-main (void)
+main(void)
{
- EXEC SQL BEGIN DECLARE SECTION;
- struct TBempl empl;
- EXEC SQL END DECLARE SECTION;
-
- ECPGdebug (1, stderr);
-
- empl.idnum = 1;
- EXEC SQL connect to REGRESSDB1;
- if (sqlca.sqlcode)
- {
- printf ("connect error = %ld\n", sqlca.sqlcode);
- exit (sqlca.sqlcode);
- }
-
- EXEC SQL create table empl
- (idnum integer, name char (20), accs smallint);
- if (sqlca.sqlcode)
- {
- printf ("create error = %ld\n", sqlca.sqlcode);
- exit (sqlca.sqlcode);
- }
-
- EXEC SQL insert into empl values (1, 'first user', 320);
- if (sqlca.sqlcode)
- {
- printf ("insert error = %ld\n", sqlca.sqlcode);
- exit (sqlca.sqlcode);
- }
-
- EXEC SQL select idnum, name, accs
- into :empl
- from empl
- where idnum =:empl.idnum;
- if (sqlca.sqlcode)
- {
- printf ("select error = %ld\n", sqlca.sqlcode);
- exit (sqlca.sqlcode);
- }
- printf ("id=%ld name=%s, accs=%d\n", empl.idnum, empl.name, empl.accs);
-
- EXEC SQL disconnect;
- exit (0);
+exec sql begin declare section;
+exec sql ifdef NAMELEN;
+ typedef char string[NAMELEN];
+ intarray amount;
+ char name[AMOUNT][NAMELEN];
+ char letter[AMOUNT][1];
+#if 0
+ int not_used;
+#endif
+exec sql endif;
+exec sql end declare section;
+ int i,j;
+
+ ECPGdebug(1, stderr);
+
+ exec sql connect to REGRESSDB1;
+
+ exec sql create table test (name char(NAMELEN), amount int, letter char(1));
+ exec sql commit;
+
+ exec sql insert into Test (name, amount, letter) values ('false', 1, 'f');
+ exec sql insert into test (name, amount, letter) values ('true', 2, 't');
+ exec sql commit;
+
+ exec sql select * into :name, :amount, :letter from test;
+
+ for (i=0, j=sqlca.sqlerrd[2]; i<j; i++)
+ {
+ exec sql begin declare section;
+ char n[8], l = letter[i][0];
+ int a = amount[i];
+ exec sql end declare section;
+
+ strncpy(n, name[i], NAMELEN);
+ printf("name[%d]=%8.8s\tamount[%d]=%d\tletter[%d]=%c\n", i, n, i, a, i, l);
+ }
+
+ exec sql drop table test;
+ exec sql commit;
+ exec sql disconnect;
+
+ return (0);
}
diff --git a/src/interfaces/ecpg/test/preproc/type.pgc b/src/interfaces/ecpg/test/preproc/type.pgc
new file mode 100644
index 0000000000..33ebcb77bb
--- /dev/null
+++ b/src/interfaces/ecpg/test/preproc/type.pgc
@@ -0,0 +1,78 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+EXEC SQL include ../regression;
+
+EXEC SQL typedef long mmInteger;
+EXEC SQL typedef char mmChar;
+EXEC SQL typedef short mmSmallInt;
+
+exec sql type string is char[11];
+typedef char string[11];
+
+exec sql type c is char reference;
+typedef char* c;
+
+EXEC SQL BEGIN DECLARE SECTION;
+struct TBempl
+{
+ mmInteger idnum;
+ mmChar name[21];
+ mmSmallInt accs;
+};
+EXEC SQL END DECLARE SECTION;
+
+int
+main (void)
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ struct TBempl empl;
+ string str;
+ c ptr = NULL;
+ struct varchar_vc
+ {
+ int len;
+ char text[10];
+ } vc;
+ EXEC SQL END DECLARE SECTION;
+
+ EXEC SQL var vc is varchar[10];
+ ECPGdebug (1, stderr);
+
+ empl.idnum = 1;
+ EXEC SQL connect to REGRESSDB1;
+ if (sqlca.sqlcode)
+ {
+ printf ("connect error = %ld\n", sqlca.sqlcode);
+ exit (sqlca.sqlcode);
+ }
+
+ EXEC SQL create table empl
+ (idnum integer, name char(20), accs smallint, string1 char(10), string2 char(10), string3 char(10));
+ if (sqlca.sqlcode)
+ {
+ printf ("create error = %ld\n", sqlca.sqlcode);
+ exit (sqlca.sqlcode);
+ }
+
+ EXEC SQL insert into empl values (1, 'user name', 320, 'first str', 'second str', 'third str');
+ if (sqlca.sqlcode)
+ {
+ printf ("insert error = %ld\n", sqlca.sqlcode);
+ exit (sqlca.sqlcode);
+ }
+
+ EXEC SQL select idnum, name, accs, string1, string2, string3
+ into :empl, :str, :ptr, :vc
+ from empl
+ where idnum =:empl.idnum;
+ if (sqlca.sqlcode)
+ {
+ printf ("select error = %ld\n", sqlca.sqlcode);
+ exit (sqlca.sqlcode);
+ }
+ printf ("id=%ld name='%s' accs=%d str='%s' ptr='%s' vc='%10.10s'\n", empl.idnum, empl.name, empl.accs, str, ptr, vc.text);
+
+ EXEC SQL disconnect;
+ exit (0);
+}
diff --git a/src/interfaces/ecpg/test/preproc/variable.pgc b/src/interfaces/ecpg/test/preproc/variable.pgc
new file mode 100644
index 0000000000..01594911dd
--- /dev/null
+++ b/src/interfaces/ecpg/test/preproc/variable.pgc
@@ -0,0 +1,97 @@
+#include <stdlib.h>
+#include <string.h>
+
+exec sql include ../regression;
+
+exec sql whenever sqlerror sqlprint;
+
+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];
+
+exec sql declare cur cursor for
+ select name, born, age, married, children from family;
+
+int
+main (void)
+{
+ exec sql struct birthinfo { long born; short age; };
+exec sql begin declare section;
+ struct personal_struct { str name;
+ struct birthinfo birth;
+ } personal, *p;
+ struct personal_indicator { int ind_name;
+ struct birthinfo ind_birth;
+ } ind_personal, *i;
+ ind ind_children;
+exec sql end declare section;
+
+ exec sql char *married = NULL;
+ exec sql long ind_married;
+ exec sql ind children;
+
+ char msg[128];
+
+ ECPGdebug(1, stderr);
+
+ strcpy(msg, "connect");
+ exec sql connect to REGRESSDB1;
+
+ strcpy(msg, "create");
+ exec sql create table family(name char(8), born integer, age smallint, married date, children integer);
+
+ strcpy(msg, "insert");
+ exec sql insert into family(name, married, children) values ('Mum', '19870714', 3);
+ exec sql insert into family(name, born, married, children) values ('Dad', '19610721', '19870714', 3);
+ exec sql insert into family(name, age) values ('Child 1', 16);
+ exec sql insert into family(name, age) values ('Child 2', 14);
+ exec sql insert into family(name, age) values ('Child 3', 9);
+
+ strcpy(msg, "commit");
+ exec sql commit;
+
+ strcpy(msg, "open");
+ exec sql open cur;
+
+ exec sql whenever not found do break;
+
+ p=&personal;
+ i=&ind_personal;
+ memset(i, 0, sizeof(ind_personal));
+ while (1) {
+ strcpy(msg, "fetch");
+ exec sql fetch cur into :p:i, :married:ind_married, :children.integer:ind_children.smallint;
+ printf("%8.8s", personal.name.arr);
+ if (i->ind_birth.born >= 0)
+ printf(", born %ld", personal.birth.born);
+ if (i->ind_birth.age >= 0)
+ printf(", age = %d", personal.birth.age);
+ if (ind_married >= 0)
+ printf(", married %s", married);
+ if (ind_children.smallint >= 0)
+ printf(", children = %d", children.integer);
+ putchar('\n');
+
+ free(married);
+ married = NULL;
+ }
+
+ strcpy(msg, "close");
+ exec sql close cur;
+
+ strcpy(msg, "drop");
+ exec sql drop table family;
+
+ strcpy(msg, "commit");
+ exec sql commit;
+
+ strcpy(msg, "disconnect");
+ exec sql disconnect;
+
+ return (0);
+}