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 200606071318.k57DItj02139@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
Conditional history length test removed.

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

Bruce Momjian wrote:
>
> 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. +
>

--
  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: Andrew Dunstan
Date:
Subject: Re: [HACKERS] Win32 sysconfig -> pg_service.conf
Next
From: "Jim C. Nasby"
Date:
Subject: Re: remove lock protection on HeapTupleSatisfiesVacuum