]> granicus.if.org Git - postgresql/commitdiff
Improve tab completion for CREATE TRIGGER.
authorKevin Grittner <kgrittn@postgresql.org>
Fri, 4 Nov 2016 16:02:07 +0000 (11:02 -0500)
committerKevin Grittner <kgrittn@postgresql.org>
Fri, 4 Nov 2016 16:02:07 +0000 (11:02 -0500)
This includes support for the new REFERENCING clause.

src/bin/psql/tab-complete.c

index dd8bbe1467d1b4ca8059416bde6f5515582696f4..a43bbc519cf623cbf2e67cd98a41e9e4b1163aa4 100644 (file)
@@ -2209,9 +2209,43 @@ psql_completion(const char *text, int start, int end)
        /* complete CREATE TRIGGER ... INSTEAD OF event ON with a list of views */
        else if (TailMatches7("CREATE", "TRIGGER", MatchAny, "INSTEAD", "OF", MatchAny, "ON"))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("ON", MatchAny))
+               COMPLETE_WITH_LIST7("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
+                                                       "REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") &&
+                        (TailMatches1("DEFERRABLE") || TailMatches2("INITIALLY", "IMMEDIATE|DEFERRED")))
+               COMPLETE_WITH_LIST4("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("REFERENCING"))
+               COMPLETE_WITH_LIST2("OLD TABLE", "NEW TABLE");
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("OLD|NEW", "TABLE"))
+               COMPLETE_WITH_CONST("AS");
+       else if (HeadMatches2("CREATE", "TRIGGER") &&
+                        (TailMatches5("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
+                         TailMatches4("REFERENCING", "OLD", "TABLE", MatchAny)))
+               COMPLETE_WITH_LIST4("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") &&
+                        (TailMatches5("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
+                         TailMatches4("REFERENCING", "NEW", "TABLE", MatchAny)))
+               COMPLETE_WITH_LIST4("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") &&
+                        (TailMatches9("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
+                         TailMatches8("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
+                         TailMatches8("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
+                         TailMatches7("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", MatchAny)))
+               COMPLETE_WITH_LIST3("FOR", "WHEN (", "EXECUTE PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("FOR"))
+               COMPLETE_WITH_LIST3("EACH", "ROW", "STATEMENT");
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("FOR", "EACH"))
+               COMPLETE_WITH_LIST2("ROW", "STATEMENT");
+       else if (HeadMatches2("CREATE", "TRIGGER") &&
+                        (TailMatches3("FOR", "EACH", "ROW|STATEMENT") ||
+                         TailMatches2("FOR", "ROW|STATEMENT")))
+               COMPLETE_WITH_LIST2("WHEN (", "EXECUTE PROCEDURE");
        /* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */
        else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches1("EXECUTE"))
                COMPLETE_WITH_CONST("PROCEDURE");
+       else if (HeadMatches2("CREATE", "TRIGGER") && TailMatches2("EXECUTE", "PROCEDURE"))
+               COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
 
 /* CREATE ROLE,USER,GROUP <name> */
        else if (Matches3("CREATE", "ROLE|GROUP|USER", MatchAny) &&