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