RE: psql small improvement patch

From: "Shinoda, Noriyoshi (PN Japan A&PS Delivery)" <noriyoshi(dot)shinoda(at)hpe(dot)com>
To: Mark Dilger <hornschnorter(at)gmail(dot)com>, "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: RE: psql small improvement patch
Date: 2019-12-07 22:54:25
Message-ID: DF4PR8401MB0443E77A5F1C6C59168D3BBFEE5E0@DF4PR8401MB0443.NAMPRD84.PROD.OUTLOOK.COM
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Thank you very much for your comments.
I seem to have thought easily. I will reconsider.

Regards.

-----Original Message-----
From: Mark Dilger [mailto:hornschnorter(at)gmail(dot)com]
Sent: Sunday, December 8, 2019 12:20 AM
To: Shinoda, Noriyoshi (PN Japan A&PS Delivery) <noriyoshi(dot)shinoda(at)hpe(dot)com>; pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: psql small improvement patch

On 12/7/19 5:23 AM, Shinoda, Noriyoshi (PN Japan A&PS Delivery) wrote:
> Hi, Hackers.
>
> I propose a small improvement to the psql command.
> Currently, psql's help/quit/exit command needs to start from the first position of the prompt.
> For example, if you write a command after a space, the continuation
> prompt
> (PROMPT2) is displayed.
>
> ---
> postgres=> \set PROMPT2 'continue=>'
> postgres=> <SPACE>help
> continue=>
> ---
>
> The attached patch allows the command to be executed ignoring leading white spaces.

Thank you for the patch. I took a look, and have two concerns.

The smaller concern is that psql uses isspace() to determine whether a character is whitespace in the current locale, so instead of using strspn(line, " \t") you might want to use isspace() and be consistent.
On the other hand, there is precedent in other files for what you are doing, such as in src/fe_utils/print.c:

/* is string only whitespace? */
if ((*ptr)[strspn(*ptr, " \t")] == '\0')

My larger concern is that people may be using space before a command word to avoid having it be interpreted as a command. Take for example the following contrived psql interaction:

mark=# create table help (str text);
CREATE TABLE
mark=# insert into help (str) values ('foo');
INSERT 0 1
mark=# select * from
mark-# help
mark-# where str is not null;
str
-----
foo
(1 row)

In the current unpatched psql, if I don't indent the second line, I get cruft in the output:

mark=# select * from
mark-# help
Use \? for help or press control-C to clear the input buffer.
mark-# where str is not null;
str
-----
foo
(1 row)

Patching psql as you propose would result in that cruft whether or not I indent the second line. We would need to consider if that behavior change is going to cause more problems for users than your patch is worth. How common is this problem you are trying to fix?

--
Mark Dilger

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Ranier Vilela 2019-12-07 23:42:38 RE: [Proposal] Level4 Warnings show many shadow vars
Previous Message Tom Lane 2019-12-07 22:32:01 Re: ssl passphrase callback