Re: [PATCHES] psql slash# command - Mailing list pgsql-hackers

From Sibte Abbas
Subject Re: [PATCHES] psql slash# command
Date
Msg-id bd6a35510804031654m5336b47bh3ab876d123defd26@mail.gmail.com
Whole thread Raw
In response to Re: [PATCHES] psql slash# command  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Sun, Mar 30, 2008 at 3:09 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

I looked this over and realized that it has little to do with the
functionality that was so painfully hashed out in the original
discussion thread here:

http://archives.postgresql.org/pgsql-hackers/2006-12/msg00207.php

As I understood it, the consensus was:

1. Invent a switch (probably a variable instead of a dedicated \-command)
that determines whether \s includes command numbers in its output.

2. Add "\# n" to re-execute command number n.

You've twisted this around into

>> \#: displays the command history. Like \s but prefixes the lines with line
>> numbers
>>
>> \# <line_no>: executes the command(if any) executed at the line specified by
>> line_no

This patch implements the specification described here:

http://archives.postgresql.org/pgsql-hackers/2006-12/msg00255.php
 


This is a serious regression in functionality from what was agreed to,
because there is no possibility of shoehorning the equivalent of "\s file"
into it --- you've already decided that any argument is a line number.

It made sense to assume anything following a \# to be a number, since "#" here denotes a number. However in order to prevent from bad input, there is a check in the get_hist_entry() function.


> The attached patch adds the following new functionality:
> \#e <lineno>: Will open the command at the given lineno in an editor.
> \#e with no lineno will behave exactly like \e.

None of that was anywhere in the original discussion; and what pray
tell is the use of the second variant?

The above mentioned link contains definitions for both of these. Also the second variant here is just for completeness sake.


I wonder whether it wouldn't be safer and more convenient if we defined
'\# n' as pulling command n into the edit buffer, rather than
immediately executing it.  Actual execution is only a <return> away,
but this definition would allow you to edit the command a bit more
before you execute it --- including \e to use an editor.  It also
closes the loop in terms of providing some confidence that you typed
the number you should have typed.

This makes more sense and also appears to be much safer. I will start modifying the patch as per this approach now.

regards,
-- Sibte Abbas

pgsql-hackers by date:

Previous
From: Ron Mayer
Date:
Subject: Re: [GENERAL] SHA1 on postgres 8.3
Next
From: Gregory Stark
Date:
Subject: Re: About numeric division again