3 #define POSTGRES_ECPG_INTERNAL
14 #include "pg_config_paths.h"
23 #define LONG_LONG_MIN LLONG_MIN
25 #define LONG_LONG_MIN LONGLONG_MIN
34 'S',
'Q',
'L',
'C',
'A',
' ',
' ',
' '
45 'N',
'O',
'T',
' ',
'S',
'E',
'T',
' '
51 0, 0, 0, 0, 0, 0, 0, 0
54 '0',
'0',
'0',
'0',
'0'
58 #ifdef ENABLE_THREAD_SAFETY
65 'S',
'Q',
'L',
'C',
'A',
' ',
' ',
' '
76 'N',
'O',
'T',
' ',
'S',
'E',
'T',
' '
82 0, 0, 0, 0, 0, 0, 0, 0
85 '0',
'0',
'0',
'0',
'0'
90 #ifdef ENABLE_THREAD_SAFETY
119 connection_name ? connection_name :
ecpg_gettext(
"NULL"));
126 #ifdef ENABLE_THREAD_SAFETY
128 ecpg_sqlca_key_destructor(
void *
arg)
134 ecpg_sqlca_key_init(
void)
136 pthread_key_create(&sqlca_key, ecpg_sqlca_key_destructor);
143 #ifdef ENABLE_THREAD_SAFETY
146 pthread_once(&sqlca_key_once, ecpg_sqlca_key_init);
168 if (!
ecpg_init(con, connection_name, lineno))
197 ECPGtrans(
int lineno,
const char *connection_name,
const char *transaction)
202 if (!
ecpg_init(con, connection_name, lineno))
205 ecpg_log(
"ECPGtrans on line %d: action \"%s\"; connection \"%s\"\n", lineno, transaction, con ? con->
name :
"null");
219 strncmp(transaction,
"begin", 5) != 0 &&
220 strncmp(transaction,
"start", 5) != 0 &&
221 strncmp(transaction,
"commit prepared", 15) != 0 &&
222 strncmp(transaction,
"rollback prepared", 17) != 0)
243 #ifdef ENABLE_THREAD_SAFETY
259 #ifdef ENABLE_THREAD_SAFETY
269 const char *intl_format;
283 bufsize = strlen(intl_format) + 100;
293 #ifdef ENABLE_THREAD_SAFETY
310 #ifdef ENABLE_THREAD_SAFETY
325 *((
char *) ptr) =
'\0';
329 *((
short int *) ptr) = SHRT_MIN;
333 *((
int *) ptr) = INT_MIN;
338 *((
long *) ptr) = LONG_MIN;
345 memset((
char *) ptr, 0xff,
sizeof(
float));
348 memset((
char *) ptr, 0xff,
sizeof(
double));
358 memset((
char *) ptr, 0,
sizeof(
decimal));
362 memset((
char *) ptr, 0,
sizeof(
numeric));
366 memset((
char *) ptr, 0xff,
sizeof(
interval));
369 memset((
char *) ptr, 0xff,
sizeof(
timestamp));
377 _check(
const unsigned char *ptr,
int length)
379 for (length--; length >= 0; length--)
380 if (ptr[length] != 0xff)
394 if (*((
const char *) ptr) ==
'\0')
399 if (*((
const short int *) ptr) == SHRT_MIN)
404 if (*((
const int *) ptr) == INT_MIN)
410 if (*((
const long *) ptr) == LONG_MIN)
419 return _check(ptr,
sizeof(
float));
422 return _check(ptr,
sizeof(
double));
454 #ifdef ENABLE_THREAD_SAFETY
459 if (mutex->handle == NULL)
461 while (InterlockedExchange((LONG *) &mutex->initlock, 1) == 1)
463 if (mutex->handle == NULL)
464 mutex->handle = CreateMutex(NULL, FALSE, NULL);
465 InterlockedExchange((LONG *) &mutex->initlock, 0);
469 static pthread_mutex_t win32_pthread_once_lock = PTHREAD_MUTEX_INITIALIZER;
500 static volatile bool already_bound =
false;
506 int save_errno = GetLastError();
508 int save_errno = errno;
513 ldir = getenv(
"PGLOCALEDIR");
517 already_bound =
true;
519 SetLastError(save_errno);
547 for (ptr =
ivlist; ptr != NULL; ptr = ptr->
next)
549 if (ptr->
number == number)
592 return (ptr) ? ptr->
pointer : NULL;
#define PG_TEXTDOMAIN(domain)
struct connection * ecpg_get_connection(const char *connection_name)
static void PGresult * res
#define ECPG_OUT_OF_MEMORY
bool ecpg_check_PQresult(PGresult *results, int lineno, PGconn *connection, enum COMPAT_MODE compat)
#define ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY
#define ECPG_SQLSTATE_ECPG_INTERNAL_ERROR
#define ECPG_SQLSTATE_CONNECTION_DOES_NOT_EXIST
void ecpg_raise(int line, int code, const char *sqlstate, const char *str)
@ ECPGt_unsigned_long_long
PGTransactionStatusType PQtransactionStatus(const PGconn *conn)
PGresult * PQexec(PGconn *conn, const char *query)
void ECPGset_var(int number, void *pointer, int lineno)
PGTransactionStatusType ECPGtransactionStatus(const char *connection_name)
void ECPGdebug(int n, FILE *dbgs)
void ECPGset_noind_null(enum ECPGttype type, void *ptr)
static struct sqlca_t sqlca_init
bool ECPGtrans(int lineno, const char *connection_name, const char *transaction)
static bool _check(const unsigned char *ptr, int length)
bool ECPGis_noind_null(enum ECPGttype type, const void *ptr)
void ecpg_log(const char *format,...)
bool ecpg_init(const struct connection *con, const char *connection_name, const int lineno)
static FILE * debugstream
void * ECPGget_var(int number)
static struct sqlca_t sqlca
bool ECPGstatus(int lineno, const char *connection_name)
struct sqlca_t * ECPGget_sqlca(void)
void ecpg_init_sqlca(struct sqlca_t *sqlca)
bool ecpg_internal_regression_mode
static void const char * fmt
static void const char fflush(stdout)
vfprintf(stderr, fmt, args)
void ECPGfree_auto_mem(void)
int pthread_mutex_unlock(pthread_mutex_t *mp)
void * pthread_getspecific(pthread_key_t key)
int pthread_mutex_lock(pthread_mutex_t *mp)
void pthread_setspecific(pthread_key_t key, void *val)
CRITICAL_SECTION * pthread_mutex_t
char arr[FLEXIBLE_ARRAY_MEMBER]
struct sqlca_t::@150 sqlerrm
char sqlerrmc[SQLERRMC_LEN]
static void * fn(void *arg)