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:
		| @@ -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; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user