Re: Re [HACKERS]: Still not happy with psql's multiline history behavior - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Re [HACKERS]: Still not happy with psql's multiline history behavior
Date
Msg-id 200606050427.k554R4V07903@candle.pha.pa.us
Whole thread Raw
In response to Re [HACKERS]: Still not happy with psql's multiline history behavior  ("Sergey E. Koposov" <math@sai.msu.ru>)
List pgsql-patches
Also, in this line from psql/mainloop.c:

  312         if (scan_result == PSCAN_BACKSLASH && history_buf->len != 0)

Is the "history_buf->len != 0" test necessary?

---------------------------------------------------------------------------

pgman wrote:
> Sergey E. Koposov wrote:
> > On Sun, 4 Jun 2006, Bruce Momjian wrote:
> >
> > > Sergey E. Koposov wrote:
> > >> Hello,
> > >>
> > >> I'm sending the patch fixing the \r bug:
> > >
> > > Funny, I just applied a simpler fix for the \r bug.  Please review it.
> > > Thanks.
> > >
> >
> > It is simpler, because it behaves differently.
> > Your patch for the case:
> > wsdb=# select
> > wsdb-# \r
> > Query buffer reset (cleared).
> >
> > puts in the history two elements ("\r" and "select")
> >
> > Mine puts only "\r", just because
> > <quote>  \r             reset (clear) the query buffer</quote>
> > and I think that's reasonable, but I don't insist...
>
> I think I like the fact there two separate entries, so we are OK.
>
> > > I am confused by the \e bug.  I just tried 8.1.X and it seems to behave
> > > the same as CVS HEAD.  What exactly should it do?
> > >
> >
> > It is not actually a bug, I think it's a Tom's habit.
> > In 8.1.x if  you type for example  in the editor "select 1+" and exit from
> > it, the "select 1+" string will be already in the history. But in CVS HEAD
> > it will be saved internally, but it won't be shown in the history until the
> > user finishes the command with ';'. And there is really no need for
> > correcting that, I think.
>
> Thanks, that was clear.  The attached patch fixes it.  It is a little
> larger than usual because I changed the name of the boolean and reversed
> its usage.  It now works like it did in 8.1.X.
>
> --
>   Bruce Momjian   http://candle.pha.pa.us
>   EnterpriseDB    http://www.enterprisedb.com
>
>   + If your life is a hard drive, Christ can be your backup. +

[ text/x-diff is unsupported, treating like TEXT/PLAIN ]

> Index: src/bin/psql/mainloop.c
> ===================================================================
> RCS file: /cvsroot/pgsql/src/bin/psql/mainloop.c,v
> retrieving revision 1.75
> diff -c -c -r1.75 mainloop.c
> *** src/bin/psql/mainloop.c    4 Jun 2006 04:35:55 -0000    1.75
> --- src/bin/psql/mainloop.c    5 Jun 2006 03:50:11 -0000
> ***************
> *** 41,47 ****
>       char       *line;            /* current line of input */
>       int            added_nl_pos;
>       bool        success;
> !     bool        first_query_scan;
>
>       volatile int successResult = EXIT_SUCCESS;
>       volatile backslashResult slashCmdStatus = PSQL_CMD_UNKNOWN;
> --- 41,47 ----
>       char       *line;            /* current line of input */
>       int            added_nl_pos;
>       bool        success;
> !     bool        line_saved_in_history;
>
>       volatile int successResult = EXIT_SUCCESS;
>       volatile backslashResult slashCmdStatus = PSQL_CMD_UNKNOWN;
> ***************
> *** 80,85 ****
> --- 80,87 ----
>       /* main loop to get queries and execute them */
>       while (successResult == EXIT_SUCCESS)
>       {
> +         line_saved_in_history = false;
> +
>           /*
>            * Welcome code for Control-C
>            */
> ***************
> *** 154,159 ****
> --- 156,163 ----
>                    */
>                   pg_write_history(history_buf->data);
>                   pg_clear_history(history_buf);
> +                 pg_write_history(line);
> +                 line_saved_in_history = true;
>               }
>           }
>           /* otherwise, get another line */
> ***************
> *** 226,232 ****
>            */
>           psql_scan_setup(scan_state, line, strlen(line));
>           success = true;
> -         first_query_scan = true;
>
>           while (success || !die_on_error)
>           {
> --- 230,235 ----
> ***************
> *** 303,319 ****
>                *    down here so we can check for \g and other 'execute'
>                *    backslash commands, which should be appended.
>                */
> !             if (first_query_scan && pset.cur_cmd_interactive)
>               {
>                   /* Sending a command (PSQL_CMD_SEND) zeros the length */
>                   if (scan_result == PSCAN_BACKSLASH && history_buf->len != 0)
>                       pg_write_history(line);
>                   else
>                       pg_append_history(line, history_buf);
>               }
>
> -             first_query_scan = false;
> -
>               /* fall out of loop on \q or if lexer reached EOL */
>               if (slashCmdStatus == PSQL_CMD_TERMINATE ||
>                   scan_result == PSCAN_INCOMPLETE ||
> --- 306,321 ----
>                *    down here so we can check for \g and other 'execute'
>                *    backslash commands, which should be appended.
>                */
> !             if (!line_saved_in_history && pset.cur_cmd_interactive)
>               {
>                   /* Sending a command (PSQL_CMD_SEND) zeros the length */
>                   if (scan_result == PSCAN_BACKSLASH && history_buf->len != 0)
>                       pg_write_history(line);
>                   else
>                       pg_append_history(line, history_buf);
> +                 line_saved_in_history = true;
>               }
>
>               /* fall out of loop on \q or if lexer reached EOL */
>               if (slashCmdStatus == PSQL_CMD_TERMINATE ||
>                   scan_result == PSCAN_INCOMPLETE ||

--
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Re [HACKERS]: Still not happy with psql's multiline history behavior
Next
From: Alvaro Herrera
Date:
Subject: Re: non-transactional pg_class