5050#include "settings.h"
5151#include "stringutils.h"
5252
53- #ifdef HAVE_RL_FILENAME_COMPLETION_FUNCTION
54- #define filename_completion_function rl_filename_completion_function
55- #else
56- /* missing in some header files */
57- extern char * filename_completion_function ();
53+ /*
54+ * Ancient versions of libedit provide filename_completion_function()
55+ * instead of rl_filename_completion_function(). Likewise for
56+ * [rl_]completion_matches().
57+ */
58+ #ifndef HAVE_RL_FILENAME_COMPLETION_FUNCTION
59+ #define rl_filename_completion_function filename_completion_function
5860#endif
5961
60- #ifdef HAVE_RL_COMPLETION_MATCHES
61- #define completion_matches rl_completion_matches
62+ #ifndef HAVE_RL_COMPLETION_MATCHES
63+ #define rl_completion_matches completion_matches
6264#endif
6365
6466/* word break characters */
@@ -182,27 +184,27 @@ static bool completion_case_sensitive; /* completion is case sensitive */
182184#define COMPLETE_WITH_QUERY (query ) \
183185do { \
184186 completion_charp = query; \
185- matches = completion_matches (text, complete_from_query); \
187+ matches = rl_completion_matches (text, complete_from_query); \
186188} while (0)
187189
188190#define COMPLETE_WITH_VERSIONED_QUERY (query ) \
189191do { \
190192 completion_vquery = query; \
191- matches = completion_matches (text, complete_from_versioned_query); \
193+ matches = rl_completion_matches (text, complete_from_versioned_query); \
192194} while (0)
193195
194196#define COMPLETE_WITH_SCHEMA_QUERY (query , addon ) \
195197do { \
196198 completion_squery = &(query); \
197199 completion_charp = addon; \
198- matches = completion_matches (text, complete_from_schema_query); \
200+ matches = rl_completion_matches (text, complete_from_schema_query); \
199201} while (0)
200202
201203#define COMPLETE_WITH_VERSIONED_SCHEMA_QUERY (query , addon ) \
202204do { \
203205 completion_squery = query; \
204206 completion_vquery = addon; \
205- matches = completion_matches (text, complete_from_versioned_schema_query); \
207+ matches = rl_completion_matches (text, complete_from_versioned_schema_query); \
206208} while (0)
207209
208210/*
@@ -213,14 +215,14 @@ do { \
213215do { \
214216 completion_case_sensitive = (cs); \
215217 completion_charp = (con); \
216- matches = completion_matches (text, complete_from_const); \
218+ matches = rl_completion_matches (text, complete_from_const); \
217219} while (0)
218220
219221#define COMPLETE_WITH_LIST_INT (cs , list ) \
220222do { \
221223 completion_case_sensitive = (cs); \
222224 completion_charpp = (list); \
223- matches = completion_matches (text, complete_from_list); \
225+ matches = rl_completion_matches (text, complete_from_list); \
224226} while (0)
225227
226228#define COMPLETE_WITH_LIST (list ) COMPLETE_WITH_LIST_INT(false, list)
@@ -260,7 +262,7 @@ do { \
260262 completion_info_charp = _completion_table; \
261263 completion_info_charp2 = _completion_schema; \
262264 } \
263- matches = completion_matches (text, complete_from_query); \
265+ matches = rl_completion_matches (text, complete_from_query); \
264266} while (0)
265267
266268#define COMPLETE_WITH_ENUM_VALUE (type ) \
@@ -285,7 +287,7 @@ do { \
285287 completion_info_charp = _completion_type; \
286288 completion_info_charp2 = _completion_schema; \
287289 } \
288- matches = completion_matches (text, complete_from_query); \
290+ matches = rl_completion_matches (text, complete_from_query); \
289291} while (0)
290292
291293#define COMPLETE_WITH_FUNCTION_ARG (function ) \
@@ -310,7 +312,7 @@ do { \
310312 completion_info_charp = _completion_function; \
311313 completion_info_charp2 = _completion_schema; \
312314 } \
313- matches = completion_matches (text, complete_from_query); \
315+ matches = rl_completion_matches (text, complete_from_query); \
314316} while (0)
315317
316318/*
@@ -1335,7 +1337,7 @@ ends_with(const char *s, char c)
13351337 * According to readline spec this gets passed the text entered so far and its
13361338 * start and end positions in the readline buffer. The return value is some
13371339 * partially obscure list format that can be generated by readline's
1338- * completion_matches () function, so we don't have to worry about it.
1340+ * rl_completion_matches () function, so we don't have to worry about it.
13391341 */
13401342static char * *
13411343psql_completion (const char * text , int start , int end )
@@ -1488,7 +1490,7 @@ psql_completion(const char *text, int start, int end)
14881490/* CREATE */
14891491 /* complete with something you can create */
14901492 else if (TailMatches ("CREATE" ))
1491- matches = completion_matches (text , create_command_generator );
1493+ matches = rl_completion_matches (text , create_command_generator );
14921494
14931495 /* complete with something you can create or replace */
14941496 else if (TailMatches ("CREATE" , "OR" , "REPLACE" ))
@@ -1498,7 +1500,7 @@ psql_completion(const char *text, int start, int end)
14981500/* DROP, but not DROP embedded in other commands */
14991501 /* complete with something you can drop */
15001502 else if (Matches ("DROP" ))
1501- matches = completion_matches (text , drop_command_generator );
1503+ matches = rl_completion_matches (text , drop_command_generator );
15021504
15031505/* ALTER */
15041506
@@ -1509,7 +1511,7 @@ psql_completion(const char *text, int start, int end)
15091511
15101512 /* ALTER something */
15111513 else if (Matches ("ALTER" ))
1512- matches = completion_matches (text , alter_command_generator );
1514+ matches = rl_completion_matches (text , alter_command_generator );
15131515 /* ALTER TABLE,INDEX,MATERIALIZED VIEW ALL IN TABLESPACE xxx */
15141516 else if (TailMatches ("ALL" , "IN" , "TABLESPACE" , MatchAny ))
15151517 COMPLETE_WITH ("SET TABLESPACE" , "OWNED BY" );
@@ -2261,7 +2263,7 @@ psql_completion(const char *text, int start, int end)
22612263 Matches ("COPY" , "BINARY" , MatchAny , "FROM|TO" ))
22622264 {
22632265 completion_charp = "" ;
2264- matches = completion_matches (text , complete_from_files );
2266+ matches = rl_completion_matches (text , complete_from_files );
22652267 }
22662268
22672269 /* Handle COPY [BINARY] <sth> FROM|TO filename */
@@ -2483,7 +2485,11 @@ psql_completion(const char *text, int start, int end)
24832485 else if (Matches ("CREATE" , "RULE" , MatchAny , "AS" ) ||
24842486 Matches ("CREATE" , "OR" , "REPLACE" , "RULE" , MatchAny , "AS" ))
24852487 COMPLETE_WITH ("ON" );
2486- /* Complete "CREATE [ OR REPLACE ] RULE <sth> AS ON" with SELECT|UPDATE|INSERT|DELETE */
2488+
2489+ /*
2490+ * Complete "CREATE [ OR REPLACE ] RULE <sth> AS ON" with
2491+ * SELECT|UPDATE|INSERT|DELETE
2492+ */
24872493 else if (Matches ("CREATE" , "RULE" , MatchAny , "AS" , "ON" ) ||
24882494 Matches ("CREATE" , "OR" , "REPLACE" , "RULE" , MatchAny , "AS" , "ON" ))
24892495 COMPLETE_WITH ("SELECT" , "UPDATE" , "INSERT" , "DELETE" );
@@ -3708,9 +3714,9 @@ psql_completion(const char *text, int start, int end)
37083714 else if (TailMatchesCS ("\\h|\\help" , MatchAny ))
37093715 {
37103716 if (TailMatches ("DROP" ))
3711- matches = completion_matches (text , drop_command_generator );
3717+ matches = rl_completion_matches (text , drop_command_generator );
37123718 else if (TailMatches ("ALTER" ))
3713- matches = completion_matches (text , alter_command_generator );
3719+ matches = rl_completion_matches (text , alter_command_generator );
37143720
37153721 /*
37163722 * CREATE is recognized by tail match elsewhere, so doesn't need to be
@@ -3809,7 +3815,7 @@ psql_completion(const char *text, int start, int end)
38093815 "\\s|\\w|\\write|\\lo_import" ))
38103816 {
38113817 completion_charp = "\\" ;
3812- matches = completion_matches (text , complete_from_files );
3818+ matches = rl_completion_matches (text , complete_from_files );
38133819 }
38143820
38153821 /*
@@ -4395,7 +4401,7 @@ complete_from_files(const char *text, int state)
43954401 }
43964402 }
43974403
4398- unquoted_match = filename_completion_function (unquoted_text , state );
4404+ unquoted_match = rl_filename_completion_function (unquoted_text , state );
43994405 if (unquoted_match )
44004406 {
44014407 /*
0 commit comments