Commit a772624b authored by Michael Meskes's avatar Michael Meskes

Make setlocale in ECPG test cases thread aware on Windows.

Fix threaded test cases on Windows not to crash in setlocale() which can be
global or local to a thread on Windows.

Author: Christian Ullrich
parent 449338cc
...@@ -22,6 +22,7 @@ main(void) ...@@ -22,6 +22,7 @@ main(void)
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -99,7 +100,7 @@ struct sqlca_t *ECPGget_sqlca(void); ...@@ -99,7 +100,7 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif #endif
#line 24 "alloc.pgc" #line 25 "alloc.pgc"
#line 1 "regression.h" #line 1 "regression.h"
...@@ -109,14 +110,14 @@ struct sqlca_t *ECPGget_sqlca(void); ...@@ -109,14 +110,14 @@ struct sqlca_t *ECPGget_sqlca(void);
#line 25 "alloc.pgc" #line 26 "alloc.pgc"
/* exec sql whenever sqlerror sqlprint ; */ /* exec sql whenever sqlerror sqlprint ; */
#line 27 "alloc.pgc" #line 28 "alloc.pgc"
/* exec sql whenever not found sqlprint ; */ /* exec sql whenever not found sqlprint ; */
#line 28 "alloc.pgc" #line 29 "alloc.pgc"
#ifdef WIN32 #ifdef WIN32
...@@ -127,59 +128,63 @@ static void* fn(void* arg) ...@@ -127,59 +128,63 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 39 "alloc.pgc" #line 44 "alloc.pgc"
int value ; int value ;
#line 40 "alloc.pgc" #line 45 "alloc.pgc"
char name [ 100 ] ; char name [ 100 ] ;
#line 41 "alloc.pgc" #line 46 "alloc.pgc"
char ** r = NULL ; char ** r = NULL ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 42 "alloc.pgc" #line 47 "alloc.pgc"
value = (long)arg; value = (long)arg;
sprintf(name, "Connection: %d", value); sprintf(name, "Connection: %d", value);
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0);
#line 47 "alloc.pgc" #line 52 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 47 "alloc.pgc" #line 52 "alloc.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL); { ECPGsetcommit(__LINE__, "on", NULL);
#line 48 "alloc.pgc" #line 53 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 48 "alloc.pgc" #line 53 "alloc.pgc"
for (i = 1; i <= REPEATS; ++i) for (i = 1; i <= REPEATS; ++i)
{ {
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select relname from pg_class where relname = 'pg_class'", ECPGt_EOIT, { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select relname from pg_class where relname = 'pg_class'", ECPGt_EOIT,
ECPGt_char,&(r),(long)0,(long)0,(1)*sizeof(char), ECPGt_char,&(r),(long)0,(long)0,(1)*sizeof(char),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);
#line 51 "alloc.pgc" #line 56 "alloc.pgc"
if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint();
#line 51 "alloc.pgc" #line 56 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 51 "alloc.pgc" #line 56 "alloc.pgc"
free(r); free(r);
r = NULL; r = NULL;
} }
{ ECPGdisconnect(__LINE__, name); { ECPGdisconnect(__LINE__, name);
#line 55 "alloc.pgc" #line 60 "alloc.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 55 "alloc.pgc" #line 60 "alloc.pgc"
return 0; return 0;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -90,13 +91,13 @@ struct sqlca_t *ECPGget_sqlca(void); ...@@ -90,13 +91,13 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif #endif
#line 15 "descriptor.pgc" #line 16 "descriptor.pgc"
/* exec sql whenever sqlerror sqlprint ; */ /* exec sql whenever sqlerror sqlprint ; */
#line 16 "descriptor.pgc" #line 17 "descriptor.pgc"
/* exec sql whenever not found sqlprint ; */ /* exec sql whenever not found sqlprint ; */
#line 17 "descriptor.pgc" #line 18 "descriptor.pgc"
#if defined(ENABLE_THREAD_SAFETY) && defined(WIN32) #if defined(ENABLE_THREAD_SAFETY) && defined(WIN32)
...@@ -107,19 +108,23 @@ static void* fn(void* arg) ...@@ -107,19 +108,23 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
for (i = 1; i <= REPEATS; ++i) for (i = 1; i <= REPEATS; ++i)
{ {
ECPGallocate_desc(__LINE__, "mydesc"); ECPGallocate_desc(__LINE__, "mydesc");
#line 29 "descriptor.pgc" #line 34 "descriptor.pgc"
if (sqlca.sqlcode < 0) sqlprint(); if (sqlca.sqlcode < 0) sqlprint();
#line 29 "descriptor.pgc" #line 34 "descriptor.pgc"
ECPGdeallocate_desc(__LINE__, "mydesc"); ECPGdeallocate_desc(__LINE__, "mydesc");
#line 30 "descriptor.pgc" #line 35 "descriptor.pgc"
if (sqlca.sqlcode < 0) sqlprint(); if (sqlca.sqlcode < 0) sqlprint();
#line 30 "descriptor.pgc" #line 35 "descriptor.pgc"
} }
......
...@@ -22,6 +22,7 @@ main(void) ...@@ -22,6 +22,7 @@ main(void)
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -99,7 +100,7 @@ struct sqlca_t *ECPGget_sqlca(void); ...@@ -99,7 +100,7 @@ struct sqlca_t *ECPGget_sqlca(void);
#endif #endif
#line 24 "prep.pgc" #line 25 "prep.pgc"
#line 1 "regression.h" #line 1 "regression.h"
...@@ -109,14 +110,14 @@ struct sqlca_t *ECPGget_sqlca(void); ...@@ -109,14 +110,14 @@ struct sqlca_t *ECPGget_sqlca(void);
#line 25 "prep.pgc" #line 26 "prep.pgc"
/* exec sql whenever sqlerror sqlprint ; */ /* exec sql whenever sqlerror sqlprint ; */
#line 27 "prep.pgc" #line 28 "prep.pgc"
/* exec sql whenever not found sqlprint ; */ /* exec sql whenever not found sqlprint ; */
#line 28 "prep.pgc" #line 29 "prep.pgc"
#ifdef WIN32 #ifdef WIN32
...@@ -127,69 +128,73 @@ static void* fn(void* arg) ...@@ -127,69 +128,73 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 39 "prep.pgc" #line 44 "prep.pgc"
int value ; int value ;
#line 40 "prep.pgc" #line 45 "prep.pgc"
char name [ 100 ] ; char name [ 100 ] ;
#line 41 "prep.pgc" #line 46 "prep.pgc"
char query [ 256 ] = "INSERT INTO T VALUES ( ? )" ; char query [ 256 ] = "INSERT INTO T VALUES ( ? )" ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 42 "prep.pgc" #line 47 "prep.pgc"
value = (long)arg; value = (long)arg;
sprintf(name, "Connection: %d", value); sprintf(name, "Connection: %d", value);
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , name, 0);
#line 47 "prep.pgc" #line 52 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 47 "prep.pgc" #line 52 "prep.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL); { ECPGsetcommit(__LINE__, "on", NULL);
#line 48 "prep.pgc" #line 53 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 48 "prep.pgc" #line 53 "prep.pgc"
for (i = 1; i <= REPEATS; ++i) for (i = 1; i <= REPEATS; ++i)
{ {
{ ECPGprepare(__LINE__, NULL, 0, "i", query); { ECPGprepare(__LINE__, NULL, 0, "i", query);
#line 51 "prep.pgc" #line 56 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 51 "prep.pgc" #line 56 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "i", { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "i",
ECPGt_int,&(value),(long)1,(long)1,sizeof(int), ECPGt_int,&(value),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 52 "prep.pgc" #line 57 "prep.pgc"
if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint(); if (sqlca.sqlcode == ECPG_NOT_FOUND) sqlprint();
#line 52 "prep.pgc" #line 57 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 52 "prep.pgc" #line 57 "prep.pgc"
} }
{ ECPGdeallocate(__LINE__, 0, NULL, "i"); { ECPGdeallocate(__LINE__, 0, NULL, "i");
#line 54 "prep.pgc" #line 59 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 54 "prep.pgc" #line 59 "prep.pgc"
{ ECPGdisconnect(__LINE__, name); { ECPGdisconnect(__LINE__, name);
#line 55 "prep.pgc" #line 60 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 55 "prep.pgc" #line 60 "prep.pgc"
return 0; return 0;
...@@ -205,34 +210,34 @@ int main () ...@@ -205,34 +210,34 @@ int main ()
#endif #endif
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0);
#line 69 "prep.pgc" #line 74 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 69 "prep.pgc" #line 74 "prep.pgc"
{ ECPGsetcommit(__LINE__, "on", NULL); { ECPGsetcommit(__LINE__, "on", NULL);
#line 70 "prep.pgc" #line 75 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 70 "prep.pgc" #line 75 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table if exists T", ECPGt_EOIT, ECPGt_EORT); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table if exists T", ECPGt_EOIT, ECPGt_EORT);
#line 71 "prep.pgc" #line 76 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 71 "prep.pgc" #line 76 "prep.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( i int )", ECPGt_EOIT, ECPGt_EORT); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( i int )", ECPGt_EOIT, ECPGt_EORT);
#line 72 "prep.pgc" #line 77 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 72 "prep.pgc" #line 77 "prep.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT"); { ECPGdisconnect(__LINE__, "CURRENT");
#line 73 "prep.pgc" #line 78 "prep.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 73 "prep.pgc" #line 78 "prep.pgc"
#ifdef WIN32 #ifdef WIN32
......
...@@ -26,6 +26,7 @@ main(void) ...@@ -26,6 +26,7 @@ main(void)
#include <pthread.h> #include <pthread.h>
#else #else
#include <windows.h> #include <windows.h>
#include <locale.h>
#endif #endif
...@@ -36,7 +37,7 @@ main(void) ...@@ -36,7 +37,7 @@ main(void)
#line 22 "thread.pgc" #line 23 "thread.pgc"
void *test_thread(void *arg); void *test_thread(void *arg);
...@@ -55,10 +56,10 @@ int main() ...@@ -55,10 +56,10 @@ int main()
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 38 "thread.pgc" #line 39 "thread.pgc"
int l_rows ; int l_rows ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 39 "thread.pgc" #line 40 "thread.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in /* Do not switch on debug output for regression tests. The threads get executed in
...@@ -67,22 +68,22 @@ int main() ...@@ -67,22 +68,22 @@ int main()
/* setup test_thread table */ /* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 46 "thread.pgc" #line 47 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);}
#line 47 "thread.pgc" #line 48 "thread.pgc"
/* DROP might fail */ /* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 48 "thread.pgc" #line 49 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 53 "thread.pgc" #line 54 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 54 "thread.pgc" #line 55 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");} { ECPGdisconnect(__LINE__, "CURRENT");}
#line 55 "thread.pgc" #line 56 "thread.pgc"
/* create, and start, threads */ /* create, and start, threads */
...@@ -114,18 +115,18 @@ int main() ...@@ -114,18 +115,18 @@ int main()
/* and check results */ /* and check results */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 85 "thread.pgc" #line 86 "thread.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT, { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int), ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
#line 86 "thread.pgc" #line 87 "thread.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 87 "thread.pgc" #line 88 "thread.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");} { ECPGdisconnect(__LINE__, "CURRENT");}
#line 88 "thread.pgc" #line 89 "thread.pgc"
if( l_rows == (nthreads * iterations) ) if( l_rows == (nthreads * iterations) )
printf("Success.\n"); printf("Success.\n");
...@@ -138,17 +139,22 @@ int main() ...@@ -138,17 +139,22 @@ int main()
void *test_thread(void *arg) void *test_thread(void *arg)
{ {
long threadnum = (long)arg; long threadnum = (long)arg;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 101 "thread.pgc" #line 107 "thread.pgc"
int l_i ; int l_i ;
#line 102 "thread.pgc" #line 108 "thread.pgc"
char l_connection [ 128 ] ; char l_connection [ 128 ] ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 103 "thread.pgc" #line 109 "thread.pgc"
/* build up connection name, and connect to database */ /* build up connection name, and connect to database */
...@@ -158,13 +164,13 @@ void *test_thread(void *arg) ...@@ -158,13 +164,13 @@ void *test_thread(void *arg)
_snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum); _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
#endif #endif
/* exec sql whenever sqlerror sqlprint ; */ /* exec sql whenever sqlerror sqlprint ; */
#line 111 "thread.pgc" #line 117 "thread.pgc"
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0);
#line 112 "thread.pgc" #line 118 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 112 "thread.pgc" #line 118 "thread.pgc"
if( sqlca.sqlcode != 0 ) if( sqlca.sqlcode != 0 )
{ {
...@@ -172,10 +178,10 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -172,10 +178,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return( NULL ); return( NULL );
} }
{ ECPGtrans(__LINE__, l_connection, "begin"); { ECPGtrans(__LINE__, l_connection, "begin");
#line 118 "thread.pgc" #line 124 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 118 "thread.pgc" #line 124 "thread.pgc"
/* insert into test_thread table */ /* insert into test_thread table */
...@@ -186,10 +192,10 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -186,10 +192,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int), ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 123 "thread.pgc" #line 129 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 123 "thread.pgc" #line 129 "thread.pgc"
if( sqlca.sqlcode != 0 ) if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection); printf("%s: ERROR: insert failed!\n", l_connection);
...@@ -197,16 +203,16 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -197,16 +203,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */ /* all done */
{ ECPGtrans(__LINE__, l_connection, "commit"); { ECPGtrans(__LINE__, l_connection, "commit");
#line 129 "thread.pgc" #line 135 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 129 "thread.pgc" #line 135 "thread.pgc"
{ ECPGdisconnect(__LINE__, l_connection); { ECPGdisconnect(__LINE__, l_connection);
#line 130 "thread.pgc" #line 136 "thread.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 130 "thread.pgc" #line 136 "thread.pgc"
return( NULL ); return( NULL );
} }
......
...@@ -27,6 +27,7 @@ main(void) ...@@ -27,6 +27,7 @@ main(void)
#include <pthread.h> #include <pthread.h>
#else #else
#include <windows.h> #include <windows.h>
#include <locale.h>
#endif #endif
...@@ -37,7 +38,7 @@ main(void) ...@@ -37,7 +38,7 @@ main(void)
#line 23 "thread_implicit.pgc" #line 24 "thread_implicit.pgc"
void *test_thread(void *arg); void *test_thread(void *arg);
...@@ -56,10 +57,10 @@ int main() ...@@ -56,10 +57,10 @@ int main()
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 39 "thread_implicit.pgc" #line 40 "thread_implicit.pgc"
int l_rows ; int l_rows ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 40 "thread_implicit.pgc" #line 41 "thread_implicit.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in /* Do not switch on debug output for regression tests. The threads get executed in
...@@ -68,22 +69,22 @@ int main() ...@@ -68,22 +69,22 @@ int main()
/* setup test_thread table */ /* setup test_thread table */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 47 "thread_implicit.pgc" #line 48 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test_thread", ECPGt_EOIT, ECPGt_EORT);}
#line 48 "thread_implicit.pgc" #line 49 "thread_implicit.pgc"
/* DROP might fail */ /* DROP might fail */
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 49 "thread_implicit.pgc" #line 50 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test_thread ( tstamp timestamp not null default cast ( timeofday ( ) as timestamp ) , thread text not null , iteration integer not null , primary key ( thread , iteration ) )", ECPGt_EOIT, ECPGt_EORT);}
#line 54 "thread_implicit.pgc" #line 55 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 55 "thread_implicit.pgc" #line 56 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");} { ECPGdisconnect(__LINE__, "CURRENT");}
#line 56 "thread_implicit.pgc" #line 57 "thread_implicit.pgc"
/* create, and start, threads */ /* create, and start, threads */
...@@ -115,18 +116,18 @@ int main() ...@@ -115,18 +116,18 @@ int main()
/* and check results */ /* and check results */
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); } { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 86 "thread_implicit.pgc" #line 87 "thread_implicit.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT, { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select count ( * ) from test_thread", ECPGt_EOIT,
ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int), ECPGt_int,&(l_rows),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
#line 87 "thread_implicit.pgc" #line 88 "thread_implicit.pgc"
{ ECPGtrans(__LINE__, NULL, "commit");} { ECPGtrans(__LINE__, NULL, "commit");}
#line 88 "thread_implicit.pgc" #line 89 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");} { ECPGdisconnect(__LINE__, "CURRENT");}
#line 89 "thread_implicit.pgc" #line 90 "thread_implicit.pgc"
if( l_rows == (nthreads * iterations) ) if( l_rows == (nthreads * iterations) )
printf("Success.\n"); printf("Success.\n");
...@@ -139,17 +140,22 @@ int main() ...@@ -139,17 +140,22 @@ int main()
void *test_thread(void *arg) void *test_thread(void *arg)
{ {
long threadnum = (long)arg; long threadnum = (long)arg;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
/* exec sql begin declare section */ /* exec sql begin declare section */
#line 102 "thread_implicit.pgc" #line 108 "thread_implicit.pgc"
int l_i ; int l_i ;
#line 103 "thread_implicit.pgc" #line 109 "thread_implicit.pgc"
char l_connection [ 128 ] ; char l_connection [ 128 ] ;
/* exec sql end declare section */ /* exec sql end declare section */
#line 104 "thread_implicit.pgc" #line 110 "thread_implicit.pgc"
/* build up connection name, and connect to database */ /* build up connection name, and connect to database */
...@@ -159,13 +165,13 @@ void *test_thread(void *arg) ...@@ -159,13 +165,13 @@ void *test_thread(void *arg)
_snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum); _snprintf(l_connection, sizeof(l_connection), "thread_%03ld", threadnum);
#endif #endif
/* exec sql whenever sqlerror sqlprint ; */ /* exec sql whenever sqlerror sqlprint ; */
#line 112 "thread_implicit.pgc" #line 118 "thread_implicit.pgc"
{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , l_connection, 0);
#line 113 "thread_implicit.pgc" #line 119 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 113 "thread_implicit.pgc" #line 119 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 ) if( sqlca.sqlcode != 0 )
{ {
...@@ -173,10 +179,10 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -173,10 +179,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return( NULL ); return( NULL );
} }
{ ECPGtrans(__LINE__, NULL, "begin"); { ECPGtrans(__LINE__, NULL, "begin");
#line 119 "thread_implicit.pgc" #line 125 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 119 "thread_implicit.pgc" #line 125 "thread_implicit.pgc"
/* insert into test_thread table */ /* insert into test_thread table */
...@@ -187,10 +193,10 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -187,10 +193,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int), ECPGt_int,&(l_i),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
#line 124 "thread_implicit.pgc" #line 130 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 124 "thread_implicit.pgc" #line 130 "thread_implicit.pgc"
if( sqlca.sqlcode != 0 ) if( sqlca.sqlcode != 0 )
printf("%s: ERROR: insert failed!\n", l_connection); printf("%s: ERROR: insert failed!\n", l_connection);
...@@ -198,16 +204,16 @@ if (sqlca.sqlcode < 0) sqlprint();} ...@@ -198,16 +204,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */ /* all done */
{ ECPGtrans(__LINE__, NULL, "commit"); { ECPGtrans(__LINE__, NULL, "commit");
#line 130 "thread_implicit.pgc" #line 136 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 130 "thread_implicit.pgc" #line 136 "thread_implicit.pgc"
{ ECPGdisconnect(__LINE__, l_connection); { ECPGdisconnect(__LINE__, l_connection);
#line 131 "thread_implicit.pgc" #line 137 "thread_implicit.pgc"
if (sqlca.sqlcode < 0) sqlprint();} if (sqlca.sqlcode < 0) sqlprint();}
#line 131 "thread_implicit.pgc" #line 137 "thread_implicit.pgc"
return( NULL ); return( NULL );
} }
......
...@@ -13,6 +13,7 @@ main(void) ...@@ -13,6 +13,7 @@ main(void)
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -35,6 +36,10 @@ static void* fn(void* arg) ...@@ -35,6 +36,10 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION;
int value; int value;
char name[100]; char name[100];
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -24,6 +25,10 @@ static void* fn(void* arg) ...@@ -24,6 +25,10 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
for (i = 1; i <= REPEATS; ++i) for (i = 1; i <= REPEATS; ++i)
{ {
EXEC SQL ALLOCATE DESCRIPTOR mydesc; EXEC SQL ALLOCATE DESCRIPTOR mydesc;
......
...@@ -13,6 +13,7 @@ main(void) ...@@ -13,6 +13,7 @@ main(void)
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include <process.h> #include <process.h>
#include <locale.h>
#else #else
#include <pthread.h> #include <pthread.h>
#endif #endif
...@@ -35,6 +36,10 @@ static void* fn(void* arg) ...@@ -35,6 +36,10 @@ static void* fn(void* arg)
{ {
int i; int i;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION;
int value; int value;
char name[100]; char name[100];
......
...@@ -17,6 +17,7 @@ main(void) ...@@ -17,6 +17,7 @@ main(void)
#include <pthread.h> #include <pthread.h>
#else #else
#include <windows.h> #include <windows.h>
#include <locale.h>
#endif #endif
exec sql include ../regression; exec sql include ../regression;
...@@ -97,6 +98,11 @@ int main() ...@@ -97,6 +98,11 @@ int main()
void *test_thread(void *arg) void *test_thread(void *arg)
{ {
long threadnum = (long)arg; long threadnum = (long)arg;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION;
int l_i; int l_i;
char l_connection[128]; char l_connection[128];
......
...@@ -18,6 +18,7 @@ main(void) ...@@ -18,6 +18,7 @@ main(void)
#include <pthread.h> #include <pthread.h>
#else #else
#include <windows.h> #include <windows.h>
#include <locale.h>
#endif #endif
exec sql include ../regression; exec sql include ../regression;
...@@ -98,6 +99,11 @@ int main() ...@@ -98,6 +99,11 @@ int main()
void *test_thread(void *arg) void *test_thread(void *arg)
{ {
long threadnum = (long)arg; long threadnum = (long)arg;
#ifdef WIN32
_configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
#endif
EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION;
int l_i; int l_i;
char l_connection[128]; char l_connection[128];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment