From 63c3b9903b47d12b92ea8cd407aeffbcde2a5784 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 16 Aug 2008 01:36:35 +0000 Subject: [PATCH] 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 ... --- src/bin/psql/common.c | 41 +++++++++++++++++++++++-------------- src/bin/psql/tab-complete.c | 8 ++++---- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c index ab1f03f310..b7ca0889cf 100644 --- a/src/bin/psql/common.c +++ b/src/bin/psql/common.c @@ -3,7 +3,7 @@ * * 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 "common.h" @@ -880,16 +880,20 @@ SendQuery(const char *query) /* If we made a temporary savepoint, possibly release/rollback */ if (on_error_rollback_savepoint) { - PGresult *svptres; + const char *svptcmd; transaction_status = PQtransactionStatus(pset.db); - /* We always rollback on an error */ 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) - svptres = NULL; + { + /* If they are no longer in a transaction, then do nothing */ + svptcmd = NULL; + } else { /* @@ -901,20 +905,27 @@ SendQuery(const char *query) (strcmp(PQcmdStatus(results), "SAVEPOINT") == 0 || strcmp(PQcmdStatus(results), "RELEASE") == 0 || strcmp(PQcmdStatus(results), "ROLLBACK") == 0)) - svptres = NULL; + svptcmd = NULL; else - svptres = PQexec(pset.db, "RELEASE pg_psql_temporary_savepoint"); + svptcmd = "RELEASE pg_psql_temporary_savepoint"; } - if (svptres && PQresultStatus(svptres) != PGRES_COMMAND_OK) + + if (svptcmd) { - psql_error("%s", PQerrorMessage(pset.db)); - PQclear(results); + 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); - ResetCancelConn(); - return false; } - - PQclear(svptres); } PQclear(results); diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 2a036e279d..97d9f13d7a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -3,7 +3,7 @@ * * 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); - if (result != NULL && PQresultStatus(result) != PGRES_TUPLES_OK) + if (PQresultStatus(result) != PGRES_TUPLES_OK) { #if 0 - psql_error("tab completion: %s failed - %s\n", - query, PQresStatus(PQresultStatus(result))); + psql_error("tab completion query failed: %s\nQuery was:\n%s\n", + PQerrorMessage(pset.db), query); #endif PQclear(result); result = NULL; -- 2.40.0