aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/sql
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/test/sql')
-rw-r--r--src/interfaces/ecpg/test/sql/Makefile16
-rw-r--r--src/interfaces/ecpg/test/sql/array.pgc77
-rw-r--r--src/interfaces/ecpg/test/sql/binary.pgc85
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);
+}