From adc3b34b9cc8a5aff7dd1cc9d249708490301ccb Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Wed, 19 Feb 2003 04:04:04 +0000
Subject: [PATCH] Here's the patch I promised over on HACKERS - it alters the
 implementation of '\e' history tracking for systems that have a readline
 compatability library without replace_history_entry.  I fall back to pushing
 the query onto the history stack after the \e, rather than replacing it.

The patch adds one more place to look for readline headers, and a test
for replace_history_entry. I've only included the patch for configure.in

Ross J. Reedstrom
---
 configure.in               | 13 ++++++++-----
 src/bin/psql/command.c     |  7 ++++++-
 src/bin/psql/input.h       |  6 +++++-
 src/include/pg_config.h.in | 11 ++++++++++-
 4 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/configure.in b/configure.in
index 19f6d74defa..77a63434aa4 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-dnl $Header: /cvsroot/pgsql/configure.in,v 1.236 2003/02/14 14:05:00 momjian Exp $
+dnl $Header: /cvsroot/pgsql/configure.in,v 1.237 2003/02/19 04:04:04 momjian Exp $
 dnl
 dnl Developers, please strive to achieve this order:
 dnl
@@ -689,17 +689,19 @@ AC_CHECK_HEADERS(netinet/tcp.h, [], [],
 
 if test "$with_readline" = yes; then
   AC_CHECK_HEADERS(readline/readline.h, [],
-                   [AC_CHECK_HEADERS(readline.h, [],
+                   [AC_CHECK_HEADERS(editline/readline.h, [],
+                         [AC_CHECK_HEADERS(readline.h, [],
                                      [AC_MSG_ERROR([readline header not found
 If you have readline already installed, see config.log for details on the
 failure.  It is possible the compiler isn't looking in the proper directory.
-Use --without-readline to disable readline support.])])])
+Use --without-readline to disable readline support.])])])])
   AC_CHECK_HEADERS(readline/history.h, [],
-                   [AC_CHECK_HEADERS(history.h, [],
+                   [AC_CHECK_HEADERS(editline/history.h, [],
+                         [AC_CHECK_HEADERS(history.h, [],
                                      [AC_MSG_ERROR([history header not found
 If you have readline already installed, see config.log for details on the
 failure.  It is possible the compiler isn't looking in the proper directory.
-Use --without-readline to disable readline support.])])])
+Use --without-readline to disable readline support.])])])])
 fi
 
 if test "$with_zlib" = yes; then
@@ -878,6 +880,7 @@ AC_CHECK_FUNCS(rint, [],
 if test "$with_readline" = yes; then
   PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
   AC_CHECK_FUNCS([rl_completion_matches rl_filename_completion_function])
+  AC_CHECK_FUNCS([replace_history_entry])
 fi
 
 
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 5b727b06bd5..0019755c0aa 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2000-2002 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.89 2003/02/13 04:08:16 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.90 2003/02/19 04:04:04 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "command.h"
@@ -1649,7 +1649,12 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf)
 			}
 
 #ifdef USE_READLINE
+#ifdef HAVE_REPLACE_HISTORY_ENTRY
+
 			replace_history_entry(where_history(),query_buf->data,NULL);
+#else
+			add_history(query_buf->data);
+#endif
 #endif
 			fclose(stream);
 		}
diff --git a/src/bin/psql/input.h b/src/bin/psql/input.h
index fbb52f20da3..4ed51f59cad 100644
--- a/src/bin/psql/input.h
+++ b/src/bin/psql/input.h
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/input.h,v 1.17 2002/09/04 20:31:36 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/input.h,v 1.18 2003/02/19 04:04:04 momjian Exp $
  */
 #ifndef INPUT_H
 #define INPUT_H
@@ -18,11 +18,15 @@
 #define USE_READLINE 1
 #if defined(HAVE_READLINE_READLINE_H)
 #include <readline/readline.h>
+#elif defined(HAVE_EDITLINE_READLINE_H)
+#include <editline/readline.h>
 #elif defined(HAVE_READLINE_H)
 #include <readline.h>
 #endif
 #if defined(HAVE_READLINE_HISTORY_H)
 #include <readline/history.h>
+#elif defined(HAVE_EDITLINE_HISTORY_H)
+#include <editline/history.h>
 #elif defined(HAVE_HISTORY_H)
 #include <history.h>
 #endif
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 953fd4597b2..50960bdfd12 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -8,7 +8,7 @@
  * or in pg_config.h afterwards.  Of course, if you edit pg_config.h, then your
  * changes will be overwritten the next time you run configure.
  *
- * $Id: pg_config.h.in,v 1.39 2003/02/14 14:05:00 momjian Exp $
+ * $Id: pg_config.h.in,v 1.40 2003/02/19 04:04:04 momjian Exp $
  */
 
 #ifndef PG_CONFIG_H
@@ -356,6 +356,12 @@
 /* Set to 1 if you have <readline/readline.h> */
 #undef HAVE_READLINE_READLINE_H
 
+/* Set to 1 if you have <editline/history.h> */
+#undef HAVE_EDITLINE_HISTORY_H
+
+/* Set to 1 if you have <editline/readline.h> */
+#undef HAVE_EDITLINE_READLINE_H
+
 /* Set to 1 if you have <security/pam_appl.h> */
 #undef HAVE_SECURITY_PAM_APPL_H
 
@@ -553,6 +559,9 @@
 /* Set to 1 if you have rl_filename_completion_function */
 #undef HAVE_RL_FILENAME_COMPLETION_FUNCTION
 
+/* Set to 1 if you have replace_history_entry */
+#undef HAVE_REPLACE_HISTORY_ENTRY
+
 /* Set to 1 if you have getopt_long() (GNU long options) */
 #undef HAVE_GETOPT_LONG
 
-- 
GitLab