#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 **r = NULL;
	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 SELECT relname INTO :r FROM pg_class WHERE relname = 'pg_class';
		free(r);
		r = NULL;
	}
	EXEC SQL DISCONNECT :name;

	return 0;
}

int main ()
{
	intptr_t i;
#ifdef WIN32
	HANDLE threads[THREADS];
#else
	pthread_t threads[THREADS];
#endif

#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
