*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.17 1996/08/10 05:02:53 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.18 1996/08/14 04:56:48 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
bool querySent = 0;
bool interactive;
READ_ROUTINE GetNextLine;
+ bool connected = 1;
+ /* We are connected to the backend (last time we looked) */
+ bool eof = 0;
+ /* We've reached the end of our command input. */
interactive = ((source == stdin) && !settings->notty);
#define PROMPT "=> "
query[0] = '\0';
/* main loop for getting queries and executing them */
- while ((line = GetNextLine(settings->prompt, source)) != NULL)
- {
- exitStatus = 0;
+ while (connected && !eof) {
+ line = GetNextLine(settings->prompt, source);
+ if (line == NULL) { /* No more input. Time to quit */
+ printf("EOF\n"); /* Goes on prompt line */
+ eof = 1;
+ } else {
+ exitStatus = 0;
line = rightTrim(line); /* remove whitespaces on the right, incl. \n's */
if (line[0] == '\0') {
exitStatus = SendQuery(settings, query);
querySent = 1;
+ if (PQstatus(settings->db) == CONNECTION_BAD) {
+ connected = 0;
+ fprintf(stderr, "We have lost the connection to the backend, so "
+ "further processing is impossible. Terminating.\n");
+ }
}
-
- free(line); /* free storage malloc'd by GetNextLine */
- } /* while */
- return exitStatus;
+ free(line); /* free storage malloc'd by GetNextLine */
+ }
+ } /* while */
+ return exitStatus;
}
int
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.15 1996/08/13 01:34:27 scrappy Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.16 1996/08/14 04:56:55 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
/* check to see if the query string is too long */
if (strlen(query) > MAX_MESSAGE_LEN) {
- sprintf(conn->errorMessage, "PQexec() -- query is too long. Maximum length is %d\n", MAX_MESSAGE_LEN -2 );
+ sprintf(conn->errorMessage, "PQexec() -- query is too long. "
+ "Maximum length is %d\n", MAX_MESSAGE_LEN -2 );
return NULL;
}
+ /* Don't try to send if we know there's no live connection. */
+ if (conn->status != CONNECTION_OK) {
+ sprintf(conn->errorMessage, "PQexec() -- There is no connection "
+ "to the backend.\n");
+ return NULL;
+ }
+
/* the frontend-backend protocol uses 'Q' to designate queries */
sprintf(buffer,"Q%s",query);
/* send the query to the backend; */
if (pqPuts(buffer,pfout, pfdebug) == 1) {
(void) sprintf(conn->errorMessage,
- "PQexec() -- while sending query: %s\n-- fprintf to Pfout failed: errno=%d\n%s\n",
+ "PQexec() -- while sending query: %s\n"
+ "-- fprintf to Pfout failed: errno=%d\n%s\n",
query, errno,strerror(errno));
return NULL;
}
if (id == EOF) {
/* hmm, no response from the backend-end, that's bad */
(void) sprintf(conn->errorMessage,
- "PQexec() -- No response from backend\n");
+ "PQexec() -- Request was sent to backend, but backend "
+ "closed the channel before "
+ "responding. This probably means the backend "
+ "terminated abnormally before or while processing "
+ "the request.\n");
+ conn->status = CONNECTION_BAD; /* No more connection to backend */
return (PGresult*)NULL;
}