else if (TailMatches("USING", MatchAny, "ON", MatchAny, "WHEN"))
                COMPLETE_WITH("MATCHED", "NOT MATCHED");
        else if (TailMatches("USING", MatchAny, "AS", MatchAny, "ON",
MatchAny, "WHEN"))
                COMPLETE_WITH("MATCHED", "NOT MATCHED");
else if (TailMatches("USING", MatchAny, MatchAny, "ON", MatchAny, "WHEN"))
                COMPLETE_WITH("MATCHED", "NOT MATCHED");

I thought it would be better to describe this section as follows,
summarizing the conditions

        else if (TailMatches("USING", MatchAny, "ON", MatchAny, "WHEN") ||
TailMatches("USING", MatchAny, "AS", MatchAny, "ON", MatchAny, "WHEN") ||
                         TailMatches("USING", MatchAny, MatchAny, "ON", MatchAny, 
"WHEN"))
                COMPLETE_WITH("MATCHED", "NOT MATCHED");

There are similar redundancies in the tab completion of MERGE
statement, so why not fix that as well?

Thanks for your review.

A new patch has been created to reflect the changes you indicated.
I also found a problem that "DO NOTHING" is not completed when type "WHEN MATCHED <tab>", so I fixed it as well.

Regards,

Kotaro Kawamoto
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 62a39779b9..c05b52e49a 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -4068,7 +4068,7 @@ psql_completion(const char *text, int start, int end)
 	/* with [AS] alias */
 	else if (TailMatches("MERGE", "INTO", MatchAny, "AS", MatchAny))
 		COMPLETE_WITH("USING");
-	else if (TailMatches("MERGE", "INTO", MatchAny, MatchAny))
+	else if (TailMatches("MERGE", "INTO", MatchAny, MatchAny) && !TailMatches("AS"))
 		COMPLETE_WITH("USING");
 	else if (TailMatches("MERGE", "INTO", MatchAny, "AS", MatchAny, "USING"))
 		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
@@ -4095,12 +4095,16 @@ psql_completion(const char *text, int start, int end)
 		COMPLETE_WITH("WHEN MATCHED", "WHEN NOT MATCHED");
 	else if (TailMatches("USING", MatchAny, MatchAny, "ON", MatchAny))
 		COMPLETE_WITH("WHEN MATCHED", "WHEN NOT MATCHED");
+	else if (TailMatches("USING", MatchAny, "ON", MatchAny, "WHEN")) ||
+			(TailMatches("USING", MatchAny, "AS", MatchAny, "ON", MatchAny, "WHEN")) ||
+			(TailMatches("USING", MatchAny, MatchAny, "ON", MatchAny, "WHEN"))
+		COMPLETE_WITH("MATCHED", "NOT MATCHED");
 	else if (TailMatches("WHEN", "MATCHED"))
 		COMPLETE_WITH("THEN", "AND");
 	else if (TailMatches("WHEN", "NOT", "MATCHED"))
 		COMPLETE_WITH("THEN", "AND");
 	else if (TailMatches("WHEN", "MATCHED", "THEN"))
-		COMPLETE_WITH("UPDATE", "DELETE");
+		COMPLETE_WITH("UPDATE", "DELETE", "DO NOTHING");
 	else if (TailMatches("WHEN", "NOT", "MATCHED", "THEN"))
 		COMPLETE_WITH("INSERT", "DO NOTHING");
 

Reply via email to