Re: query output in psql PROMPT - Mailing list pgsql-patches

From Tom Lane
Subject Re: query output in psql PROMPT
Date
Msg-id 24426.1105722392@sss.pgh.pa.us
Whole thread Raw
In response to query output in psql PROMPT  (strk <strk@keybit.net>)
Responses Re: query output in psql PROMPT  (strk <strk@keybit.net>)
Re: query output in psql PROMPT  (strk <strk@keybit.net>)
List pgsql-patches
strk <strk@keybit.net> writes:
> A simple patch allow query output in psql PROMPT strings:

Why is this a good idea?  Having a query implicitly executed during
every prompt will have a ton of bad side effects, for instance
prematurely freezing the query snapshot in SERIALIZABLE transactions.

The syntax you propose is downright bizarre --- what if I needed a dot
in the query text?

> +                        cmdend = strcspn(cmd, ".");
> +                        cmd[cmdend] = '\0';
> +                        if (cmd)
> +                        {
> +                            res = PSQLexec(cmd, false);
> +                        }

What's the if for?  cmd can't be NULL (you already dumped core if it
is).

> +                        if (res && PQntuples(res) )
> +                        {
> +                            memcpy(buf, PQgetvalue(res, 0, 0), MAX_PROMPT_SIZE-1);
> +                            PQclear(res);
> +                        }

Leaks memory on query failure.

> +                        if (strlen(buf) > 0 && buf[strlen(buf) - 1] == '\n')
> +                            buf[strlen(buf) - 1] = '\0';

Uses undefined contents of buf on query failure.

> +                        p += cmdend + 1;

Falls off the end of the prompt if there was no terminating dot, causing
subsequent iterations of the loop to continue reading undefined memory.

            regards, tom lane

pgsql-patches by date:

Previous
From: strk
Date:
Subject: query output in psql PROMPT
Next
From: strk
Date:
Subject: Re: query output in psql PROMPT