1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-31 10:30:33 +03:00

Fix psql history handling:

> 1) Fix the problems with the \s command.
> When the saveHistory is executed by the \s command we must not do the
> conversion \n -> \x01  (per
> http://archives.postgresql.org/pgsql-hackers/2006-03/msg00317.php )
>
> 2) Fix the handling of Ctrl+C
>
> Now when you do
> wsdb=# select 'your long query here '
> wsdb-#
> and press afterwards the CtrlC the line "select 'your long query here
'"
> will be in the history
>
> (partly per
> http://archives.postgresql.org/pgsql-hackers/2006-03/msg00297.php )
>
> 3) Fix the handling of commands with not closed brackets, quotes,
double
> quotes. (now those commands are not splitted in parts...)
>
> 4) Fix the behaviour when SINGLELINE mode is used. (before it was
almost
> broken ;(

Sergey E. Koposov
This commit is contained in:
Bruce Momjian
2006-03-21 13:38:12 +00:00
parent 3b7e2b140e
commit af00c04c42
4 changed files with 23 additions and 11 deletions

View File

@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.52 2006/03/06 04:45:21 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.53 2006/03/21 13:38:12 momjian Exp $
*/
#include "postgres_fe.h"
@@ -148,6 +148,10 @@ pg_write_history(char *s)
{
enum histcontrol HC;
/* Flushing of empty buffer should do nothing */
if (*s == 0)
return;
prev_hist = NULL;
HC = GetHistControlConfig();
@@ -295,13 +299,20 @@ initializeInput(int flags)
}
/* This function is designed for saving the readline history when user
* run \s command or when psql finishes.
* We have an argument named encodeFlag to handle those cases differently
* In that case of call via \s we don't really need to encode \n as \x01,
* but when we save history for Readline we must do that conversion
*/
bool
saveHistory(char *fname)
saveHistory(char *fname, bool encodeFlag)
{
#ifdef USE_READLINE
if (useHistory && fname)
{
encode_history();
if (encodeFlag)
encode_history();
if (write_history(fname) == 0)
return true;
@@ -331,7 +342,7 @@ finishInput(int exitstatus, void *arg)
if (hist_size >= 0)
stifle_history(hist_size);
saveHistory(psql_history);
saveHistory(psql_history, true);
free(psql_history);
psql_history = NULL;
}