Re: psql - add special variable to reflect the last query status

From: Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: PostgreSQL Developers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: psql - add special variable to reflect the last query status
Date: 2017-06-28 08:04:30
Message-ID: alpine.DEB.2.20.1706280951170.1763@lancre
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Hello Pavel,

> + if (success)
> + {
> + char *ntuples = PQcmdTuples(results);
> + SetVariable(pset.vars, "ROW_COUNT", *ntuples ? ntuples : "0");
> + SetVariable(pset.vars, "ERROR", "FALSE");
> + }
> + else
> + {
> + SetVariable(pset.vars, "ROW_COUNT", "0");
> + SetVariable(pset.vars, "ERROR", "TRUE");
> + }
> +}
>
> It can be simplified
>
> SetVariable(pset.vars, "ROW_COUNT", success ? PQcmdTuples(results) : 0);

According to the documentation, PQcmdTuples returns "" in some cases and
ISTM we want "0" instead for consistency, so that it is always a number. I
rejected calling PQcmdTuples twice:

..., success && *PQcmdTuples(results) ? PQcmdTuples(results) : "0")

Thus it makes the "if (success)" necessary for ROW_COUNT, and then it
looked simpler to handle ERROR the same way.

Now if the semantics is changed to put as row count whatever comes out of
the function, even if not a count, then the code could indeed be
simplified as you suggest.

--
Fabien.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2017-06-28 08:10:18 Re: psql - add special variable to reflect the last query status
Previous Message Pavel Stehule 2017-06-28 07:48:35 Re: psql - add special variable to reflect the last query status