From: Bruce Momjian <bruce@momjian.us>
Date: Wed, 6 Aug 2003 02:19:51 +0000 (+0000)
Subject: Add ecpg thread testing file.
X-Git-Tag: REL7_4_BETA2~174
X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=149f01c4d463744cd2fe504f017422bbb9e5440e;p=postgresql.git

Add ecpg thread testing file.
---

diff --git a/src/interfaces/ecpg/compatlib/Makefile b/src/interfaces/ecpg/compatlib/Makefile
index 7ec04b1e9dd..73bf3389a19 100644
--- a/src/interfaces/ecpg/compatlib/Makefile
+++ b/src/interfaces/ecpg/compatlib/Makefile
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.7 2003/08/01 16:18:04 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.8 2003/08/06 02:19:48 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -16,8 +16,8 @@ NAME= ecpg_compat
 SO_MAJOR_VERSION= 1
 SO_MINOR_VERSION= 0
 
-override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir) -I$(top_srcdir)/src/include/utils $(CPPFLAGS)
-SHLIB_LINK = -L../pgtypeslib -lpgtypes -L../ecpglib -lecpg
+override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir) -I$(top_srcdir)/src/include/utils $(CPPFLAGS) $(THREAD_CFLAGS)
+SHLIB_LINK = -L../pgtypeslib -lpgtypes -L../ecpglib -lecpg $(THREAD_LIBS)
 
 OBJS= informix.o
 
diff --git a/src/interfaces/ecpg/pgtypeslib/Makefile b/src/interfaces/ecpg/pgtypeslib/Makefile
index f7b2e78d4e4..384684813ea 100644
--- a/src/interfaces/ecpg/pgtypeslib/Makefile
+++ b/src/interfaces/ecpg/pgtypeslib/Makefile
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.9 2003/08/01 16:18:04 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.10 2003/08/06 02:19:51 momjian Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -16,7 +16,7 @@ NAME= pgtypes
 SO_MAJOR_VERSION= 1
 SO_MINOR_VERSION= 0
 
-override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(top_srcdir)/src/include/utils $(CPPFLAGS) -g
+override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(top_srcdir)/src/include/utils $(CPPFLAGS) $(THREAD_CFLAGS) -g
 
 OBJS= numeric.o datetime.o common.o dt_common.o timestamp.o interval.o \
       $(filter rint.o, $(LIBOBJS))
diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile
index 7dd4e9375fe..9fe25529885 100644
--- a/src/interfaces/ecpg/preproc/Makefile
+++ b/src/interfaces/ecpg/preproc/Makefile
@@ -1,4 +1,4 @@
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.92 2003/06/15 04:07:58 momjian Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.93 2003/08/06 02:19:51 momjian Exp $
 
 subdir = src/interfaces/ecpg/preproc
 top_builddir = ../../../..
@@ -8,7 +8,7 @@ MAJOR_VERSION=3
 MINOR_VERSION=0
 PATCHLEVEL=0
 
-override CPPFLAGS := -I$(srcdir)/../include -I$(srcdir) $(CPPFLAGS) \
+override CPPFLAGS := -I$(srcdir)/../include -I$(srcdir) $(CPPFLAGS) $(THREAD_CFLAGS) \
 	-DMAJOR_VERSION=$(MAJOR_VERSION) \
 	-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
 	-DINCLUDE_PATH=\"$(includedir)\" 
@@ -24,7 +24,7 @@ OBJS=preproc.o type.o ecpg.o ecpg_keywords.o output.o\
 all: submake-libpgport ecpg
 
 ecpg: $(OBJS)
-	$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -o $@
+	$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LIBS) $(THREAD_LIBS) -o $@
 
 # pgc is compiled as part of preproc
 preproc.o: $(srcdir)/pgc.c
diff --git a/src/interfaces/ecpg/test/Makefile b/src/interfaces/ecpg/test/Makefile
index 357779863d0..ce875428469 100644
--- a/src/interfaces/ecpg/test/Makefile
+++ b/src/interfaces/ecpg/test/Makefile
@@ -1,22 +1,22 @@
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/test/Makefile,v 1.39 2003/08/01 13:53:36 petere Exp $
+# $Header: /cvsroot/pgsql/src/interfaces/ecpg/test/Makefile,v 1.40 2003/08/06 02:19:51 momjian Exp $
 
 subdir = src/interfaces/ecpg/test
 top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 
-override CPPFLAGS := -I$(srcdir)/../include -I$(libpq_srcdir) $(CPPFLAGS)
+override CPPFLAGS := -I$(srcdir)/../include -I$(libpq_srcdir) $(CPPFLAGS) $(THREAD_CFLAGS)
 
 ECPG = ../preproc/ecpg -I$(srcdir)/../include
 
-TESTS = test1 test2 test3 test4 perftest dyntest dyntest2 test_notice test_code100 test_init testdynalloc num_test dt_test test_informix
+TESTS = test1 test2 test3 test4 perftest dyntest dyntest2 test_notice test_code100 test_init testdynalloc num_test dt_test test_informix test_thread
 
 all: $(TESTS)
 
 %: %.o
-	$(CC) $(CFLAGS) $(LDFLAGS) -L../ecpglib -L ../pgtypeslib -L../../libpq $^ $(LIBS) -lpgtypes -lecpg -lpq -o $@
+	$(CC) $(CFLAGS) $(LDFLAGS) -L../ecpglib -L ../pgtypeslib -L../../libpq $^ $(LIBS) -lpgtypes -lecpg -lpq $(THREAD_LIBS) -o $@
 
 test_informix: test_informix.o
-	$(CC) $(CFLAGS) $(LDFLAGS) -L../compatlib -L../ecpglib -L ../pgtypeslib -L../../libpq $^ $(LIBS) -lpgtypes -lecpg -lecpg_compat -lpq -o $@
+	$(CC) $(CFLAGS) $(LDFLAGS) -L../compatlib -L../ecpglib -L ../pgtypeslib -L../../libpq $^ $(LIBS) -lpgtypes -lecpg -lecpg_compat -lpq $(THREAD_LIBS) -o $@
 	
 %.c: %.pgc
 	$(ECPG) $<
diff --git a/src/interfaces/ecpg/test/test_thread.pgc b/src/interfaces/ecpg/test/test_thread.pgc
new file mode 100644
index 00000000000..828d66c6a8c
--- /dev/null
+++ b/src/interfaces/ecpg/test/test_thread.pgc
@@ -0,0 +1,70 @@
+/* ---
+ *	Thread test program
+ *	by Philip Yarra
+ *
+ *	To run, create this table in the 'test' database:
+ *	
+ *	CREATE TABLE foo (
+ *	    message character(40)
+ *	);
+ * ---
+ */
+
+
+#include <pthread.h>
+
+int main(void);
+void ins1(void);
+void ins2(void);
+
+int main(void)
+{
+        pthread_t thread1, thread2;
+        pthread_create(&thread1, NULL, (void *) ins1, NULL);
+        pthread_create(&thread2, NULL, (void *) ins2, NULL);
+        pthread_join(thread1, NULL);
+        pthread_join(thread2, NULL);
+        printf("Program done!\n");
+        return 0;
+}
+
+void ins1(void)
+{
+        int i;
+        EXEC SQL BEGIN DECLARE SECTION;
+        char* cs = "test";
+        char* bar = "one!";
+        EXEC SQL END DECLARE SECTION;
+        EXEC SQL WHENEVER sqlerror sqlprint;
+        EXEC SQL CONNECT TO :cs AS test1;
+        for (i = 0; i < 5; i++)
+        {
+                printf("thread 1 : inserting\n");
+                EXEC SQL AT test1 INSERT INTO foo VALUES(:bar);
+                printf("thread 1 : insert done\n");
+        }
+        EXEC SQL AT test1 COMMIT WORK;
+        EXEC SQL DISCONNECT test1;
+        printf("thread 1 : done!\n");
+}
+
+
+void ins2(void)
+{
+        int i;
+        EXEC SQL BEGIN DECLARE SECTION;
+        char* cs = "test";
+        char* bar = "two!";
+        EXEC SQL END DECLARE SECTION;
+        EXEC SQL WHENEVER sqlerror sqlprint;
+        EXEC SQL CONNECT TO :cs AS test2;
+        for (i = 0; i < 5; i++)
+        {
+                printf("thread  2: inserting\n");
+                EXEC SQL AT test2 INSERT INTO foo VALUES(:bar);
+                printf("thread  2: insert done\n");
+        }
+        EXEC SQL AT test2 COMMIT WORK;
+        EXEC SQL DISCONNECT test2;
+        printf("thread  2: done!\n");
+}