Have psql history save \e editor contents to history before query is
authorBruce Momjian
Mon, 5 Jun 2006 03:55:00 +0000 (03:55 +0000)
committerBruce Momjian
Mon, 5 Jun 2006 03:55:00 +0000 (03:55 +0000)
executed, like it did for 8.1.X.

src/bin/psql/mainloop.c

index e5438132364ac3699d88f26ca1498d89ed2db8aa..5bffed86711e0847583db065d5458bc5f9291027 100644 (file)
@@ -3,7 +3,7 @@
  *
  * 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 "mainloop.h"
@@ -41,7 +41,7 @@ MainLoop(FILE *source)
    char       *line;           /* current line of input */
    int         added_nl_pos;
    bool        success;
-   bool        first_query_scan;
+   bool        line_saved_in_history;
    
    volatile int successResult = EXIT_SUCCESS;
    volatile backslashResult slashCmdStatus = PSQL_CMD_UNKNOWN;
@@ -80,6 +80,8 @@ MainLoop(FILE *source)
    /* main loop to get queries and execute them */
    while (successResult == EXIT_SUCCESS)
    {
+       line_saved_in_history = false;
+
        /*
         * Welcome code for Control-C
         */
@@ -154,6 +156,8 @@ MainLoop(FILE *source)
                 */
                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,7 +230,6 @@ MainLoop(FILE *source)
         */
        psql_scan_setup(scan_state, line, strlen(line));
        success = true;
-       first_query_scan = true;
        
        while (success || !die_on_error)
        {
@@ -303,17 +306,16 @@ MainLoop(FILE *source)
             *  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)
+           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;
            }
 
-           first_query_scan = false;
-
            /* fall out of loop on \q or if lexer reached EOL */
            if (slashCmdStatus == PSQL_CMD_TERMINATE ||
                scan_result == PSCAN_INCOMPLETE ||