From 00c11039d4ca93c13f8cd5b5d5f289931a71403d Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 7 Aug 2003 05:12:00 +0000 Subject: [PATCH] Update ecpg thread testing program to be more automated. --- src/interfaces/ecpg/test/test_thread.pgc | 132 ++++++++++++++--------- 1 file changed, 79 insertions(+), 53 deletions(-) diff --git a/src/interfaces/ecpg/test/test_thread.pgc b/src/interfaces/ecpg/test/test_thread.pgc index 828d66c6a8..5fc649a091 100644 --- a/src/interfaces/ecpg/test/test_thread.pgc +++ b/src/interfaces/ecpg/test/test_thread.pgc @@ -1,70 +1,96 @@ -/* --- +/* * Thread test program * by Philip Yarra - * - * To run, create this table in the 'test' database: - * - * CREATE TABLE foo ( - * message character(40) - * ); - * --- */ #include -int main(void); -void ins1(void); -void ins2(void); +void ins1(void); +void ins2(void); -int main(void) +EXEC SQL BEGIN DECLARE SECTION; +char *dbname; +EXEC SQL END DECLARE SECTION; + +int +main(int argc, char **argv) { - 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; + pthread_t thread1, + thread2; +EXEC SQL BEGIN DECLARE SECTION; + int rows; +EXEC SQL END DECLARE SECTION; + + if (argc != 2) + { + fprintf(stderr, "Usage: %s dbname\n", argv[0]); + return 1; + } + dbname = argv[1]; + + EXEC SQL CONNECT TO:dbname AS test0; + + /* DROP might fail */ + EXEC SQL AT test0 DROP TABLE test_thread; + EXEC SQL AT test0 COMMIT WORK; + EXEC SQL AT test0 CREATE TABLE test_thread(message character(40)); + EXEC SQL AT test0 COMMIT WORK; + EXEC SQL DISCONNECT test0; + + pthread_create(&thread1, NULL, (void *) ins1, NULL); + pthread_create(&thread2, NULL, (void *) ins2, NULL); + pthread_join(thread1, NULL); + pthread_join(thread2, NULL); + EXEC SQL CONNECT TO:dbname AS test3; + EXEC SQL AT test3 SELECT COUNT(*) INTO :rows FROM test_thread; + EXEC SQL AT test3 COMMIT WORK; + EXEC SQL DISCONNECT test3; + + if (rows == 10) + printf("Success.\n"); + else + printf("Failure.\n"); + return 0; } -void ins1(void) +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"); + int i; + EXEC SQL WHENEVER sqlerror sqlprint; + EXEC SQL CONNECT TO:dbname AS test1; + + for (i = 0; i < 5; i++) + { + printf("thread 1 : inserting\n"); + EXEC SQL AT test1 INSERT INTO test_thread VALUES('thread1'); + + printf("thread 1 : insert done\n"); + } + EXEC SQL AT test1 COMMIT WORK; + EXEC SQL DISCONNECT test1; + + printf("thread 1 : done!\n"); } -void ins2(void) +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"); + int i; + EXEC SQL WHENEVER sqlerror sqlprint; + EXEC SQL CONNECT TO:dbname AS test2; + + for (i = 0; i < 5; i++) + { + printf("thread 2: inserting\n"); + EXEC SQL AT test2 INSERT INTO test_thread VALUES('thread2'); + + printf("thread 2: insert done\n"); + } + EXEC SQL AT test2 COMMIT WORK; + EXEC SQL DISCONNECT test2; + + printf("thread 2: done!\n"); } -- 2.40.0