mirror of https://github.com/postgres/postgres
Fix a couple of places where psql might fail to report a suitable error
if PQexec returns NULL. These don't seem significant enough to be worth back-patching, but they ought to get fixed ...
This commit is contained in:
parent
b9984ade83
commit
63c3b9903b
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
|
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.139 2008/05/14 19:10:29 tgl Exp $
|
* $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.140 2008/08/16 01:36:35 tgl Exp $
|
||||||
*/
|
*/
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
@ -880,16 +880,20 @@ SendQuery(const char *query)
|
||||||
/* If we made a temporary savepoint, possibly release/rollback */
|
/* If we made a temporary savepoint, possibly release/rollback */
|
||||||
if (on_error_rollback_savepoint)
|
if (on_error_rollback_savepoint)
|
||||||
{
|
{
|
||||||
PGresult *svptres;
|
const char *svptcmd;
|
||||||
|
|
||||||
transaction_status = PQtransactionStatus(pset.db);
|
transaction_status = PQtransactionStatus(pset.db);
|
||||||
|
|
||||||
/* We always rollback on an error */
|
|
||||||
if (transaction_status == PQTRANS_INERROR)
|
if (transaction_status == PQTRANS_INERROR)
|
||||||
svptres = PQexec(pset.db, "ROLLBACK TO pg_psql_temporary_savepoint");
|
{
|
||||||
/* If they are no longer in a transaction, then do nothing */
|
/* We always rollback on an error */
|
||||||
|
svptcmd = "ROLLBACK TO pg_psql_temporary_savepoint";
|
||||||
|
}
|
||||||
else if (transaction_status != PQTRANS_INTRANS)
|
else if (transaction_status != PQTRANS_INTRANS)
|
||||||
svptres = NULL;
|
{
|
||||||
|
/* If they are no longer in a transaction, then do nothing */
|
||||||
|
svptcmd = NULL;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -901,20 +905,27 @@ SendQuery(const char *query)
|
||||||
(strcmp(PQcmdStatus(results), "SAVEPOINT") == 0 ||
|
(strcmp(PQcmdStatus(results), "SAVEPOINT") == 0 ||
|
||||||
strcmp(PQcmdStatus(results), "RELEASE") == 0 ||
|
strcmp(PQcmdStatus(results), "RELEASE") == 0 ||
|
||||||
strcmp(PQcmdStatus(results), "ROLLBACK") == 0))
|
strcmp(PQcmdStatus(results), "ROLLBACK") == 0))
|
||||||
svptres = NULL;
|
svptcmd = NULL;
|
||||||
else
|
else
|
||||||
svptres = PQexec(pset.db, "RELEASE pg_psql_temporary_savepoint");
|
svptcmd = "RELEASE pg_psql_temporary_savepoint";
|
||||||
}
|
|
||||||
if (svptres && PQresultStatus(svptres) != PGRES_COMMAND_OK)
|
|
||||||
{
|
|
||||||
psql_error("%s", PQerrorMessage(pset.db));
|
|
||||||
PQclear(results);
|
|
||||||
PQclear(svptres);
|
|
||||||
ResetCancelConn();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PQclear(svptres);
|
if (svptcmd)
|
||||||
|
{
|
||||||
|
PGresult *svptres;
|
||||||
|
|
||||||
|
svptres = PQexec(pset.db, svptcmd);
|
||||||
|
if (PQresultStatus(svptres) != PGRES_COMMAND_OK)
|
||||||
|
{
|
||||||
|
psql_error("%s", PQerrorMessage(pset.db));
|
||||||
|
PQclear(svptres);
|
||||||
|
|
||||||
|
PQclear(results);
|
||||||
|
ResetCancelConn();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PQclear(svptres);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PQclear(results);
|
PQclear(results);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
|
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.170 2008/03/29 19:19:14 tgl Exp $
|
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.171 2008/08/16 01:36:35 tgl Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
@ -2577,11 +2577,11 @@ exec_query(const char *query)
|
||||||
|
|
||||||
result = PQexec(pset.db, query);
|
result = PQexec(pset.db, query);
|
||||||
|
|
||||||
if (result != NULL && PQresultStatus(result) != PGRES_TUPLES_OK)
|
if (PQresultStatus(result) != PGRES_TUPLES_OK)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
psql_error("tab completion: %s failed - %s\n",
|
psql_error("tab completion query failed: %s\nQuery was:\n%s\n",
|
||||||
query, PQresStatus(PQresultStatus(result)));
|
PQerrorMessage(pset.db), query);
|
||||||
#endif
|
#endif
|
||||||
PQclear(result);
|
PQclear(result);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
|
|
Loading…
Reference in New Issue