aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpq/fe-exec.c')
-rw-r--r--src/interfaces/libpq/fe-exec.c200
1 files changed, 108 insertions, 92 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 6b3999193d5..6617bb2bc30 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.93 2000/03/14 23:59:23 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.94 2000/04/12 17:17:14 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -27,7 +27,7 @@
#endif
/* keep this in same order as ExecStatusType in libpq-fe.h */
-char * const pgresStatus[] = {
+char *const pgresStatus[] = {
"PGRES_EMPTY_QUERY",
"PGRES_COMMAND_OK",
"PGRES_TUPLES_OK",
@@ -47,7 +47,7 @@ char * const pgresStatus[] = {
static void pqCatenateResultError(PGresult *res, const char *msg);
static void saveErrorResult(PGconn *conn);
static PGresult *prepareAsyncResult(PGconn *conn);
-static int addTuple(PGresult *res, PGresAttValue *tup);
+static int addTuple(PGresult *res, PGresAttValue * tup);
static void parseInput(PGconn *conn);
static void handleSendFailure(PGconn *conn);
static int getRowDescriptions(PGconn *conn);
@@ -178,7 +178,7 @@ PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status)
/* defaults... */
result->noticeHook = NULL;
result->noticeArg = NULL;
- result->client_encoding = 0; /* should be SQL_ASCII */
+ result->client_encoding = 0; /* should be SQL_ASCII */
}
return result;
@@ -324,7 +324,7 @@ pqSetResultError(PGresult *res, const char *msg)
static void
pqCatenateResultError(PGresult *res, const char *msg)
{
- PQExpBufferData errorBuf;
+ PQExpBufferData errorBuf;
if (!res || !msg)
return;
@@ -391,7 +391,9 @@ pqClearAsyncResult(PGconn *conn)
static void
saveErrorResult(PGconn *conn)
{
- /* If no old async result, just let PQmakeEmptyPGresult make one.
+
+ /*
+ * If no old async result, just let PQmakeEmptyPGresult make one.
* Likewise if old result is not an error message.
*/
if (conn->result == NULL ||
@@ -421,9 +423,9 @@ prepareAsyncResult(PGconn *conn)
PGresult *res;
/*
- * 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 */
@@ -432,9 +434,10 @@ prepareAsyncResult(PGconn *conn)
res = PQmakeEmptyPGresult(conn, PGRES_FATAL_ERROR);
else
{
+
/*
- * Make sure PQerrorMessage agrees with result; it could
- * be different if we have concatenated messages.
+ * Make sure PQerrorMessage agrees with result; it could be
+ * different if we have concatenated messages.
*/
resetPQExpBuffer(&conn->errorMessage);
appendPQExpBufferStr(&conn->errorMessage,
@@ -449,7 +452,7 @@ prepareAsyncResult(PGconn *conn)
* Returns TRUE if OK, FALSE if not enough memory to add the row
*/
static int
-addTuple(PGresult *res, PGresAttValue *tup)
+addTuple(PGresult *res, PGresAttValue * tup)
{
if (res->ntups >= res->tupArrSize)
{
@@ -521,7 +524,7 @@ PQsendQuery(PGconn *conn, const char *query)
if (conn->asyncStatus != PGASYNC_IDLE)
{
printfPQExpBuffer(&conn->errorMessage,
- "PQsendQuery() -- another query already in progress.\n");
+ "PQsendQuery() -- another query already in progress.\n");
return 0;
}
@@ -532,21 +535,21 @@ PQsendQuery(PGconn *conn, const char *query)
/* send the query to the backend; */
/*
- * in order to guarantee that we don't send a partial query
- * where we would become out of sync with the backend and/or
- * block during a non-blocking connection we must first flush
- * the send buffer before sending more data
+ * in order to guarantee that we don't send a partial query where we
+ * would become out of sync with the backend and/or block during a
+ * non-blocking connection we must first flush the send buffer before
+ * sending more data
*
- * an alternative is to implement 'queue reservations' where
- * we are able to roll up a transaction
- * (the 'Q' along with our query) and make sure we have
- * enough space for it all in the send buffer.
+ * an alternative is to implement 'queue reservations' where we are able
+ * to roll up a transaction (the 'Q' along with our query) and make
+ * sure we have enough space for it all in the send buffer.
*/
if (pqIsnonblocking(conn))
{
+
/*
- * the buffer must have emptied completely before we allow
- * a new query to be buffered
+ * the buffer must have emptied completely before we allow a new
+ * query to be buffered
*/
if (pqFlush(conn))
return 0;
@@ -555,20 +558,21 @@ PQsendQuery(PGconn *conn, const char *query)
if (pqPutnchar("Q", 1, conn) ||
pqPuts(query, conn))
{
- handleSendFailure(conn);
+ handleSendFailure(conn);
return 0;
}
+
/*
- * give the data a push, ignore the return value as
- * ConsumeInput() will do any aditional flushing if needed
+ * give the data a push, ignore the return value as ConsumeInput()
+ * will do any aditional flushing if needed
*/
- (void) pqFlush(conn);
+ (void) pqFlush(conn);
}
else
{
- /*
- * the frontend-backend protocol uses 'Q' to
- * designate queries
+
+ /*
+ * the frontend-backend protocol uses 'Q' to designate queries
*/
if (pqPutnchar("Q", 1, conn) ||
pqPuts(query, conn) ||
@@ -596,16 +600,17 @@ PQsendQuery(PGconn *conn, const char *query)
static void
handleSendFailure(PGconn *conn)
{
+
/*
* Accept any available input data, ignoring errors. Note that if
* pqReadData decides the backend has closed the channel, it will
* close our side of the socket --- that's just what we want here.
*/
while (pqReadData(conn) > 0)
- /* loop until no more data readable */ ;
+ /* loop until no more data readable */ ;
/*
- * Parse any available input messages. Since we are in PGASYNC_IDLE
+ * Parse any available input messages. Since we are in PGASYNC_IDLE
* state, only NOTICE and NOTIFY messages will be eaten.
*/
parseInput(conn);
@@ -631,11 +636,11 @@ PQconsumeInput(PGconn *conn)
*/
if (pqReadData(conn) < 0)
{
+
/*
- * for non-blocking connections
- * try to flush the send-queue otherwise we may never get a
- * responce for something that may not have already been sent
- * because it's in our write buffer!
+ * for non-blocking connections try to flush the send-queue
+ * otherwise we may never get a responce for something that may
+ * not have already been sent because it's in our write buffer!
*/
if (pqIsnonblocking(conn))
(void) pqFlush(conn);
@@ -686,11 +691,11 @@ parseInput(PGconn *conn)
* OUT; always process them right away.
*
* Most other messages should only be processed while in BUSY state.
- * (In particular, in READY state we hold off further parsing until
- * the application collects the current PGresult.)
+ * (In particular, in READY state we hold off further parsing
+ * until the application collects the current PGresult.)
*
- * However, if the state is IDLE then we got trouble; we need to
- * deal with the unexpected message somehow.
+ * However, if the state is IDLE then we got trouble; we need to deal
+ * with the unexpected message somehow.
*/
if (id == 'A')
{
@@ -707,6 +712,7 @@ parseInput(PGconn *conn)
/* If not IDLE state, just wait ... */
if (conn->asyncStatus != PGASYNC_IDLE)
return;
+
/*
* Unexpected message in IDLE state; need to recover somehow.
* ERROR messages are displayed using the notice processor;
@@ -723,7 +729,7 @@ parseInput(PGconn *conn)
else
{
sprintf(noticeWorkspace,
- "Backend message type 0x%02x arrived while idle\n",
+ "Backend message type 0x%02x arrived while idle\n",
id);
DONOTICE(conn, noticeWorkspace);
/* Discard the unexpected message; good idea?? */
@@ -733,6 +739,7 @@ parseInput(PGconn *conn)
}
else
{
+
/*
* In BUSY state, we can process everything.
*/
@@ -743,13 +750,13 @@ parseInput(PGconn *conn)
return;
if (conn->result == NULL)
conn->result = PQmakeEmptyPGresult(conn,
- PGRES_COMMAND_OK);
+ PGRES_COMMAND_OK);
strncpy(conn->result->cmdStatus, conn->workBuffer.data,
CMDSTATUS_LEN);
conn->asyncStatus = PGASYNC_READY;
break;
case 'E': /* error return */
- if (pqGets(& conn->errorMessage, conn))
+ if (pqGets(&conn->errorMessage, conn))
return;
/* build an error result holding the error message */
saveErrorResult(conn);
@@ -823,7 +830,7 @@ parseInput(PGconn *conn)
else
{
sprintf(noticeWorkspace,
- "Backend sent D message without prior T\n");
+ "Backend sent D message without prior T\n");
DONOTICE(conn, noticeWorkspace);
/* Discard the unexpected message; good idea?? */
conn->inStart = conn->inEnd;
@@ -840,7 +847,7 @@ parseInput(PGconn *conn)
else
{
sprintf(noticeWorkspace,
- "Backend sent B message without prior T\n");
+ "Backend sent B message without prior T\n");
DONOTICE(conn, noticeWorkspace);
/* Discard the unexpected message; good idea?? */
conn->inStart = conn->inEnd;
@@ -855,10 +862,10 @@ parseInput(PGconn *conn)
break;
default:
printfPQExpBuffer(&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",
- id);
+ "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",
+ id);
/* build an error result holding the error message */
saveErrorResult(conn);
/* Discard the unexpected message; good idea?? */
@@ -963,6 +970,7 @@ getAnotherTuple(PGconn *conn, int binary)
PGresult *result = conn->result;
int nfields = result->numAttributes;
PGresAttValue *tup;
+
/* the backend sends us a bitmap of which attributes are null */
char std_bitmap[64]; /* used unless it doesn't fit */
char *bitmap = std_bitmap;
@@ -1055,7 +1063,9 @@ getAnotherTuple(PGconn *conn, int binary)
outOfMemory:
/* Replace partially constructed result with an error result */
- /* we do NOT use saveErrorResult() here, because of the likelihood
+
+ /*
+ * we do NOT use saveErrorResult() here, because of the likelihood
* that there's not enough memory to concatenate messages...
*/
pqClearAsyncResult(conn);
@@ -1116,8 +1126,10 @@ PQgetResult(PGconn *conn)
if (pqWait(TRUE, FALSE, conn) ||
pqReadData(conn) < 0)
{
- /* conn->errorMessage has been set by pqWait or pqReadData.
- * We want to append it to any already-received error message.
+
+ /*
+ * conn->errorMessage has been set by pqWait or pqReadData. We
+ * want to append it to any already-received error message.
*/
saveErrorResult(conn);
conn->asyncStatus = PGASYNC_IDLE;
@@ -1173,12 +1185,12 @@ PQexec(PGconn *conn, const char *query)
{
PGresult *result;
PGresult *lastResult;
- bool savedblocking;
+ bool savedblocking;
/*
- * we assume anyone calling PQexec wants blocking behaviour,
- * we force the blocking status of the connection to blocking
- * for the duration of this function and restore it on return
+ * we assume anyone calling PQexec wants blocking behaviour, we force
+ * the blocking status of the connection to blocking for the duration
+ * of this function and restore it on return
*/
savedblocking = pqIsnonblocking(conn);
if (PQsetnonblocking(conn, FALSE) == -1)
@@ -1205,15 +1217,15 @@ PQexec(PGconn *conn, const char *query)
/* OK to send the message */
if (!PQsendQuery(conn, query))
- goto errout; /* restore blocking status */
+ goto errout; /* restore blocking status */
/*
* For backwards compatibility, return the last result if there are
* more than one --- but merge error messages if we get more than one
* error result.
*
- * We have to stop if we see copy in/out, however.
- * We will resume parsing when application calls PQendcopy.
+ * We have to stop if we see copy in/out, however. We will resume parsing
+ * when application calls PQendcopy.
*/
lastResult = NULL;
while ((result = PQgetResult(conn)) != NULL)
@@ -1260,11 +1272,13 @@ errout:
static int
getNotice(PGconn *conn)
{
- /* Since the Notice might be pretty long, we create a temporary
- * PQExpBuffer rather than using conn->workBuffer. workBuffer is
+
+ /*
+ * Since the Notice might be pretty long, we create a temporary
+ * PQExpBuffer rather than using conn->workBuffer. workBuffer is
* intended for stuff that is expected to be short.
*/
- PQExpBufferData noticeBuf;
+ PQExpBufferData noticeBuf;
initPQExpBuffer(&noticeBuf);
if (pqGets(&noticeBuf, conn))
@@ -1532,13 +1546,13 @@ PQendcopy(PGconn *conn)
conn->asyncStatus != PGASYNC_COPY_OUT)
{
printfPQExpBuffer(&conn->errorMessage,
- "PQendcopy() -- I don't think there's a copy in progress.\n");
+ "PQendcopy() -- I don't think there's a copy in progress.\n");
return 1;
}
/*
- * make sure no data is waiting to be sent,
- * abort if we are non-blocking and the flush fails
+ * make sure no data is waiting to be sent, abort if we are
+ * non-blocking and the flush fails
*/
if (pqFlush(conn) && pqIsnonblocking(conn))
return (1);
@@ -1632,7 +1646,7 @@ PQfn(PGconn *conn,
return NULL;
}
- if (pqPuts("F ", conn) || /* function */
+ if (pqPuts("F ", conn) || /* function */
pqPutInt(fnid, 4, conn) || /* function id */
pqPutInt(nargs, 4, conn)) /* # of args */
{
@@ -1730,7 +1744,7 @@ PQfn(PGconn *conn,
{
/* The backend violates the protocol. */
printfPQExpBuffer(&conn->errorMessage,
- "FATAL: PQfn: protocol error: id=0x%x\n",
+ "FATAL: PQfn: protocol error: id=0x%x\n",
id);
saveErrorResult(conn);
conn->inStart = conn->inCursor;
@@ -1764,7 +1778,7 @@ PQfn(PGconn *conn,
default:
/* The backend violates the protocol. */
printfPQExpBuffer(&conn->errorMessage,
- "FATAL: PQfn: protocol error: id=0x%x\n",
+ "FATAL: PQfn: protocol error: id=0x%x\n",
id);
saveErrorResult(conn);
conn->inStart = conn->inCursor;
@@ -1775,9 +1789,10 @@ PQfn(PGconn *conn,
needInput = false;
}
- /* We fall out of the loop only upon failing to read data.
- * conn->errorMessage has been set by pqWait or pqReadData.
- * We want to append it to any already-received error message.
+ /*
+ * We fall out of the loop only upon failing to read data.
+ * conn->errorMessage has been set by pqWait or pqReadData. We want to
+ * append it to any already-received error message.
*/
saveErrorResult(conn);
return prepareAsyncResult(conn);
@@ -1842,7 +1857,7 @@ PQbinaryTuples(const PGresult *res)
static int
check_field_number(const char *routineName, const PGresult *res, int field_num)
{
- char noticeBuf[128];
+ char noticeBuf[128];
if (!res)
return FALSE; /* no way to display error message... */
@@ -1864,7 +1879,7 @@ static int
check_tuple_field_number(const char *routineName, const PGresult *res,
int tup_num, int field_num)
{
- char noticeBuf[128];
+ char noticeBuf[128];
if (!res)
return FALSE; /* no way to display error message... */
@@ -1997,13 +2012,14 @@ PQcmdStatus(PGresult *res)
char *
PQoidStatus(const PGresult *res)
{
- /*
- * This must be enough to hold the result. Don't laugh, this is
- * better than what this function used to do.
+
+ /*
+ * This must be enough to hold the result. Don't laugh, this is better
+ * than what this function used to do.
*/
static char buf[24];
- size_t len;
+ size_t len;
if (!res || !res->cmdStatus || strncmp(res->cmdStatus, "INSERT ", 7) != 0)
return "";
@@ -2019,25 +2035,25 @@ PQoidStatus(const PGresult *res)
/*
PQoidValue -
- a perhaps preferable form of the above which just returns
+ a perhaps preferable form of the above which just returns
an Oid type
*/
Oid
PQoidValue(const PGresult *res)
{
- char * endptr = NULL;
- long int result;
+ char *endptr = NULL;
+ long int result;
- if (!res || !res->cmdStatus || strncmp(res->cmdStatus, "INSERT ", 7) != 0)
- return InvalidOid;
+ if (!res || !res->cmdStatus || strncmp(res->cmdStatus, "INSERT ", 7) != 0)
+ return InvalidOid;
- errno = 0;
- result = strtoul(res->cmdStatus + 7, &endptr, 10);
+ errno = 0;
+ result = strtoul(res->cmdStatus + 7, &endptr, 10);
- if (!endptr || (*endptr != ' ' && *endptr != '\0') || errno == ERANGE)
- return InvalidOid;
- else
- return (Oid)result;
+ if (!endptr || (*endptr != ' ' && *endptr != '\0') || errno == ERANGE)
+ return InvalidOid;
+ else
+ return (Oid) result;
}
/*
@@ -2048,7 +2064,7 @@ PQoidValue(const PGresult *res)
char *
PQcmdTuples(PGresult *res)
{
- char noticeBuf[128];
+ char noticeBuf[128];
if (!res)
return "";
@@ -2160,9 +2176,9 @@ PQsetnonblocking(PGconn *conn, int arg)
/*
* to guarantee constancy for flushing/query/result-polling behavior
* we need to flush the send queue at this point in order to guarantee
- * proper behavior.
- * this is ok because either they are making a transition
- * _from_ or _to_ blocking mode, either way we can block them.
+ * proper behavior. this is ok because either they are making a
+ * transition _from_ or _to_ blocking mode, either way we can block
+ * them.
*/
/* if we are going from blocking to non-blocking flush here */
if (pqFlush(conn))