diff options
| author | Michael Meskes <meskes@postgresql.org> | 2006-09-08 09:03:40 +0000 |
|---|---|---|
| committer | Michael Meskes <meskes@postgresql.org> | 2006-09-08 09:03:40 +0000 |
| commit | 52a013bea86906bc8296781eb16deee7e281a87e (patch) | |
| tree | ba1e328a50816eff1f345357fcca47edee2de1e5 /src/interfaces/ecpg/test/preproc | |
| parent | 893632be4e17ccd791cfda17d2e99bb2312f6ff8 (diff) | |
| download | postgresql-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/Makefile | 4 | ||||
| -rw-r--r-- | src/interfaces/ecpg/test/preproc/define.pgc | 109 | ||||
| -rw-r--r-- | src/interfaces/ecpg/test/preproc/type.pgc | 78 | ||||
| -rw-r--r-- | src/interfaces/ecpg/test/preproc/variable.pgc | 97 |
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); +} |
