summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pgbench/pgbench.c48
1 files changed, 18 insertions, 30 deletions
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 99529de52a5..b67ad5e8231 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -1214,20 +1214,6 @@ doConnect(void)
return conn;
}
-/* throw away response from backend */
-static void
-discard_response(CState *state)
-{
- PGresult *res;
-
- do
- {
- res = PQgetResult(state->con);
- if (res)
- PQclear(res);
- } while (res);
-}
-
/* qsort comparator for Variable array */
static int
compareVariableNames(const void *v1, const void *v2)
@@ -2732,6 +2718,7 @@ static bool
readCommandResponse(CState *st, char *varprefix)
{
PGresult *res;
+ PGresult *next_res;
int qrynum = 0;
res = PQgetResult(st->con);
@@ -2739,7 +2726,7 @@ readCommandResponse(CState *st, char *varprefix)
while (res != NULL)
{
/* look now at the next result to know whether it is the last */
- PGresult *next_res = PQgetResult(st->con);
+ next_res = PQgetResult(st->con);
bool is_last = (next_res == NULL);
switch (PQresultStatus(res))
@@ -2751,8 +2738,7 @@ readCommandResponse(CState *st, char *varprefix)
fprintf(stderr,
"client %d script %d command %d query %d: expected one row, got %d\n",
st->id, st->use_file, st->command, qrynum, 0);
- st->ecnt++;
- return false;
+ goto error;
}
break;
@@ -2764,10 +2750,7 @@ readCommandResponse(CState *st, char *varprefix)
fprintf(stderr,
"client %d script %d command %d query %d: expected one row, got %d\n",
st->id, st->use_file, st->command, qrynum, PQntuples(res));
- st->ecnt++;
- PQclear(res);
- discard_response(st);
- return false;
+ goto error;
}
/* store results into variables */
@@ -2788,10 +2771,7 @@ readCommandResponse(CState *st, char *varprefix)
"client %d script %d command %d query %d: error storing into variable %s\n",
st->id, st->use_file, st->command, qrynum,
varname);
- st->ecnt++;
- PQclear(res);
- discard_response(st);
- return false;
+ goto error;
}
if (*varprefix != '\0')
@@ -2807,10 +2787,7 @@ readCommandResponse(CState *st, char *varprefix)
"client %d script %d aborted in command %d query %d: %s",
st->id, st->use_file, st->command, qrynum,
PQerrorMessage(st->con));
- st->ecnt++;
- PQclear(res);
- discard_response(st);
- return false;
+ goto error;
}
PQclear(res);
@@ -2826,8 +2803,19 @@ readCommandResponse(CState *st, char *varprefix)
}
return true;
-}
+error:
+ st->ecnt++;
+ PQclear(res);
+ PQclear(next_res);
+ do
+ {
+ res = PQgetResult(st->con);
+ PQclear(res);
+ } while (res);
+
+ return false;
+}
/*
* Parse the argument to a \sleep command, and return the requested amount