Re: Re [HACKERS]: Still not happy with psql's multiline history behavior

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: PostgreSQL-patches <pgsql-patches(at)postgresql(dot)org>, "Sergey E(dot) Koposov" <math(at)sai(dot)msu(dot)ru>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Subject: Re: Re [HACKERS]: Still not happy with psql's multiline history behavior
Date: 2006-06-07 13:18:55
Message-ID: 200606071318.k57DItj02139@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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. +

Browse pgsql-patches by date

  From Date Subject
Next Message Jim C. Nasby 2006-06-07 17:19:12 Re: remove lock protection on HeapTupleSatisfiesVacuum
Previous Message Andrew Dunstan 2006-06-07 12:33:52 Re: [HACKERS] Win32 sysconfig -> pg_service.conf