strk <[EMAIL PROTECTED]> 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

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to