| #include <stdint.h> |
| #include <stdlib.h> |
| #include "ecpg_config.h" |
| |
| #ifndef ENABLE_THREAD_SAFETY |
| int |
| main(void) |
| { |
| printf("No threading enabled.\n"); |
| return 0; |
| } |
| #else |
| #ifdef WIN32 |
| #define WIN32_LEAN_AND_MEAN |
| #include <windows.h> |
| #include <process.h> |
| #include <locale.h> |
| #else |
| #include <pthread.h> |
| #endif |
| #include <stdio.h> |
| |
| #define THREADS 16 |
| #define REPEATS 50 |
| |
| exec sql include sqlca; |
| exec sql include ../regression; |
| |
| exec sql whenever sqlerror sqlprint; |
| exec sql whenever not found sqlprint; |
| |
| #ifdef WIN32 |
| static unsigned __stdcall fn(void* arg) |
| #else |
| static void* fn(void* arg) |
| #endif |
| { |
| int i; |
| |
| EXEC SQL BEGIN DECLARE SECTION; |
| int value; |
| char name[100]; |
| char query[256] = "INSERT INTO T VALUES ( ? )"; |
| EXEC SQL END DECLARE SECTION; |
| |
| value = (intptr_t) arg; |
| sprintf(name, "Connection: %d", value); |
| |
| EXEC SQL CONNECT TO REGRESSDB1 AS :name; |
| EXEC SQL SET AUTOCOMMIT TO ON; |
| for (i = 1; i <= REPEATS; ++i) |
| { |
| EXEC SQL PREPARE I FROM :query; |
| EXEC SQL EXECUTE I USING :value; |
| } |
| EXEC SQL DEALLOCATE I; |
| EXEC SQL DISCONNECT :name; |
| |
| return 0; |
| } |
| |
| int main () |
| { |
| intptr_t i; |
| #ifdef WIN32 |
| HANDLE threads[THREADS]; |
| #else |
| pthread_t threads[THREADS]; |
| #endif |
| |
| EXEC SQL CONNECT TO REGRESSDB1; |
| EXEC SQL SET AUTOCOMMIT TO ON; |
| EXEC SQL DROP TABLE IF EXISTS T; |
| EXEC SQL CREATE TABLE T ( i int ); |
| EXEC SQL DISCONNECT; |
| |
| #ifdef WIN32 |
| for (i = 0; i < THREADS; ++i) |
| { |
| unsigned id; |
| threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, (void*)i, 0, &id); |
| } |
| |
| WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE); |
| for (i = 0; i < THREADS; ++i) |
| CloseHandle(threads[i]); |
| #else |
| for (i = 0; i < THREADS; ++i) |
| pthread_create(&threads[i], NULL, fn, (void *) i); |
| for (i = 0; i < THREADS; ++i) |
| pthread_join(threads[i], NULL); |
| #endif |
| |
| return 0; |
| } |
| #endif |