mirror of
https://github.com/postgres/postgres.git
synced 2025-11-21 00:42:43 +03:00
pgindent run over code.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.28 1999/05/10 00:46:25 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.29 1999/05/25 16:15:10 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -92,7 +92,7 @@ static struct authsvc authsvcs[] = {
|
||||
{"password", STARTUP_PASSWORD_MSG, 0}
|
||||
};
|
||||
|
||||
static int n_authsvcs = sizeof(authsvcs) / sizeof(struct authsvc);
|
||||
static int n_authsvcs = sizeof(authsvcs) / sizeof(struct authsvc);
|
||||
|
||||
#ifdef KRB4
|
||||
/*----------------------------------------------------------------
|
||||
@@ -144,8 +144,8 @@ pg_krb4_init()
|
||||
static char *
|
||||
pg_krb4_authname(char *PQerrormsg)
|
||||
{
|
||||
char instance[INST_SZ+1];
|
||||
char realm[REALM_SZ+1];
|
||||
char instance[INST_SZ + 1];
|
||||
char realm[REALM_SZ + 1];
|
||||
int status;
|
||||
static char name[SNAME_SZ + 1] = "";
|
||||
|
||||
@@ -299,7 +299,7 @@ pg_krb5_init(void)
|
||||
if (code = krb5_cc_resolve(tktbuf, &ccache))
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_init: Kerberos error %d in krb5_cc_resolve\n", code);
|
||||
"pg_krb5_init: Kerberos error %d in krb5_cc_resolve\n", code);
|
||||
com_err("pg_krb5_init", code, "in krb5_cc_resolve");
|
||||
return (krb5_ccache) NULL;
|
||||
}
|
||||
@@ -328,14 +328,14 @@ pg_krb5_authname(const char *PQerrormsg)
|
||||
if (code = krb5_cc_get_principal(ccache, &principal))
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_authname: Kerberos error %d in krb5_cc_get_principal\n", code);
|
||||
"pg_krb5_authname: Kerberos error %d in krb5_cc_get_principal\n", code);
|
||||
com_err("pg_krb5_authname", code, "in krb5_cc_get_principal");
|
||||
return (char *) NULL;
|
||||
}
|
||||
if (code = krb5_unparse_name(principal, &authname))
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_authname: Kerberos error %d in krb5_unparse_name\n", code);
|
||||
"pg_krb5_authname: Kerberos error %d in krb5_unparse_name\n", code);
|
||||
com_err("pg_krb5_authname", code, "in krb5_unparse_name");
|
||||
krb5_free_principal(principal);
|
||||
return (char *) NULL;
|
||||
@@ -384,7 +384,7 @@ pg_krb5_sendauth(const char *PQerrormsg, int sock,
|
||||
if (code = krb5_cc_get_principal(ccache, &client))
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_cc_get_principal\n", code);
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_cc_get_principal\n", code);
|
||||
com_err("pg_krb5_sendauth", code, "in krb5_cc_get_principal");
|
||||
return STATUS_ERROR;
|
||||
}
|
||||
@@ -411,7 +411,7 @@ pg_krb5_sendauth(const char *PQerrormsg, int sock,
|
||||
if (code = krb5_parse_name(servbuf, &server))
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_parse_name\n", code);
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_parse_name\n", code);
|
||||
com_err("pg_krb5_sendauth", code, "in krb5_parse_name");
|
||||
krb5_free_principal(client);
|
||||
return STATUS_ERROR;
|
||||
@@ -443,7 +443,7 @@ pg_krb5_sendauth(const char *PQerrormsg, int sock,
|
||||
else
|
||||
{
|
||||
(void) sprintf(PQerrormsg,
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_sendauth\n", code);
|
||||
"pg_krb5_sendauth: Kerberos error %d in krb5_sendauth\n", code);
|
||||
com_err("pg_krb5_sendauth", code, "in krb5_sendauth");
|
||||
}
|
||||
}
|
||||
@@ -544,7 +544,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname,
|
||||
* Set/return the authentication service currently selected for use by the
|
||||
* frontend. (You can only use one in the frontend, obviously.)
|
||||
*/
|
||||
static int pg_authsvc = -1;
|
||||
static int pg_authsvc = -1;
|
||||
|
||||
void
|
||||
fe_setauthsvc(const char *name, char *PQerrormsg)
|
||||
@@ -618,7 +618,7 @@ fe_getauthname(char *PQerrormsg)
|
||||
default:
|
||||
(void) sprintf(PQerrormsg,
|
||||
"fe_getauthname: invalid authentication system: %d\n",
|
||||
authsvc);
|
||||
authsvc);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.96 1999/05/03 19:10:40 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.97 1999/05/25 16:15:11 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -503,7 +503,7 @@ connectDB(PGconn *conn)
|
||||
struct hostent *hp;
|
||||
StartupPacket sp;
|
||||
AuthRequest areq;
|
||||
SOCKET_SIZE_TYPE laddrlen;
|
||||
SOCKET_SIZE_TYPE laddrlen;
|
||||
int portno,
|
||||
family;
|
||||
char beresp;
|
||||
@@ -586,7 +586,7 @@ connectDB(PGconn *conn)
|
||||
strerror(errno),
|
||||
(family == AF_INET) ? " (with -i)" : "",
|
||||
conn->pghost ? conn->pghost : "localhost",
|
||||
(family == AF_INET) ? "TCP/IP port" : "Unix socket",
|
||||
(family == AF_INET) ? "TCP/IP port" : "Unix socket",
|
||||
conn->pgport);
|
||||
goto connect_errReturn;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.79 1999/05/12 04:38:24 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.80 1999/05/25 16:15:12 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -75,7 +75,7 @@ static int getNotice(PGconn *conn);
|
||||
* doesn't tell us up front how many tuples will be returned.)
|
||||
* All other subsidiary storage for a PGresult is kept in PGresult_data blocks
|
||||
* of size PGRESULT_DATA_BLOCKSIZE. The overhead at the start of each block
|
||||
* is just a link to the next one, if any. Free-space management info is
|
||||
* is just a link to the next one, if any. Free-space management info is
|
||||
* kept in the owning PGresult.
|
||||
* A query returning a small amount of data will thus require three malloc
|
||||
* calls: one for the PGresult, one for the tuples pointer array, and one
|
||||
@@ -90,10 +90,10 @@ static int getNotice(PGconn *conn);
|
||||
* PGRESULT_DATA_BLOCKSIZE: size of a standard allocation block, in bytes
|
||||
* PGRESULT_ALIGN_BOUNDARY: assumed alignment requirement for binary data
|
||||
* PGRESULT_SEP_ALLOC_THRESHOLD: objects bigger than this are given separate
|
||||
* blocks, instead of being crammed into a regular allocation block.
|
||||
* blocks, instead of being crammed into a regular allocation block.
|
||||
* Requirements for correct function are:
|
||||
* PGRESULT_ALIGN_BOUNDARY must be a multiple of the alignment requirements
|
||||
* of all machine data types. (Currently this is set from configure
|
||||
* of all machine data types. (Currently this is set from configure
|
||||
* tests, so it should be OK automatically.)
|
||||
* PGRESULT_SEP_ALLOC_THRESHOLD + PGRESULT_BLOCK_OVERHEAD <=
|
||||
* PGRESULT_DATA_BLOCKSIZE
|
||||
@@ -110,7 +110,7 @@ static int getNotice(PGconn *conn);
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
#define PGRESULT_DATA_BLOCKSIZE 2048
|
||||
#define PGRESULT_ALIGN_BOUNDARY MAXIMUM_ALIGNOF /* from configure */
|
||||
#define PGRESULT_ALIGN_BOUNDARY MAXIMUM_ALIGNOF /* from configure */
|
||||
#define PGRESULT_BLOCK_OVERHEAD MAX(sizeof(PGresult_data), PGRESULT_ALIGN_BOUNDARY)
|
||||
#define PGRESULT_SEP_ALLOC_THRESHOLD (PGRESULT_DATA_BLOCKSIZE / 2)
|
||||
|
||||
@@ -126,7 +126,7 @@ static int getNotice(PGconn *conn);
|
||||
* and the Perl5 interface, so maybe it's not so unreasonable.
|
||||
*/
|
||||
|
||||
PGresult *
|
||||
PGresult *
|
||||
PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
|
||||
{
|
||||
PGresult *result;
|
||||
@@ -180,21 +180,23 @@ PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
|
||||
void *
|
||||
pqResultAlloc(PGresult *res, int nBytes, int isBinary)
|
||||
{
|
||||
char *space;
|
||||
PGresult_data *block;
|
||||
char *space;
|
||||
PGresult_data *block;
|
||||
|
||||
if (! res)
|
||||
if (!res)
|
||||
return NULL;
|
||||
|
||||
if (nBytes <= 0)
|
||||
return res->null_field;
|
||||
|
||||
/* If alignment is needed, round up the current position to an
|
||||
/*
|
||||
* If alignment is needed, round up the current position to an
|
||||
* alignment boundary.
|
||||
*/
|
||||
if (isBinary)
|
||||
{
|
||||
int offset = res->curOffset % PGRESULT_ALIGN_BOUNDARY;
|
||||
int offset = res->curOffset % PGRESULT_ALIGN_BOUNDARY;
|
||||
|
||||
if (offset)
|
||||
{
|
||||
res->curOffset += PGRESULT_ALIGN_BOUNDARY - offset;
|
||||
@@ -211,20 +213,24 @@ pqResultAlloc(PGresult *res, int nBytes, int isBinary)
|
||||
return space;
|
||||
}
|
||||
|
||||
/* If the requested object is very large, give it its own block; this
|
||||
* avoids wasting what might be most of the current block to start a new
|
||||
* block. (We'd have to special-case requests bigger than the block size
|
||||
* anyway.) The object is always given binary alignment in this case.
|
||||
/*
|
||||
* If the requested object is very large, give it its own block; this
|
||||
* avoids wasting what might be most of the current block to start a
|
||||
* new block. (We'd have to special-case requests bigger than the
|
||||
* block size anyway.) The object is always given binary alignment in
|
||||
* this case.
|
||||
*/
|
||||
if (nBytes >= PGRESULT_SEP_ALLOC_THRESHOLD)
|
||||
{
|
||||
block = (PGresult_data *) malloc(nBytes + PGRESULT_BLOCK_OVERHEAD);
|
||||
if (! block)
|
||||
if (!block)
|
||||
return NULL;
|
||||
space = block->space + PGRESULT_BLOCK_OVERHEAD;
|
||||
if (res->curBlock)
|
||||
{
|
||||
/* Tuck special block below the active block, so that we don't
|
||||
|
||||
/*
|
||||
* Tuck special block below the active block, so that we don't
|
||||
* have to waste the free space in the active block.
|
||||
*/
|
||||
block->next = res->curBlock->next;
|
||||
@@ -235,14 +241,14 @@ pqResultAlloc(PGresult *res, int nBytes, int isBinary)
|
||||
/* Must set up the new block as the first active block. */
|
||||
block->next = NULL;
|
||||
res->curBlock = block;
|
||||
res->spaceLeft = 0; /* be sure it's marked full */
|
||||
res->spaceLeft = 0; /* be sure it's marked full */
|
||||
}
|
||||
return space;
|
||||
}
|
||||
|
||||
/* Otherwise, start a new block. */
|
||||
block = (PGresult_data *) malloc(PGRESULT_DATA_BLOCKSIZE);
|
||||
if (! block)
|
||||
if (!block)
|
||||
return NULL;
|
||||
block->next = res->curBlock;
|
||||
res->curBlock = block;
|
||||
@@ -272,7 +278,8 @@ pqResultAlloc(PGresult *res, int nBytes, int isBinary)
|
||||
char *
|
||||
pqResultStrdup(PGresult *res, const char *str)
|
||||
{
|
||||
char *space = (char*) pqResultAlloc(res, strlen(str)+1, FALSE);
|
||||
char *space = (char *) pqResultAlloc(res, strlen(str) + 1, FALSE);
|
||||
|
||||
if (space)
|
||||
strcpy(space, str);
|
||||
return space;
|
||||
@@ -300,13 +307,14 @@ pqSetResultError(PGresult *res, const char *msg)
|
||||
void
|
||||
PQclear(PGresult *res)
|
||||
{
|
||||
PGresult_data *block;
|
||||
PGresult_data *block;
|
||||
|
||||
if (!res)
|
||||
return;
|
||||
|
||||
/* Free all the subsidiary blocks */
|
||||
while ((block = res->curBlock) != NULL) {
|
||||
while ((block = res->curBlock) != NULL)
|
||||
{
|
||||
res->curBlock = block->next;
|
||||
free(block);
|
||||
}
|
||||
@@ -343,6 +351,7 @@ addTuple(PGresult *res, PGresAttValue *tup)
|
||||
{
|
||||
if (res->ntups >= res->tupArrSize)
|
||||
{
|
||||
|
||||
/*
|
||||
* Try to grow the array.
|
||||
*
|
||||
@@ -351,19 +360,19 @@ addTuple(PGresult *res, PGresAttValue *tup)
|
||||
* While ANSI says that realloc() should act like malloc() in that
|
||||
* case, some old C libraries (like SunOS 4.1.x) coredump instead.
|
||||
* On failure realloc is supposed to return NULL without damaging
|
||||
* the existing allocation.
|
||||
* Note that the positions beyond res->ntups are garbage, not
|
||||
* necessarily NULL.
|
||||
* the existing allocation. Note that the positions beyond
|
||||
* res->ntups are garbage, not necessarily NULL.
|
||||
*/
|
||||
int newSize = (res->tupArrSize > 0) ? res->tupArrSize * 2 : 128;
|
||||
PGresAttValue ** newTuples;
|
||||
int newSize = (res->tupArrSize > 0) ? res->tupArrSize * 2 : 128;
|
||||
PGresAttValue **newTuples;
|
||||
|
||||
if (res->tuples == NULL)
|
||||
newTuples = (PGresAttValue **)
|
||||
malloc(newSize * sizeof(PGresAttValue *));
|
||||
else
|
||||
newTuples = (PGresAttValue **)
|
||||
realloc(res->tuples, newSize * sizeof(PGresAttValue *));
|
||||
if (! newTuples)
|
||||
if (!newTuples)
|
||||
return FALSE; /* malloc or realloc failed */
|
||||
res->tupArrSize = newSize;
|
||||
res->tuples = newTuples;
|
||||
@@ -537,7 +546,7 @@ parseInput(PGconn *conn)
|
||||
case 'C': /* command complete */
|
||||
if (conn->result == NULL)
|
||||
conn->result = PQmakeEmptyPGresult(conn,
|
||||
PGRES_COMMAND_OK);
|
||||
PGRES_COMMAND_OK);
|
||||
if (pqGets(conn->result->cmdStatus, CMDSTATUS_LEN, conn))
|
||||
return;
|
||||
conn->asyncStatus = PGASYNC_READY;
|
||||
@@ -567,7 +576,7 @@ parseInput(PGconn *conn)
|
||||
}
|
||||
if (conn->result == NULL)
|
||||
conn->result = PQmakeEmptyPGresult(conn,
|
||||
PGRES_EMPTY_QUERY);
|
||||
PGRES_EMPTY_QUERY);
|
||||
conn->asyncStatus = PGASYNC_READY;
|
||||
break;
|
||||
case 'K': /* secret key data from the backend */
|
||||
@@ -653,7 +662,7 @@ parseInput(PGconn *conn)
|
||||
sprintf(conn->errorMessage,
|
||||
"unknown protocol character '%c' read from backend. "
|
||||
"(The protocol character is the first character the "
|
||||
"backend sends in response to a query it receives).\n",
|
||||
"backend sends in response to a query it receives).\n",
|
||||
id);
|
||||
/* Discard the unexpected message; good idea?? */
|
||||
conn->inStart = conn->inEnd;
|
||||
@@ -724,12 +733,13 @@ getRowDescriptions(PGconn *conn)
|
||||
PQclear(result);
|
||||
return EOF;
|
||||
}
|
||||
|
||||
/*
|
||||
* Since pqGetInt treats 2-byte integers as unsigned, we need to
|
||||
* coerce the special value "-1" to signed form. (-1 is sent for
|
||||
* variable-length fields.) Formerly, libpq effectively did a
|
||||
* sign-extension on the 2-byte value by storing it in a signed short.
|
||||
* Now we only coerce the single value 65535 == -1; values
|
||||
* sign-extension on the 2-byte value by storing it in a signed
|
||||
* short. Now we only coerce the single value 65535 == -1; values
|
||||
* 32768..65534 are taken as valid field lengths.
|
||||
*/
|
||||
if (typlen == 0xFFFF)
|
||||
@@ -825,7 +835,7 @@ getAnotherTuple(PGconn *conn, int binary)
|
||||
vlen = 0;
|
||||
if (tup[i].value == NULL)
|
||||
{
|
||||
tup[i].value = (char *) pqResultAlloc(result, vlen+1, binary);
|
||||
tup[i].value = (char *) pqResultAlloc(result, vlen + 1, binary);
|
||||
if (tup[i].value == NULL)
|
||||
goto outOfMemory;
|
||||
}
|
||||
@@ -850,7 +860,7 @@ getAnotherTuple(PGconn *conn, int binary)
|
||||
}
|
||||
|
||||
/* Success! Store the completed tuple in the result */
|
||||
if (! addTuple(result, tup))
|
||||
if (!addTuple(result, tup))
|
||||
goto outOfMemory;
|
||||
/* and reset for a new message */
|
||||
conn->curTuple = NULL;
|
||||
@@ -928,23 +938,25 @@ PQgetResult(PGconn *conn)
|
||||
res = NULL; /* query is complete */
|
||||
break;
|
||||
case PGASYNC_READY:
|
||||
|
||||
/*
|
||||
* conn->result is the PGresult to return. If it is NULL
|
||||
* (which probably shouldn't happen) we assume there is
|
||||
* an appropriate error message in conn->errorMessage.
|
||||
* conn->result is the PGresult to return. If it is NULL
|
||||
* (which probably shouldn't happen) we assume there is an
|
||||
* appropriate error message in conn->errorMessage.
|
||||
*/
|
||||
res = conn->result;
|
||||
conn->result = NULL; /* handing over ownership to caller */
|
||||
conn->result = NULL;/* handing over ownership to caller */
|
||||
conn->curTuple = NULL; /* just in case */
|
||||
if (!res)
|
||||
{
|
||||
res = PQmakeEmptyPGresult(conn, PGRES_FATAL_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Make sure PQerrorMessage agrees with result; it could be
|
||||
* that we have done other operations that changed
|
||||
* errorMessage since the result's error message was saved.
|
||||
|
||||
/*
|
||||
* Make sure PQerrorMessage agrees with result; it could
|
||||
* be that we have done other operations that changed
|
||||
* errorMessage since the result's error message was
|
||||
* saved.
|
||||
*/
|
||||
strcpy(conn->errorMessage, PQresultErrorMessage(res));
|
||||
}
|
||||
@@ -1186,13 +1198,13 @@ PQgetline(PGconn *conn, char *s, int maxlen)
|
||||
* then return to normal processing.
|
||||
*
|
||||
* RETURNS:
|
||||
* -1 if the end-of-copy-data marker has been recognized
|
||||
* 0 if no data is available
|
||||
* >0 the number of bytes returned.
|
||||
* -1 if the end-of-copy-data marker has been recognized
|
||||
* 0 if no data is available
|
||||
* >0 the number of bytes returned.
|
||||
* The data returned will not extend beyond a newline character. If possible
|
||||
* a whole line will be returned at one time. But if the buffer offered by
|
||||
* the caller is too small to hold a line sent by the backend, then a partial
|
||||
* data line will be returned. This can be detected by testing whether the
|
||||
* data line will be returned. This can be detected by testing whether the
|
||||
* last returned byte is '\n' or not.
|
||||
* The returned string is *not* null-terminated.
|
||||
*/
|
||||
@@ -1200,18 +1212,17 @@ PQgetline(PGconn *conn, char *s, int maxlen)
|
||||
int
|
||||
PQgetlineAsync(PGconn *conn, char *buffer, int bufsize)
|
||||
{
|
||||
int avail;
|
||||
int avail;
|
||||
|
||||
if (!conn || conn->asyncStatus != PGASYNC_COPY_OUT)
|
||||
return -1; /* we are not doing a copy... */
|
||||
|
||||
/*
|
||||
* Move data from libpq's buffer to the caller's.
|
||||
* We want to accept data only in units of whole lines,
|
||||
* not partial lines. This ensures that we can recognize
|
||||
* the terminator line "\\.\n". (Otherwise, if it happened
|
||||
* to cross a packet/buffer boundary, we might hand the first
|
||||
* one or two characters off to the caller, which we shouldn't.)
|
||||
* Move data from libpq's buffer to the caller's. We want to accept
|
||||
* data only in units of whole lines, not partial lines. This ensures
|
||||
* that we can recognize the terminator line "\\.\n". (Otherwise, if
|
||||
* it happened to cross a packet/buffer boundary, we might hand the
|
||||
* first one or two characters off to the caller, which we shouldn't.)
|
||||
*/
|
||||
|
||||
conn->inCursor = conn->inStart;
|
||||
@@ -1219,7 +1230,8 @@ PQgetlineAsync(PGconn *conn, char *buffer, int bufsize)
|
||||
avail = bufsize;
|
||||
while (avail > 0 && conn->inCursor < conn->inEnd)
|
||||
{
|
||||
char c = conn->inBuffer[conn->inCursor++];
|
||||
char c = conn->inBuffer[conn->inCursor++];
|
||||
|
||||
*buffer++ = c;
|
||||
--avail;
|
||||
if (c == '\n')
|
||||
@@ -1227,7 +1239,7 @@ PQgetlineAsync(PGconn *conn, char *buffer, int bufsize)
|
||||
/* Got a complete line; mark the data removed from libpq */
|
||||
conn->inStart = conn->inCursor;
|
||||
/* Is it the endmarker line? */
|
||||
if (bufsize-avail == 3 && buffer[-3] == '\\' && buffer[-2] == '.')
|
||||
if (bufsize - avail == 3 && buffer[-3] == '\\' && buffer[-2] == '.')
|
||||
return -1;
|
||||
/* No, return the data line to the caller */
|
||||
return bufsize - avail;
|
||||
@@ -1235,13 +1247,13 @@ PQgetlineAsync(PGconn *conn, char *buffer, int bufsize)
|
||||
}
|
||||
|
||||
/*
|
||||
* We don't have a complete line.
|
||||
* We'd prefer to leave it in libpq's buffer until the rest arrives,
|
||||
* but there is a special case: what if the line is longer than the
|
||||
* buffer the caller is offering us? In that case we'd better hand over
|
||||
* a partial line, else we'd get into an infinite loop.
|
||||
* Do this in a way that ensures we can't misrecognize a terminator
|
||||
* line later: leave last 3 characters in libpq buffer.
|
||||
* We don't have a complete line. We'd prefer to leave it in libpq's
|
||||
* buffer until the rest arrives, but there is a special case: what if
|
||||
* the line is longer than the buffer the caller is offering us? In
|
||||
* that case we'd better hand over a partial line, else we'd get into
|
||||
* an infinite loop. Do this in a way that ensures we can't
|
||||
* misrecognize a terminator line later: leave last 3 characters in
|
||||
* libpq buffer.
|
||||
*/
|
||||
if (avail == 0 && bufsize > 3)
|
||||
{
|
||||
@@ -1737,13 +1749,13 @@ PQoidStatus(PGresult *res)
|
||||
|
||||
/*----------
|
||||
* The cmdStatus string looks like
|
||||
* INSERT oid count\0
|
||||
* INSERT oid count\0
|
||||
* In order to be able to return an ordinary C string without
|
||||
* damaging the result for PQcmdStatus or PQcmdTuples, we copy
|
||||
* the oid part of the string to just after the null, so that
|
||||
* cmdStatus looks like
|
||||
* INSERT oid count\0oid\0
|
||||
* ^ our return value points here
|
||||
* INSERT oid count\0oid\0
|
||||
* ^ our return value points here
|
||||
* Pretty klugy eh? This routine should've just returned an Oid value.
|
||||
*----------
|
||||
*/
|
||||
@@ -1802,7 +1814,7 @@ PQcmdTuples(PGresult *res)
|
||||
if (res->conn)
|
||||
{
|
||||
sprintf(res->conn->errorMessage,
|
||||
"PQcmdTuples (INSERT) -- there's no # of tuples\n");
|
||||
"PQcmdTuples (INSERT) -- there's no # of tuples\n");
|
||||
DONOTICE(res->conn, res->conn->errorMessage);
|
||||
}
|
||||
return "";
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.23 1999/02/22 05:26:53 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.24 1999/05/25 16:15:13 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -471,6 +471,7 @@ pqFlush(PGconn *conn)
|
||||
/* Prevent being SIGPIPEd if backend has closed the connection. */
|
||||
#ifndef WIN32
|
||||
pqsigfunc oldsighandler = pqsignal(SIGPIPE, SIG_IGN);
|
||||
|
||||
#endif
|
||||
|
||||
int sent = send(conn->sock, ptr, len, 0);
|
||||
@@ -481,10 +482,11 @@ pqFlush(PGconn *conn)
|
||||
|
||||
if (sent < 0)
|
||||
{
|
||||
|
||||
/*
|
||||
* Anything except EAGAIN or EWOULDBLOCK is trouble.
|
||||
* If it's EPIPE or ECONNRESET, assume we've lost the
|
||||
* backend connection permanently.
|
||||
* Anything except EAGAIN or EWOULDBLOCK is trouble. If it's
|
||||
* EPIPE or ECONNRESET, assume we've lost the backend
|
||||
* connection permanently.
|
||||
*/
|
||||
switch (errno)
|
||||
{
|
||||
@@ -504,7 +506,7 @@ pqFlush(PGconn *conn)
|
||||
"pqFlush() -- backend closed the channel unexpectedly.\n"
|
||||
"\tThis probably means the backend terminated abnormally"
|
||||
" before or while processing the request.\n");
|
||||
conn->status = CONNECTION_BAD; /* No more connection */
|
||||
conn->status = CONNECTION_BAD; /* No more connection */
|
||||
#ifdef WIN32
|
||||
closesocket(conn->sock);
|
||||
#else
|
||||
@@ -514,7 +516,7 @@ pqFlush(PGconn *conn)
|
||||
return EOF;
|
||||
default:
|
||||
sprintf(conn->errorMessage,
|
||||
"pqFlush() -- couldn't send data: errno=%d\n%s\n",
|
||||
"pqFlush() -- couldn't send data: errno=%d\n%s\n",
|
||||
errno, strerror(errno));
|
||||
/* We don't assume it's a fatal error... */
|
||||
return EOF;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* didn't really belong there.
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.22 1999/05/03 19:10:41 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-print.c,v 1.23 1999/05/25 16:15:13 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -520,7 +520,7 @@ PQmblen(unsigned char *s)
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* MULTIBYTE */
|
||||
#endif /* MULTIBYTE */
|
||||
|
||||
static void
|
||||
do_field(PQprintOpt *po, PGresult *res,
|
||||
@@ -556,6 +556,7 @@ do_field(PQprintOpt *po, PGresult *res,
|
||||
if (!skipit)
|
||||
{
|
||||
char ch = 0;
|
||||
|
||||
#ifdef MULTIBYTE
|
||||
int len;
|
||||
|
||||
@@ -567,10 +568,11 @@ do_field(PQprintOpt *po, PGresult *res,
|
||||
#endif
|
||||
{
|
||||
ch = *p;
|
||||
|
||||
/*
|
||||
* Consensus on pgsql-interfaces (as of Aug 1998) seems to be that
|
||||
* the print functions ought not insert backslashes. If you like
|
||||
* them, you can re-enable this next bit.
|
||||
* Consensus on pgsql-interfaces (as of Aug 1998) seems to be
|
||||
* that the print functions ought not insert backslashes. If
|
||||
* you like them, you can re-enable this next bit.
|
||||
*/
|
||||
#ifdef GRATUITOUS_BACKSLASHES
|
||||
if ((fs_len == 1 && (ch == *(po->fieldSep))) ||
|
||||
@@ -587,9 +589,10 @@ do_field(PQprintOpt *po, PGresult *res,
|
||||
fieldNotNum[j] = 1;
|
||||
}
|
||||
*o = '\0';
|
||||
|
||||
/*
|
||||
* Above loop will believe E in first column is numeric; also, we
|
||||
* insist on a digit in the last column for a numeric. This test
|
||||
* insist on a digit in the last column for a numeric. This test
|
||||
* is still not bulletproof but it handles most cases.
|
||||
*/
|
||||
if (po->align &&
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: libpq-fe.h,v 1.49 1999/02/13 23:22:42 momjian Exp $
|
||||
* $Id: libpq-fe.h,v 1.50 1999/05/25 16:15:13 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -36,10 +36,11 @@ extern "C"
|
||||
typedef enum
|
||||
{
|
||||
PGRES_EMPTY_QUERY = 0,
|
||||
PGRES_COMMAND_OK, /* a query command that doesn't return anything
|
||||
* was executed properly by the backend */
|
||||
PGRES_TUPLES_OK, /* a query command that returns tuples
|
||||
* was executed properly by the backend,
|
||||
PGRES_COMMAND_OK, /* a query command that doesn't return
|
||||
* anything was executed properly by the
|
||||
* backend */
|
||||
PGRES_TUPLES_OK, /* a query command that returns tuples was
|
||||
* executed properly by the backend,
|
||||
* PGresult contains the result tuples */
|
||||
PGRES_COPY_OUT, /* Copy Out data transfer in progress */
|
||||
PGRES_COPY_IN, /* Copy In data transfer in progress */
|
||||
@@ -52,7 +53,7 @@ extern "C"
|
||||
/* String descriptions of the ExecStatusTypes.
|
||||
* NB: direct use of this array is now deprecated; call PQresStatus() instead.
|
||||
*/
|
||||
extern const char * const pgresStatus[];
|
||||
extern const char *const pgresStatus[];
|
||||
|
||||
/* PGconn encapsulates a connection to the backend.
|
||||
* The contents of this struct are not supposed to be known to applications.
|
||||
@@ -76,21 +77,21 @@ extern "C"
|
||||
{
|
||||
char relname[NAMEDATALEN]; /* name of relation
|
||||
* containing data */
|
||||
int be_pid; /* process id of backend */
|
||||
int be_pid; /* process id of backend */
|
||||
} PGnotify;
|
||||
|
||||
/* PQnoticeProcessor is the function type for the notice-message callback.
|
||||
*/
|
||||
typedef void (*PQnoticeProcessor) (void * arg, const char * message);
|
||||
typedef void (*PQnoticeProcessor) (void *arg, const char *message);
|
||||
|
||||
/* Print options for PQprint() */
|
||||
|
||||
/*
|
||||
* We can't use the conventional "bool", because we are designed to be
|
||||
* included in a user's program, and user may already have that type
|
||||
* defined. Pqbool, on the other hand, is unlikely to be used.
|
||||
*/
|
||||
typedef char pqbool;
|
||||
|
||||
/*
|
||||
* We can't use the conventional "bool", because we are designed to be
|
||||
* included in a user's program, and user may already have that type
|
||||
* defined. Pqbool, on the other hand, is unlikely to be used.
|
||||
*/
|
||||
typedef char pqbool;
|
||||
|
||||
typedef struct _PQprintOpt
|
||||
{
|
||||
@@ -115,16 +116,16 @@ extern "C"
|
||||
typedef struct _PQconninfoOption
|
||||
{
|
||||
char *keyword; /* The keyword of the option */
|
||||
char *envvar; /* Fallback environment variable name */
|
||||
char *envvar; /* Fallback environment variable name */
|
||||
char *compiled; /* Fallback compiled in default value */
|
||||
char *val; /* Options value */
|
||||
char *label; /* Label for field in connect dialog */
|
||||
char *dispchar; /* Character to display for this field */
|
||||
/* in a connect dialog. Values are: */
|
||||
/* "" Display entered value as is */
|
||||
/* "*" Password field - hide value */
|
||||
/* "D" Debug options - don't */
|
||||
/* create a field by default */
|
||||
/* in a connect dialog. Values are: */
|
||||
/* "" Display entered value as is */
|
||||
/* "*" Password field - hide value */
|
||||
/* "D" Debug options - don't */
|
||||
/* create a field by default */
|
||||
int dispsize; /* Field size in characters for dialog */
|
||||
} PQconninfoOption;
|
||||
|
||||
@@ -154,8 +155,8 @@ extern "C"
|
||||
extern PGconn *PQconnectdb(const char *conninfo);
|
||||
extern PGconn *PQsetdbLogin(const char *pghost, const char *pgport,
|
||||
const char *pgoptions, const char *pgtty,
|
||||
const char *dbName,
|
||||
const char *login, const char *pwd);
|
||||
const char *dbName,
|
||||
const char *login, const char *pwd);
|
||||
#define PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME) \
|
||||
PQsetdbLogin(M_PGHOST, M_PGPORT, M_PGOPT, M_PGTTY, M_DBNAME, NULL, NULL)
|
||||
|
||||
@@ -193,8 +194,8 @@ extern "C"
|
||||
|
||||
/* Override default notice processor */
|
||||
extern void PQsetNoticeProcessor(PGconn *conn,
|
||||
PQnoticeProcessor proc,
|
||||
void *arg);
|
||||
PQnoticeProcessor proc,
|
||||
void *arg);
|
||||
|
||||
/* === in fe-exec.c === */
|
||||
|
||||
@@ -222,12 +223,12 @@ extern "C"
|
||||
* use
|
||||
*/
|
||||
extern PGresult *PQfn(PGconn *conn,
|
||||
int fnid,
|
||||
int *result_buf,
|
||||
int *result_len,
|
||||
int result_is_int,
|
||||
PQArgBlock *args,
|
||||
int nargs);
|
||||
int fnid,
|
||||
int *result_buf,
|
||||
int *result_len,
|
||||
int result_is_int,
|
||||
PQArgBlock *args,
|
||||
int nargs);
|
||||
|
||||
/* Accessor functions for PGresult objects */
|
||||
extern ExecStatusType PQresultStatus(PGresult *res);
|
||||
@@ -251,39 +252,40 @@ extern "C"
|
||||
/* Delete a PGresult */
|
||||
extern void PQclear(PGresult *res);
|
||||
|
||||
/* Make an empty PGresult with given status (some apps find this useful).
|
||||
* If conn is not NULL and status indicates an error, the conn's
|
||||
* errorMessage is copied.
|
||||
/*
|
||||
* Make an empty PGresult with given status (some apps find this
|
||||
* useful). If conn is not NULL and status indicates an error, the
|
||||
* conn's errorMessage is copied.
|
||||
*/
|
||||
extern PGresult * PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
|
||||
extern PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
|
||||
|
||||
/* === in fe-print.c === */
|
||||
|
||||
extern void PQprint(FILE *fout, /* output stream */
|
||||
PGresult *res,
|
||||
PQprintOpt *ps); /* option structure */
|
||||
extern void PQprint(FILE *fout, /* output stream */
|
||||
PGresult *res,
|
||||
PQprintOpt *ps); /* option structure */
|
||||
|
||||
/*
|
||||
* PQdisplayTuples() is a better version of PQprintTuples(), but both
|
||||
* are obsoleted by PQprint().
|
||||
*/
|
||||
extern void PQdisplayTuples(PGresult *res,
|
||||
FILE *fp, /* where to send the
|
||||
* output */
|
||||
int fillAlign, /* pad the fields with
|
||||
* spaces */
|
||||
const char *fieldSep, /* field separator */
|
||||
int printHeader, /* display headers? */
|
||||
int quiet);
|
||||
FILE *fp, /* where to send the
|
||||
* output */
|
||||
int fillAlign, /* pad the fields with
|
||||
* spaces */
|
||||
const char *fieldSep, /* field separator */
|
||||
int printHeader, /* display headers? */
|
||||
int quiet);
|
||||
|
||||
extern void PQprintTuples(PGresult *res,
|
||||
FILE *fout, /* output stream */
|
||||
int printAttName, /* print attribute names
|
||||
* or not */
|
||||
int terseOutput, /* delimiter bars or
|
||||
* not? */
|
||||
int width); /* width of column, if
|
||||
* 0, use variable width */
|
||||
FILE *fout, /* output stream */
|
||||
int printAttName, /* print attribute names
|
||||
* or not */
|
||||
int terseOutput, /* delimiter bars or
|
||||
* not? */
|
||||
int width); /* width of column, if
|
||||
* 0, use variable width */
|
||||
|
||||
/* Determine length of multibyte encoded char at *s */
|
||||
extern int PQmblen(unsigned char *s);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
* Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: libpq-int.h,v 1.7 1999/05/03 19:10:42 momjian Exp $
|
||||
* $Id: libpq-int.h,v 1.8 1999/05/25 16:15:14 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -62,23 +62,23 @@
|
||||
* Note that space[k] refers to the k'th byte starting from the physical
|
||||
* head of the block.
|
||||
*/
|
||||
typedef union pgresult_data PGresult_data;
|
||||
typedef union pgresult_data PGresult_data;
|
||||
|
||||
union pgresult_data
|
||||
{
|
||||
PGresult_data *next; /* link to next block, or NULL */
|
||||
char space[1]; /* dummy for accessing block as bytes */
|
||||
};
|
||||
union pgresult_data
|
||||
{
|
||||
PGresult_data *next; /* link to next block, or NULL */
|
||||
char space[1]; /* dummy for accessing block as bytes */
|
||||
};
|
||||
|
||||
/* Data about a single attribute (column) of a query result */
|
||||
|
||||
typedef struct pgresAttDesc
|
||||
{
|
||||
char *name; /* type name */
|
||||
Oid typid; /* type id */
|
||||
int typlen; /* type size */
|
||||
int atttypmod; /* type-specific modifier info */
|
||||
} PGresAttDesc;
|
||||
typedef struct pgresAttDesc
|
||||
{
|
||||
char *name; /* type name */
|
||||
Oid typid; /* type id */
|
||||
int typlen; /* type size */
|
||||
int atttypmod; /* type-specific modifier info */
|
||||
} PGresAttDesc;
|
||||
|
||||
/* Data for a single attribute of a single tuple */
|
||||
|
||||
@@ -98,123 +98,128 @@
|
||||
|
||||
#define NULL_LEN (-1) /* pg_result len for NULL value */
|
||||
|
||||
typedef struct pgresAttValue
|
||||
{
|
||||
int len; /* length in bytes of the value */
|
||||
char *value; /* actual value, plus terminating zero byte */
|
||||
} PGresAttValue;
|
||||
typedef struct pgresAttValue
|
||||
{
|
||||
int len; /* length in bytes of the value */
|
||||
char *value; /* actual value, plus terminating zero
|
||||
* byte */
|
||||
} PGresAttValue;
|
||||
|
||||
struct pg_result
|
||||
{
|
||||
int ntups;
|
||||
int numAttributes;
|
||||
PGresAttDesc *attDescs;
|
||||
PGresAttValue **tuples; /* each PGresTuple is an array of
|
||||
struct pg_result
|
||||
{
|
||||
int ntups;
|
||||
int numAttributes;
|
||||
PGresAttDesc *attDescs;
|
||||
PGresAttValue **tuples; /* each PGresTuple is an array of
|
||||
* PGresAttValue's */
|
||||
int tupArrSize; /* size of tuples array allocated */
|
||||
ExecStatusType resultStatus;
|
||||
char cmdStatus[CMDSTATUS_LEN]; /* cmd status from the
|
||||
int tupArrSize; /* size of tuples array allocated */
|
||||
ExecStatusType resultStatus;
|
||||
char cmdStatus[CMDSTATUS_LEN]; /* cmd status from the
|
||||
* last insert query */
|
||||
int binary; /* binary tuple values if binary == 1,
|
||||
int binary; /* binary tuple values if binary == 1,
|
||||
* otherwise ASCII */
|
||||
PGconn *conn; /* connection we did the query on, if any */
|
||||
char *errMsg; /* error message, or NULL if no error */
|
||||
PGconn *conn; /* connection we did the query on, if any */
|
||||
char *errMsg; /* error message, or NULL if no error */
|
||||
|
||||
/* All NULL attributes in the query result point to this null string */
|
||||
char null_field[1];
|
||||
/* All NULL attributes in the query result point to this null string */
|
||||
char null_field[1];
|
||||
|
||||
/* Space management information. Note that attDescs and errMsg,
|
||||
* if not null, point into allocated blocks. But tuples points
|
||||
* to a separately malloc'd block, so that we can realloc it.
|
||||
*/
|
||||
PGresult_data *curBlock; /* most recently allocated block */
|
||||
int curOffset; /* start offset of free space in block */
|
||||
int spaceLeft; /* number of free bytes remaining in block */
|
||||
};
|
||||
/*
|
||||
* Space management information. Note that attDescs and errMsg, if
|
||||
* not null, point into allocated blocks. But tuples points to a
|
||||
* separately malloc'd block, so that we can realloc it.
|
||||
*/
|
||||
PGresult_data *curBlock; /* most recently allocated block */
|
||||
int curOffset; /* start offset of free space in block */
|
||||
int spaceLeft; /* number of free bytes remaining in block */
|
||||
};
|
||||
|
||||
/* PGAsyncStatusType defines the state of the query-execution state machine */
|
||||
typedef enum
|
||||
{
|
||||
PGASYNC_IDLE, /* nothing's happening, dude */
|
||||
PGASYNC_BUSY, /* query in progress */
|
||||
PGASYNC_READY, /* result ready for PQgetResult */
|
||||
PGASYNC_COPY_IN, /* Copy In data transfer in progress */
|
||||
PGASYNC_COPY_OUT /* Copy Out data transfer in progress */
|
||||
} PGAsyncStatusType;
|
||||
typedef enum
|
||||
{
|
||||
PGASYNC_IDLE, /* nothing's happening, dude */
|
||||
PGASYNC_BUSY, /* query in progress */
|
||||
PGASYNC_READY, /* result ready for PQgetResult */
|
||||
PGASYNC_COPY_IN, /* Copy In data transfer in progress */
|
||||
PGASYNC_COPY_OUT /* Copy Out data transfer in progress */
|
||||
} PGAsyncStatusType;
|
||||
|
||||
/* large-object-access data ... allocated only if large-object code is used. */
|
||||
typedef struct pgLobjfuncs
|
||||
{
|
||||
Oid fn_lo_open; /* OID of backend function lo_open */
|
||||
Oid fn_lo_close;/* OID of backend function lo_close */
|
||||
Oid fn_lo_creat;/* OID of backend function lo_creat */
|
||||
Oid fn_lo_unlink; /* OID of backend function
|
||||
* lo_unlink */
|
||||
Oid fn_lo_lseek;/* OID of backend function lo_lseek */
|
||||
Oid fn_lo_tell; /* OID of backend function lo_tell */
|
||||
Oid fn_lo_read; /* OID of backend function LOread */
|
||||
Oid fn_lo_write;/* OID of backend function LOwrite */
|
||||
} PGlobjfuncs;
|
||||
typedef struct pgLobjfuncs
|
||||
{
|
||||
Oid fn_lo_open; /* OID of backend function lo_open */
|
||||
Oid fn_lo_close; /* OID of backend function lo_close */
|
||||
Oid fn_lo_creat; /* OID of backend function lo_creat */
|
||||
Oid fn_lo_unlink; /* OID of backend function lo_unlink */
|
||||
Oid fn_lo_lseek; /* OID of backend function lo_lseek */
|
||||
Oid fn_lo_tell; /* OID of backend function lo_tell */
|
||||
Oid fn_lo_read; /* OID of backend function LOread */
|
||||
Oid fn_lo_write; /* OID of backend function LOwrite */
|
||||
} PGlobjfuncs;
|
||||
|
||||
/* PGconn stores all the state data associated with a single connection
|
||||
* to a backend.
|
||||
*/
|
||||
struct pg_conn
|
||||
{
|
||||
/* Saved values of connection options */
|
||||
char *pghost; /* the machine on which the server is
|
||||
struct pg_conn
|
||||
{
|
||||
/* Saved values of connection options */
|
||||
char *pghost; /* the machine on which the server is
|
||||
* running */
|
||||
char *pgport; /* the server's communication port */
|
||||
char *pgtty; /* tty on which the backend messages is
|
||||
char *pgport; /* the server's communication port */
|
||||
char *pgtty; /* tty on which the backend messages is
|
||||
* displayed (NOT ACTUALLY USED???) */
|
||||
char *pgoptions; /* options to start the backend with */
|
||||
char *dbName; /* database name */
|
||||
char *pguser; /* Postgres username and password, if any */
|
||||
char *pgpass;
|
||||
char *pgoptions; /* options to start the backend with */
|
||||
char *dbName; /* database name */
|
||||
char *pguser; /* Postgres username and password, if any */
|
||||
char *pgpass;
|
||||
|
||||
/* Optional file to write trace info to */
|
||||
FILE *Pfdebug;
|
||||
/* Optional file to write trace info to */
|
||||
FILE *Pfdebug;
|
||||
|
||||
/* Callback procedure for notice/error message processing */
|
||||
PQnoticeProcessor noticeHook;
|
||||
void *noticeArg;
|
||||
/* Callback procedure for notice/error message processing */
|
||||
PQnoticeProcessor noticeHook;
|
||||
void *noticeArg;
|
||||
|
||||
/* Status indicators */
|
||||
ConnStatusType status;
|
||||
PGAsyncStatusType asyncStatus;
|
||||
Dllist *notifyList; /* Notify msgs not yet handed to application */
|
||||
/* Status indicators */
|
||||
ConnStatusType status;
|
||||
PGAsyncStatusType asyncStatus;
|
||||
Dllist *notifyList; /* Notify msgs not yet handed to
|
||||
* application */
|
||||
|
||||
/* Connection data */
|
||||
int sock; /* Unix FD for socket, -1 if not connected */
|
||||
SockAddr laddr; /* Local address */
|
||||
SockAddr raddr; /* Remote address */
|
||||
int raddr_len; /* Length of remote address */
|
||||
/* Connection data */
|
||||
int sock; /* Unix FD for socket, -1 if not connected */
|
||||
SockAddr laddr; /* Local address */
|
||||
SockAddr raddr; /* Remote address */
|
||||
int raddr_len; /* Length of remote address */
|
||||
|
||||
/* Miscellaneous stuff */
|
||||
int be_pid; /* PID of backend --- needed for cancels */
|
||||
int be_key; /* key of backend --- needed for cancels */
|
||||
char salt[2]; /* password salt received from backend */
|
||||
PGlobjfuncs *lobjfuncs; /* private state for large-object access fns */
|
||||
/* Miscellaneous stuff */
|
||||
int be_pid; /* PID of backend --- needed for cancels */
|
||||
int be_key; /* key of backend --- needed for cancels */
|
||||
char salt[2]; /* password salt received from backend */
|
||||
PGlobjfuncs *lobjfuncs; /* private state for large-object access
|
||||
* fns */
|
||||
|
||||
/* Buffer for data received from backend and not yet processed */
|
||||
char *inBuffer; /* currently allocated buffer */
|
||||
int inBufSize; /* allocated size of buffer */
|
||||
int inStart; /* offset to first unconsumed data in buffer */
|
||||
int inCursor; /* next byte to tentatively consume */
|
||||
int inEnd; /* offset to first position after avail data */
|
||||
/* Buffer for data received from backend and not yet processed */
|
||||
char *inBuffer; /* currently allocated buffer */
|
||||
int inBufSize; /* allocated size of buffer */
|
||||
int inStart; /* offset to first unconsumed data in
|
||||
* buffer */
|
||||
int inCursor; /* next byte to tentatively consume */
|
||||
int inEnd; /* offset to first position after avail
|
||||
* data */
|
||||
|
||||
/* Buffer for data not yet sent to backend */
|
||||
char *outBuffer; /* currently allocated buffer */
|
||||
int outBufSize; /* allocated size of buffer */
|
||||
int outCount; /* number of chars waiting in buffer */
|
||||
/* Buffer for data not yet sent to backend */
|
||||
char *outBuffer; /* currently allocated buffer */
|
||||
int outBufSize; /* allocated size of buffer */
|
||||
int outCount; /* number of chars waiting in buffer */
|
||||
|
||||
/* Status for asynchronous result construction */
|
||||
PGresult *result; /* result being constructed */
|
||||
PGresAttValue *curTuple; /* tuple currently being read */
|
||||
/* Status for asynchronous result construction */
|
||||
PGresult *result; /* result being constructed */
|
||||
PGresAttValue *curTuple; /* tuple currently being read */
|
||||
|
||||
/* Message space. Placed last for code-size reasons. */
|
||||
char errorMessage[ERROR_MSG_LENGTH];
|
||||
};
|
||||
/* Message space. Placed last for code-size reasons. */
|
||||
char errorMessage[ERROR_MSG_LENGTH];
|
||||
};
|
||||
|
||||
/* ----------------
|
||||
* Internal functions of libpq
|
||||
@@ -232,8 +237,8 @@ extern int pqPacketSend(PGconn *conn, const char *buf, size_t len);
|
||||
/* === in fe-exec.c === */
|
||||
|
||||
extern void pqSetResultError(PGresult *res, const char *msg);
|
||||
extern void * pqResultAlloc(PGresult *res, int nBytes, int isBinary);
|
||||
extern char * pqResultStrdup(PGresult *res, const char *str);
|
||||
extern void *pqResultAlloc(PGresult *res, int nBytes, int isBinary);
|
||||
extern char *pqResultStrdup(PGresult *res, const char *str);
|
||||
extern void pqClearAsyncResult(PGconn *conn);
|
||||
|
||||
/* === in fe-misc.c === */
|
||||
|
||||
@@ -6,13 +6,18 @@ BOOL WINAPI
|
||||
DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
|
||||
LPVOID lpReserved)
|
||||
{
|
||||
WSADATA wsaData;
|
||||
switch (fdwReason) {
|
||||
WSADATA wsaData;
|
||||
|
||||
switch (fdwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
if (WSAStartup(MAKEWORD(1,1),&wsaData))
|
||||
if (WSAStartup(MAKEWORD(1, 1), &wsaData))
|
||||
{
|
||||
/* No really good way to do error handling here,
|
||||
* since we don't know how we were loaded */
|
||||
|
||||
/*
|
||||
* No really good way to do error handling here, since we
|
||||
* don't know how we were loaded
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user