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: