Make PSQLexec's behavior on loss of connection more reasonable;
report original error before attempting reset, not after.
This commit is contained in:
parent
19ff2e4d55
commit
0e6d72db55
|
@ -364,34 +364,43 @@ PSQLexec(PsqlSettings *pset, const char *query)
|
||||||
|
|
||||||
pqsignal(SIGINT, SIG_DFL); /* now control-C is back to normal */
|
pqsignal(SIGINT, SIG_DFL); /* now control-C is back to normal */
|
||||||
|
|
||||||
if (PQstatus(pset->db) == CONNECTION_BAD)
|
if (PQstatus(pset->db) == CONNECTION_OK)
|
||||||
{
|
|
||||||
fputs("The connection to the server was lost. Attempting reset: ", stderr);
|
|
||||||
PQreset(pset->db);
|
|
||||||
if (PQstatus(pset->db) == CONNECTION_BAD)
|
|
||||||
{
|
|
||||||
fputs("Failed.\n", stderr);
|
|
||||||
PQfinish(pset->db);
|
|
||||||
PQclear(res);
|
|
||||||
pset->db = NULL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fputs("Succeeded.\n", stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res && (PQresultStatus(res) == PGRES_COMMAND_OK ||
|
|
||||||
PQresultStatus(res) == PGRES_TUPLES_OK ||
|
|
||||||
PQresultStatus(res) == PGRES_COPY_IN ||
|
|
||||||
PQresultStatus(res) == PGRES_COPY_OUT)
|
|
||||||
)
|
|
||||||
return res;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if (res && (PQresultStatus(res) == PGRES_COMMAND_OK ||
|
||||||
|
PQresultStatus(res) == PGRES_TUPLES_OK ||
|
||||||
|
PQresultStatus(res) == PGRES_COPY_IN ||
|
||||||
|
PQresultStatus(res) == PGRES_COPY_OUT)
|
||||||
|
)
|
||||||
|
return res; /* Normal success case... */
|
||||||
|
/* Normal failure case --- display error and return NULL */
|
||||||
fputs(PQerrorMessage(pset->db), pset->queryFout);
|
fputs(PQerrorMessage(pset->db), pset->queryFout);
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Lost connection. Report whatever libpq has to say,
|
||||||
|
* then consider recovery.
|
||||||
|
*/
|
||||||
|
fputs(PQerrorMessage(pset->db), pset->queryFout);
|
||||||
|
PQclear(res);
|
||||||
|
if (!pset->cur_cmd_interactive)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: connection to server was lost\n",
|
||||||
|
pset->progname);
|
||||||
|
exit(EXIT_BADCONN);
|
||||||
|
}
|
||||||
|
fputs("The connection to the server was lost. Attempting reset: ", stderr);
|
||||||
|
fflush(stderr);
|
||||||
|
PQreset(pset->db);
|
||||||
|
if (PQstatus(pset->db) == CONNECTION_BAD)
|
||||||
|
{
|
||||||
|
fputs("Failed.\n", stderr);
|
||||||
|
PQfinish(pset->db);
|
||||||
|
pset->db = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fputs("Succeeded.\n", stderr);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -517,17 +526,19 @@ SendQuery(PsqlSettings *pset, const char *query)
|
||||||
{
|
{
|
||||||
if (!pset->cur_cmd_interactive)
|
if (!pset->cur_cmd_interactive)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: connection to server was lost", pset->progname);
|
fprintf(stderr, "%s: connection to server was lost\n",
|
||||||
|
pset->progname);
|
||||||
exit(EXIT_BADCONN);
|
exit(EXIT_BADCONN);
|
||||||
}
|
}
|
||||||
fputs("The connection to the server was lost. Attempting reset: ", stderr);
|
fputs("The connection to the server was lost. Attempting reset: ", stderr);
|
||||||
|
fflush(stderr);
|
||||||
PQreset(pset->db);
|
PQreset(pset->db);
|
||||||
if (PQstatus(pset->db) == CONNECTION_BAD)
|
if (PQstatus(pset->db) == CONNECTION_BAD)
|
||||||
{
|
{
|
||||||
fputs("Failed.\n", stderr);
|
fputs("Failed.\n", stderr);
|
||||||
PQfinish(pset->db);
|
PQfinish(pset->db);
|
||||||
PQclear(results);
|
|
||||||
pset->db = NULL;
|
pset->db = NULL;
|
||||||
|
PQclear(results);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue