@ -24,7 +24,11 @@ main(void)
return 0 ;
}
# else
# ifndef WIN32
# include <pthread.h>
# else
# include <windows.h>
# endif
# line 1 "regression.h"
@ -34,7 +38,7 @@ main(void)
# line 19 "thread_implicit.pgc"
# line 23 "thread_implicit.pgc"
void * test_thread ( void * arg ) ;
@ -44,15 +48,19 @@ int iterations = 20;
int main ( int argc , char * argv [ ] )
{
# ifndef WIN32
pthread_t * threads ;
# else
HANDLE * threads ;
# endif
int n ;
/* exec sql begin declare section */
# line 31 "thread_implicit.pgc"
# line 39 "thread_implicit.pgc"
int l_rows ;
/* exec sql end declare section */
# line 32 "thread_implicit.pgc"
# line 40 "thread_implicit.pgc"
/* Do not switch on debug output for regression tests. The threads get executed in
@ -61,26 +69,26 @@ int main(int argc, char *argv[])
/* setup test_thread table */
{ ECPGconnect ( __LINE__ , 0 , " regress1 " , NULL , NULL , NULL , 0 ) ; }
# line 39 "thread_implicit.pgc"
# line 47 "thread_implicit.pgc"
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , " drop table test_thread " , ECPGt_EOIT , ECPGt_EORT ) ; }
# line 40 "thread_implicit.pgc"
# line 48 "thread_implicit.pgc"
/* DROP might fail */
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ; }
# line 41 "thread_implicit.pgc"
# line 49 "thread_implicit.pgc"
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , " 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 46 "thread_implicit.pgc"
# line 5 4 "thread_implicit.pgc"
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ; }
# line 47 "thread_implicit.pgc"
# line 55 "thread_implicit.pgc"
{ ECPGdisconnect ( __LINE__ , " CURRENT " ) ; }
# line 48 "thread_implicit.pgc"
# line 56 "thread_implicit.pgc"
/* create, and start, threads */
threads = calloc ( nthreads , sizeof ( pthread_t ) ) ;
threads = calloc ( nthreads , sizeof ( threads [ 0 ] ) ) ;
if ( threads = = NULL )
{
fprintf ( stderr , " Cannot alloc memory \n " ) ;
@ -88,30 +96,38 @@ int main(int argc, char *argv[])
}
for ( n = 0 ; n < nthreads ; n + + )
{
# ifndef WIN32
pthread_create ( & threads [ n ] , NULL , test_thread , ( void * ) ( n + 1 ) ) ;
# else
threads [ n ] = CreateThread ( NULL , 0 , ( LPTHREAD_START_ROUTINE ) test_thread , ( void * ) ( n + 1 ) , 0 , NULL ) ;
# endif
}
/* wait for thread completion */
# ifndef WIN32
for ( n = 0 ; n < nthreads ; n + + )
{
pthread_join ( threads [ n ] , NULL ) ;
}
# else
WaitForMultipleObjects ( nthreads , threads , TRUE , INFINITE ) ;
# endif
free ( threads ) ;
/* and check results */
{ ECPGconnect ( __LINE__ , 0 , " regress1 " , NULL , NULL , NULL , 0 ) ; }
# line 70 "thread_implicit.pgc"
# line 86 "thread_implicit.pgc"
{ ECPGdo ( __LINE__ , 0 , 1 , NULL , " select count (*) from test_thread " , ECPGt_EOIT ,
ECPGt_int , & ( l_rows ) , ( long ) 1 , ( long ) 1 , sizeof ( int ) ,
ECPGt_NO_INDICATOR , NULL , 0L , 0L , 0L , ECPGt_EORT ) ; }
# line 71 "thread_implicit.pgc"
# line 8 7 "thread_implicit.pgc"
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ; }
# line 72 "thread_implicit.pgc"
# line 88 "thread_implicit.pgc"
{ ECPGdisconnect ( __LINE__ , " CURRENT " ) ; }
# line 73 "thread_implicit.pgc"
# line 89 "thread_implicit.pgc"
if ( l_rows = = ( nthreads * iterations ) )
printf ( " Success. \n " ) ;
@ -128,25 +144,25 @@ void *test_thread(void *arg)
# line 86 "thread_implicit.pgc"
# line 102 "thread_implicit.pgc"
int l_i ;
# line 87 "thread_implicit.pgc"
# line 103 "thread_implicit.pgc"
char l_connection [ 128 ] ;
/* exec sql end declare section */
# line 88 "thread_implicit.pgc"
# line 104 "thread_implicit.pgc"
/* build up connection name, and connect to database */
snprintf ( l_connection , sizeof ( l_connection ) , " thread_%03ld " , threadnum ) ;
/* exec sql whenever sqlerror sqlprint ; */
# line 92 "thread_implicit.pgc"
# line 108 "thread_implicit.pgc"
{ ECPGconnect ( __LINE__ , 0 , " regress1 " , NULL , NULL , l_connection , 0 ) ;
# line 93 "thread_implicit.pgc"
# line 10 9 "thread_implicit.pgc"
if ( sqlca . sqlcode < 0 ) sqlprint ( ) ; }
# line 93 "thread_implicit.pgc"
# line 10 9 "thread_implicit.pgc"
if ( sqlca . sqlcode ! = 0 )
{
@ -154,10 +170,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
return ( NULL ) ;
}
{ ECPGtrans ( __LINE__ , NULL , " begin transaction " ) ;
# line 99 "thread_implicit.pgc"
# line 115 "thread_implicit.pgc"
if ( sqlca . sqlcode < 0 ) sqlprint ( ) ; }
# line 99 "thread_implicit.pgc"
# line 115 "thread_implicit.pgc"
/* insert into test_thread table */
@ -168,10 +184,10 @@ if (sqlca.sqlcode < 0) sqlprint();}
ECPGt_NO_INDICATOR , NULL , 0L , 0L , 0L ,
ECPGt_int , & ( l_i ) , ( long ) 1 , ( long ) 1 , sizeof ( int ) ,
ECPGt_NO_INDICATOR , NULL , 0L , 0L , 0L , ECPGt_EOIT , ECPGt_EORT ) ;
# line 104 "thread_implicit.pgc"
# line 12 0 "thread_implicit.pgc"
if ( sqlca . sqlcode < 0 ) sqlprint ( ) ; }
# line 104 "thread_implicit.pgc"
# line 12 0 "thread_implicit.pgc"
if ( sqlca . sqlcode ! = 0 )
printf ( " %s: ERROR: insert failed! \n " , l_connection ) ;
@ -179,16 +195,16 @@ if (sqlca.sqlcode < 0) sqlprint();}
/* all done */
{ ECPGtrans ( __LINE__ , NULL , " commit " ) ;
# line 110 "thread_implicit.pgc"
# line 126 "thread_implicit.pgc"
if ( sqlca . sqlcode < 0 ) sqlprint ( ) ; }
# line 110 "thread_implicit.pgc"
# line 126 "thread_implicit.pgc"
{ ECPGdisconnect ( __LINE__ , l_connection ) ;
# line 111 "thread_implicit.pgc"
# line 127 "thread_implicit.pgc"
if ( sqlca . sqlcode < 0 ) sqlprint ( ) ; }
# line 111 "thread_implicit.pgc"
# line 127 "thread_implicit.pgc"
return ( NULL ) ;
}