On Mon, Aug 17, 2020 at 02:15:34PM +0900, Michael Paquier wrote:
> Sounds fine to me as well.  The LIMIT TO and EXCEPT clauses are
> optional, so using TailMatches() looks fine.
> 
> +   else if (TailMatches("FROM", "SERVER", MatchAny, "INTO", MatchAny))
> +       COMPLETE_WITH("OPTIONS")
> Shouldn't you complete with "OPTIONS (" here?
> 
> It would be good to complete with "FROM SERVER" after specifying
> EXCEPT or LIMIT TO, you can just use "(*)" to include the list of
> tables in the list of elements checked.

I have complete the patch with those parts as per the attached.  If
there are any objections or extra opinions, please feel free.
--
Michael
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index f41785f11c..9c6f5ecb6a 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3293,6 +3293,17 @@ psql_completion(const char *text, int start, int end)
 		COMPLETE_WITH("FOREIGN SCHEMA");
 	else if (Matches("IMPORT", "FOREIGN"))
 		COMPLETE_WITH("SCHEMA");
+	else if (Matches("IMPORT", "FOREIGN", "SCHEMA", MatchAny))
+		COMPLETE_WITH("EXCEPT (", "FROM SERVER", "LIMIT TO (");
+	else if (TailMatches("LIMIT", "TO", "(*)") ||
+			 TailMatches("EXCEPT", "(*)"))
+		COMPLETE_WITH("FROM SERVER");
+	else if (TailMatches("FROM", "SERVER", MatchAny))
+		COMPLETE_WITH("INTO");
+	else if (TailMatches("FROM", "SERVER", MatchAny, "INTO"))
+		COMPLETE_WITH_QUERY(Query_for_list_of_schemas);
+	else if (TailMatches("FROM", "SERVER", MatchAny, "INTO", MatchAny))
+		COMPLETE_WITH("OPTIONS (");
 
 /* INSERT --- can be inside EXPLAIN, RULE, etc */
 	/* Complete INSERT with "INTO" */

Attachment: signature.asc
Description: PGP signature

Reply via email to