diff options
Diffstat (limited to 'src/interfaces/ecpg/test/sql')
-rw-r--r-- | src/interfaces/ecpg/test/sql/Makefile | 16 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/sql/array.pgc | 77 | ||||
-rw-r--r-- | src/interfaces/ecpg/test/sql/binary.pgc | 85 |
3 files changed, 173 insertions, 5 deletions
diff --git a/src/interfaces/ecpg/test/sql/Makefile b/src/interfaces/ecpg/test/sql/Makefile index 381ff6bc6c6..f44ec6a297c 100644 --- a/src/interfaces/ecpg/test/sql/Makefile +++ b/src/interfaces/ecpg/test/sql/Makefile @@ -3,18 +3,24 @@ top_builddir = ../../../../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/$(subdir)/../Makefile.regress -TESTS = define define.c \ - dyntest dyntest.c \ - code100 code100.c \ +TESTS = array array.c \ + binary binary.c \ + code100 code100.c \ + copystdout copystdout.c \ + define define.c \ desc desc.c \ + dyntest dyntest.c \ dynalloc dynalloc.c \ dynalloc2 dynalloc2.c \ func func.c \ indicators indicators.c \ quote quote.c \ show show.c \ - update update.c \ - copystdout copystdout.c + update update.c all: $(TESTS) +# bits needs the -c option for the "EXEC SQL TYPE" construct +bits.c: bits.pgc ../regression.h + $(ECPG) -c -o $@ -I$(srcdir) $< + diff --git a/src/interfaces/ecpg/test/sql/array.pgc b/src/interfaces/ecpg/test/sql/array.pgc new file mode 100644 index 00000000000..2444e0158be --- /dev/null +++ b/src/interfaces/ecpg/test/sql/array.pgc @@ -0,0 +1,77 @@ +#include <locale.h> +#include <string.h> +#include <stdlib.h> + +exec sql whenever sqlerror sqlprint; + +exec sql include sqlca; +exec sql include ../regression; + +int +main (void) +{ +EXEC SQL BEGIN DECLARE SECTION; + int i = 1; + int *did = &i; + int a[10] = {9,8,7,6,5,4,3,2,1,0}; + char text[25] = "klmnopqrst"; + char *t = (char *)malloc(11); + double f; +EXEC SQL END DECLARE SECTION; + + strcpy(t, "0123456789"); + setlocale(LC_ALL, "C"); + + ECPGdebug(1, stderr); + + EXEC SQL CONNECT TO REGRESSDB1; + + EXEC SQL SET AUTOCOMMIT = ON; + + EXEC SQL BEGIN WORK; + + EXEC SQL CREATE TABLE test (f float, i int, a int[10], text char(10)); + + EXEC SQL INSERT INTO test(f,i,a,text) VALUES(404.90,3,'{0,1,2,3,4,5,6,7,8,9}','abcdefghij'); + + EXEC SQL INSERT INTO test(f,i,a,text) VALUES(140787.0,2,:a,:text); + + EXEC SQL INSERT INTO test(f,i,a,text) VALUES(14.07,:did,:a,:t); + + EXEC SQL COMMIT; + + EXEC SQL BEGIN WORK; + + EXEC SQL SELECT f,text + INTO :f,:text + FROM test + WHERE i = 1; + + printf("Found f=%f text=%10.10s\n", f, text); + + f=140787; + EXEC SQL SELECT a,text + INTO :a,:t + FROM test + WHERE f = :f; + + for (i = 0; i < 10; i++) + printf("Found a[%d] = %d\n", i, a[i]); + + printf("Found text=%10.10s\n", t); + + EXEC SQL SELECT a + INTO :text + FROM test + WHERE f = :f; + + printf("Found text=%s\n", text); + + EXEC SQL DROP TABLE test; + + EXEC SQL COMMIT; + + EXEC SQL DISCONNECT; + + return (0); +} diff --git a/src/interfaces/ecpg/test/sql/binary.pgc b/src/interfaces/ecpg/test/sql/binary.pgc new file mode 100644 index 00000000000..9be73409135 --- /dev/null +++ b/src/interfaces/ecpg/test/sql/binary.pgc @@ -0,0 +1,85 @@ +#include <stdio.h> +#include <stdlib.h> + +EXEC SQL include ../regression; + +EXEC SQL BEGIN DECLARE SECTION; +struct TBempl +{ + long idnum; + char name[21]; + short accs; + char byte[20]; +}; +EXEC SQL END DECLARE SECTION; + +int +main (void) +{ + EXEC SQL BEGIN DECLARE SECTION; + struct TBempl empl; + char *data = "\\001\\155\\000\\212"; + EXEC SQL END DECLARE SECTION; + int i; + + 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, byte bytea); + if (sqlca.sqlcode) + { + printf ("create error = %ld\n", sqlca.sqlcode); + exit (sqlca.sqlcode); + } + + EXEC SQL insert into empl values (1, 'first user', 320, :data); + if (sqlca.sqlcode) + { + printf ("insert error = %ld\n", sqlca.sqlcode); + exit (sqlca.sqlcode); + } + + EXEC SQL DECLARE C CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; + EXEC SQL OPEN C; + EXEC SQL FETCH C INTO:empl.name,:empl.accs,:empl.byte; + if (sqlca.sqlcode) + { + printf ("fetch error = %ld\n", sqlca.sqlcode); + exit (sqlca.sqlcode); + } + + printf ("name=%s, accs=%d byte=%s\n", empl.name, empl.accs, empl.byte); + + memset(empl.name, 0, 21L); + memset(empl.byte, '#', 20L); + EXEC SQL DECLARE B BINARY CURSOR FOR select name, accs, byte from empl where idnum =:empl.idnum; + EXEC SQL OPEN B; + EXEC SQL FETCH B INTO :empl.name,:empl.accs,:empl.byte; + if (sqlca.sqlcode) + { + printf ("fetch error = %ld\n", sqlca.sqlcode); + exit (sqlca.sqlcode); + } + + EXEC SQL CLOSE B; + + /* do not print a.accs because big/little endian will have different outputs here */ + printf ("name=%s, byte=", empl.name); + for (i=0; i<20; i++) + { + if (empl.byte[i] == '#') + break; + printf("(%o)", (unsigned char)empl.byte[i]); + } + printf("\n"); + EXEC SQL disconnect; + exit (0); +} |