summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2021-10-12 19:14:50 +0000
committerPeter Eisentraut2021-10-12 19:20:29 +0000
commit390edeeb570c01de1a14e2985ffed96de001e42e (patch)
treeb68773d8896d0b4b8494e4006b73003f6ba37848
parent00c61a74bcdbc04a3db721d53c7aff62244da198 (diff)
psql: Fix some scan-build warnings
A repeated complaint was that scan-build thought that if the \timing setting changes during processing of a query, the post-processing might read garbage time values. This is probably not possible right now, but it's not entirely inconceivable given the code structure. So silence this warning with small restructuring that makes this more robust. The other warnings were a few dead stores that are easy to remove. Discussion: https://www.postgresql.org/message-id/[email protected]
-rw-r--r--src/bin/psql/common.c32
-rw-r--r--src/bin/psql/copy.c1
-rw-r--r--src/bin/psql/describe.c1
3 files changed, 18 insertions, 16 deletions
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 5640786678..1b224bf9e4 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -594,6 +594,7 @@ PSQLexec(const char *query)
int
PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout)
{
+ bool timing = pset.timing;
PGresult *res;
double elapsed_msec = 0;
instr_time before;
@@ -608,7 +609,7 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout)
SetCancelConn(pset.db);
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
res = PQexec(pset.db, query);
@@ -621,7 +622,7 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout)
return 0;
}
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
@@ -674,7 +675,7 @@ PSQLexecWatch(const char *query, const printQueryOpt *opt, FILE *printQueryFout)
fflush(fout);
/* Possible microtiming output */
- if (pset.timing)
+ if (timing)
PrintTiming(elapsed_msec);
return 1;
@@ -1192,6 +1193,7 @@ PrintQueryResults(PGresult *results)
bool
SendQuery(const char *query)
{
+ bool timing = pset.timing;
PGresult *results;
PGTransactionStatusType transaction_status;
double elapsed_msec = 0;
@@ -1300,7 +1302,7 @@ SendQuery(const char *query)
instr_time before,
after;
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
results = PQexec(pset.db, query);
@@ -1309,7 +1311,7 @@ SendQuery(const char *query)
ResetCancelConn();
OK = ProcessResult(&results);
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
@@ -1400,7 +1402,7 @@ SendQuery(const char *query)
ClearOrSaveResult(results);
/* Possible microtiming output */
- if (pset.timing)
+ if (timing)
PrintTiming(elapsed_msec);
/* check for events that may occur during query execution */
@@ -1471,6 +1473,7 @@ sendquery_cleanup:
static bool
DescribeQuery(const char *query, double *elapsed_msec)
{
+ bool timing = pset.timing;
PGresult *results;
bool OK;
instr_time before,
@@ -1478,7 +1481,7 @@ DescribeQuery(const char *query, double *elapsed_msec)
*elapsed_msec = 0;
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
/*
@@ -1550,7 +1553,7 @@ DescribeQuery(const char *query, double *elapsed_msec)
results = PQexec(pset.db, buf.data);
OK = AcceptResult(results);
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
@@ -1591,6 +1594,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
PGresult *results;
PQExpBufferData buf;
printQueryOpt my_popt = pset.popt;
+ bool timing = pset.timing;
FILE *fout;
bool is_pipe;
bool is_pager = false;
@@ -1610,7 +1614,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
my_popt.topt.stop_table = false;
my_popt.topt.prior_records = 0;
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
/* if we're not in a transaction, start one */
@@ -1640,7 +1644,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
if (!OK)
goto cleanup;
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
@@ -1682,13 +1686,13 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
for (;;)
{
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
/* get fetch_count tuples at a time */
results = PQexec(pset.db, fetch_cmd);
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
@@ -1802,7 +1806,7 @@ ExecQueryUsingCursor(const char *query, double *elapsed_msec)
}
cleanup:
- if (pset.timing)
+ if (timing)
INSTR_TIME_SET_CURRENT(before);
/*
@@ -1828,7 +1832,7 @@ cleanup:
ClearOrSaveResult(results);
}
- if (pset.timing)
+ if (timing)
{
INSTR_TIME_SET_CURRENT(after);
INSTR_TIME_SUBTRACT(after, before);
diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index 64ab40c4f7..3c4d862bdf 100644
--- a/src/bin/psql/copy.c
+++ b/src/bin/psql/copy.c
@@ -660,7 +660,6 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary, PGresult **res)
if (PQputCopyData(conn, buf, buflen) <= 0)
{
OK = false;
- copydone = true;
break;
}
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index a33d77c0ef..ea4ca5c05c 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -635,7 +635,6 @@ describeFunctions(const char *functypes, const char *func_pattern,
appendPQExpBufferStr(&buf, "p.prokind = 'w'\n");
else
appendPQExpBufferStr(&buf, "p.proiswindow\n");
- needs_or = true;
}
appendPQExpBufferStr(&buf, " )\n");
}