Commit a073a704 authored by Bruce Momjian's avatar Bruce Momjian

Have psql history save \e editor contents to history before query is

executed, like it did for 8.1.X.
parent e4de635a
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2006, PostgreSQL Global Development Group * Copyright (c) 2000-2006, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.75 2006/06/04 04:35:55 momjian Exp $ * $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.76 2006/06/05 03:55:00 momjian Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
#include "mainloop.h" #include "mainloop.h"
...@@ -41,7 +41,7 @@ MainLoop(FILE *source) ...@@ -41,7 +41,7 @@ MainLoop(FILE *source)
char *line; /* current line of input */ char *line; /* current line of input */
int added_nl_pos; int added_nl_pos;
bool success; bool success;
bool first_query_scan; bool line_saved_in_history;
volatile int successResult = EXIT_SUCCESS; volatile int successResult = EXIT_SUCCESS;
volatile backslashResult slashCmdStatus = PSQL_CMD_UNKNOWN; volatile backslashResult slashCmdStatus = PSQL_CMD_UNKNOWN;
...@@ -80,6 +80,8 @@ MainLoop(FILE *source) ...@@ -80,6 +80,8 @@ MainLoop(FILE *source)
/* main loop to get queries and execute them */ /* main loop to get queries and execute them */
while (successResult == EXIT_SUCCESS) while (successResult == EXIT_SUCCESS)
{ {
line_saved_in_history = false;
/* /*
* Welcome code for Control-C * Welcome code for Control-C
*/ */
...@@ -154,6 +156,8 @@ MainLoop(FILE *source) ...@@ -154,6 +156,8 @@ MainLoop(FILE *source)
*/ */
pg_write_history(history_buf->data); pg_write_history(history_buf->data);
pg_clear_history(history_buf); pg_clear_history(history_buf);
pg_write_history(line);
line_saved_in_history = true;
} }
} }
/* otherwise, get another line */ /* otherwise, get another line */
...@@ -226,7 +230,6 @@ MainLoop(FILE *source) ...@@ -226,7 +230,6 @@ MainLoop(FILE *source)
*/ */
psql_scan_setup(scan_state, line, strlen(line)); psql_scan_setup(scan_state, line, strlen(line));
success = true; success = true;
first_query_scan = true;
while (success || !die_on_error) while (success || !die_on_error)
{ {
...@@ -303,17 +306,16 @@ MainLoop(FILE *source) ...@@ -303,17 +306,16 @@ MainLoop(FILE *source)
* down here so we can check for \g and other 'execute' * down here so we can check for \g and other 'execute'
* backslash commands, which should be appended. * backslash commands, which should be appended.
*/ */
if (first_query_scan && pset.cur_cmd_interactive) if (!line_saved_in_history && pset.cur_cmd_interactive)
{ {
/* Sending a command (PSQL_CMD_SEND) zeros the length */ /* Sending a command (PSQL_CMD_SEND) zeros the length */
if (scan_result == PSCAN_BACKSLASH && history_buf->len != 0) if (scan_result == PSCAN_BACKSLASH && history_buf->len != 0)
pg_write_history(line); pg_write_history(line);
else else
pg_append_history(line, history_buf); pg_append_history(line, history_buf);
line_saved_in_history = true;
} }
first_query_scan = false;
/* fall out of loop on \q or if lexer reached EOL */ /* fall out of loop on \q or if lexer reached EOL */
if (slashCmdStatus == PSQL_CMD_TERMINATE || if (slashCmdStatus == PSQL_CMD_TERMINATE ||
scan_result == PSCAN_INCOMPLETE || scan_result == PSCAN_INCOMPLETE ||
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment