Re: Re [HACKERS]: Still not happy with psql's multiline history behavior
От | Bruce Momjian |
---|---|
Тема | Re: Re [HACKERS]: Still not happy with psql's multiline history behavior |
Дата | |
Msg-id | 200606050355.k553tTW19099@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Re: Re [HACKERS]: Still not happy with psql's multiline history ("Sergey E. Koposov" <math@sai.msu.ru>) |
Список | pgsql-patches |
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. + 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 ||
В списке pgsql-patches по дате отправления:
Предыдущее
От: "Sergey E. Koposov"Дата:
Сообщение: Re [HACKERS]: Still not happy with psql's multiline history behavior
Следующее
От: Bruce MomjianДата:
Сообщение: Re: Re [HACKERS]: Still not happy with psql's multiline history behavior