mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +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:
parent
3b7e2b140e
commit
af00c04c42
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.164 2006/03/05 15:58:51 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.165 2006/03/21 13:38:11 momjian Exp $
|
||||
*/
|
||||
#include "postgres_fe.h"
|
||||
#include "command.h"
|
||||
@ -753,7 +753,7 @@ exec_command(const char *cmd,
|
||||
|
||||
expand_tilde(&fname);
|
||||
/* This scrolls off the screen when using /dev/tty */
|
||||
success = saveHistory(fname ? fname : DEVTTY);
|
||||
success = saveHistory(fname ? fname : DEVTTY, false);
|
||||
if (success && !quiet && fname)
|
||||
printf(gettext("Wrote history to file \"%s/%s\".\n"),
|
||||
pset.dirname ? pset.dirname : ".", fname);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/bin/psql/input.h,v 1.26 2006/03/06 04:45:21 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/bin/psql/input.h,v 1.27 2006/03/21 13:38:12 momjian Exp $
|
||||
*/
|
||||
#ifndef INPUT_H
|
||||
#define INPUT_H
|
||||
@ -37,7 +37,7 @@ char *gets_interactive(const char *prompt);
|
||||
char *gets_fromFile(FILE *source);
|
||||
|
||||
void initializeInput(int flags);
|
||||
bool saveHistory(char *fname);
|
||||
bool saveHistory(char *fname, bool encodeFlag);
|
||||
|
||||
void pg_append_history(char *s, PQExpBuffer history_buf);
|
||||
void pg_clear_history(PQExpBuffer history_buf);
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.73 2006/03/06 15:09:04 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.74 2006/03/21 13:38:12 momjian Exp $
|
||||
*/
|
||||
#include "postgres_fe.h"
|
||||
#include "mainloop.h"
|
||||
@ -112,7 +112,7 @@ MainLoop(FILE *source)
|
||||
slashCmdStatus = PSQL_CMD_UNKNOWN;
|
||||
prompt_status = PROMPT_READY;
|
||||
if (pset.cur_cmd_interactive)
|
||||
pg_clear_history(history_buf);
|
||||
pg_write_history(history_buf->data);
|
||||
|
||||
if (pset.cur_cmd_interactive)
|
||||
putc('\n', stdout);
|
||||
@ -321,7 +321,8 @@ MainLoop(FILE *source)
|
||||
break;
|
||||
}
|
||||
|
||||
if (pset.cur_cmd_interactive && prompt_status != PROMPT_CONTINUE)
|
||||
if ((pset.cur_cmd_interactive && prompt_status == PROMPT_READY) ||
|
||||
(GetVariableBool(pset.vars, "SINGLELINE") && prompt_status == PROMPT_CONTINUE))
|
||||
{
|
||||
/*
|
||||
* Pass all the contents of history_buf to readline
|
||||
|
Loading…
x
Reference in New Issue
Block a user