Age Owner Branch data TLA Line data Source code
1 : : #include <stdint.h>
2 : : #include <stdlib.h>
3 : : #include "ecpg_config.h"
4 : :
5 : : #ifdef WIN32
6 : : #define WIN32_LEAN_AND_MEAN
7 : : #include <windows.h>
8 : : #include <process.h>
9 : : #include <locale.h>
10 : : #else
11 : : #include <pthread.h>
12 : : #endif
13 : : #include <stdio.h>
14 : :
15 : : #define THREADS 16
16 : : #define REPEATS 50
17 : :
18 : : exec sql include sqlca;
19 : : exec sql include ../regression;
20 : :
21 : : exec sql whenever sqlerror sqlprint;
22 : : exec sql whenever not found sqlprint;
23 : :
24 : : #ifdef WIN32
25 : : static unsigned __stdcall fn(void* arg)
26 : : #else
6041 meskes@postgresql.or 27 :CBC 16 : static void* fn(void* arg)
28 : : #endif
29 : : {
30 : : int i;
31 : :
32 : : EXEC SQL BEGIN DECLARE SECTION;
33 : : int value;
34 : : char name[100];
6045 35 : 16 : char query[256] = "INSERT INTO T VALUES ( ? )";
36 : : EXEC SQL END DECLARE SECTION;
37 : :
1514 peter@eisentraut.org 38 : 16 : value = (intptr_t) arg;
6045 meskes@postgresql.or 39 : 16 : sprintf(name, "Connection: %d", value);
40 : :
41 : 16 : EXEC SQL CONNECT TO REGRESSDB1 AS :name;
42 [ - + ]: 16 : EXEC SQL SET AUTOCOMMIT TO ON;
43 [ - + + + ]: 816 : for (i = 1; i <= REPEATS; ++i)
44 : : {
45 : 800 : EXEC SQL PREPARE I FROM :query;
46 [ - + ]: 800 : EXEC SQL EXECUTE I USING :value;
47 [ - + - + ]: 800 : }
48 : 16 : EXEC SQL DEALLOCATE I;
49 [ - + ]: 16 : EXEC SQL DISCONNECT :name;
50 [ - + ]: 16 :
51 : 16 : return 0;
52 : : }
53 : :
5443 54 : 1 : int main ()
55 : : {
56 : : intptr_t i;
57 : : #ifdef WIN32
58 : : HANDLE threads[THREADS];
59 : : #else
60 : : pthread_t threads[THREADS];
61 : : #endif
62 : :
6045 63 : 1 : EXEC SQL CONNECT TO REGRESSDB1;
64 [ - + ]: 1 : EXEC SQL SET AUTOCOMMIT TO ON;
65 [ - + ]: 1 : EXEC SQL DROP TABLE IF EXISTS T;
66 [ - + ]: 1 : EXEC SQL CREATE TABLE T ( i int );
67 [ - + ]: 1 : EXEC SQL DISCONNECT;
68 [ - + ]: 1 :
69 : : #ifdef WIN32
70 : : for (i = 0; i < THREADS; ++i)
71 : : {
72 : : unsigned id;
73 : : threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, (void*)i, 0, &id);
74 : : }
75 : :
76 : : WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
77 : : for (i = 0; i < THREADS; ++i)
78 : : CloseHandle(threads[i]);
79 : : #else
80 [ + + ]: 17 : for (i = 0; i < THREADS; ++i)
1514 peter@eisentraut.org 81 : 16 : pthread_create(&threads[i], NULL, fn, (void *) i);
6045 meskes@postgresql.or 82 [ + + ]: 17 : for (i = 0; i < THREADS; ++i)
83 : 16 : pthread_join(threads[i], NULL);
84 : : #endif
85 : :
86 : 1 : return 0;
87 : : }
|