PostgreSQL Source Code  git master
thread-descriptor.c
Go to the documentation of this file.
1 /* Processed by ecpg (regression mode) */
2 /* These include files are added by the preprocessor */
3 #include <ecpglib.h>
4 #include <ecpgerrno.h>
5 #include <sqlca.h>
6 /* End of automatic include section */
7 #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
8 
9 #line 1 "descriptor.pgc"
10 #ifdef ENABLE_THREAD_SAFETY
11 #ifdef WIN32
12 #define WIN32_LEAN_AND_MEAN
13 #include <windows.h>
14 #include <process.h>
15 #include <locale.h>
16 #else
17 #include <pthread.h>
18 #endif
19 #endif
20 #include <stdio.h>
21 
22 #define THREADS 16
23 #define REPEATS 50000
24 
25 
26 #line 1 "sqlca.h"
27 #ifndef POSTGRES_SQLCA_H
28 #define POSTGRES_SQLCA_H
29 
30 #ifndef PGDLLIMPORT
31 #if defined(WIN32) || defined(__CYGWIN__)
32 #define PGDLLIMPORT __declspec (dllimport)
33 #else
34 #define PGDLLIMPORT
35 #endif /* __CYGWIN__ */
36 #endif /* PGDLLIMPORT */
37 
38 #define SQLERRMC_LEN 150
39 
40 #ifdef __cplusplus
41 extern "C"
42 {
43 #endif
44 
45 struct sqlca_t
46 {
47  char sqlcaid[8];
48  long sqlabc;
49  long sqlcode;
50  struct
51  {
52  int sqlerrml;
53  char sqlerrmc[SQLERRMC_LEN];
55  char sqlerrp[8];
56  long sqlerrd[6];
57  /* Element 0: empty */
58  /* 1: OID of processed tuple if applicable */
59  /* 2: number of rows processed */
60  /* after an INSERT, UPDATE or */
61  /* DELETE statement */
62  /* 3: empty */
63  /* 4: empty */
64  /* 5: empty */
65  char sqlwarn[8];
66  /* Element 0: set to 'W' if at least one other is 'W' */
67  /* 1: if 'W' at least one character string */
68  /* value was truncated when it was */
69  /* stored into a host variable. */
70 
71  /*
72  * 2: if 'W' a (hopefully) non-fatal notice occurred
73  */ /* 3: empty */
74  /* 4: empty */
75  /* 5: empty */
76  /* 6: empty */
77  /* 7: empty */
78 
79  char sqlstate[5];
80 };
81 
82 struct sqlca_t *ECPGget_sqlca(void);
83 
84 #ifndef POSTGRES_ECPG_INTERNAL
85 #define sqlca (*ECPGget_sqlca())
86 #endif
87 
88 #ifdef __cplusplus
89 }
90 #endif
91 
92 #endif
93 
94 #line 16 "descriptor.pgc"
95 
96 /* exec sql whenever sqlerror sqlprint ; */
97 #line 17 "descriptor.pgc"
98 
99 /* exec sql whenever not found sqlprint ; */
100 #line 18 "descriptor.pgc"
101 
102 
103 #if defined(ENABLE_THREAD_SAFETY) && defined(WIN32)
104 static unsigned __stdcall fn(void* arg)
105 #else
106 static void* fn(void* arg)
107 #endif
108 {
109  int i;
110 
111  for (i = 1; i <= REPEATS; ++i)
112  {
113  ECPGallocate_desc(__LINE__, "mydesc");
114 #line 30 "descriptor.pgc"
115 
116 if (sqlca.sqlcode < 0) sqlprint();
117 #line 30 "descriptor.pgc"
118 
119  ECPGdeallocate_desc(__LINE__, "mydesc");
120 #line 31 "descriptor.pgc"
121 
122 if (sqlca.sqlcode < 0) sqlprint();
123 #line 31 "descriptor.pgc"
124 
125  }
126 
127  return 0;
128 }
129 
130 int main ()
131 {
132 #ifdef ENABLE_THREAD_SAFETY
133  int i;
134 #ifdef WIN32
135  HANDLE threads[THREADS];
136 #else
137  pthread_t threads[THREADS];
138 #endif
139 
140 #ifdef WIN32
141  for (i = 0; i < THREADS; ++i)
142  {
143  unsigned id;
144  threads[i] = (HANDLE)_beginthreadex(NULL, 0, fn, NULL, 0, &id);
145  }
146 
147  WaitForMultipleObjects(THREADS, threads, TRUE, INFINITE);
148  for (i = 0; i < THREADS; ++i)
149  CloseHandle(threads[i]);
150 #else
151  for (i = 0; i < THREADS; ++i)
152  pthread_create(&threads[i], NULL, fn, NULL);
153  for (i = 0; i < THREADS; ++i)
154  pthread_join(threads[i], NULL);
155 #endif
156 #else
157  fn(NULL);
158 #endif
159 
160  return 0;
161 }
bool ECPGdeallocate_desc(int line, const char *name)
Definition: descriptor.c:755
bool ECPGallocate_desc(int line, const char *name)
Definition: descriptor.c:802
void sqlprint(void)
Definition: error.c:334
int i
Definition: isn.c:73
void * arg
Definition: sqlca.h:20
struct sqlca_t::@150 sqlerrm
char sqlerrp[8]
Definition: sqlca.h:29
long sqlerrd[6]
Definition: sqlca.h:30
char sqlstate[5]
Definition: sqlca.h:53
char sqlwarn[8]
Definition: sqlca.h:39
long sqlabc
Definition: sqlca.h:22
char sqlcaid[8]
Definition: sqlca.h:21
char sqlerrmc[SQLERRMC_LEN]
Definition: sqlca.h:27
long sqlcode
Definition: sqlca.h:23
int sqlerrml
Definition: sqlca.h:26
static void * fn(void *arg)
#define THREADS
#define SQLERRMC_LEN
struct sqlca_t * ECPGget_sqlca(void)
Definition: misc.c:141
#define REPEATS
#define sqlca
int main()