]> granicus.if.org Git - postgresql/commitdiff
Tab complete "TABLE whatever DROP CONSTRAINT" with a constraint name.
authorRobert Haas <rhaas@postgresql.org>
Mon, 20 Aug 2012 20:30:08 +0000 (16:30 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 20 Aug 2012 20:30:08 +0000 (16:30 -0400)
Jeff Janes

src/bin/psql/tab-complete.c

index a1bb230d6be585bb2643a1b707700581d1e98c1f..ef62a422eebc20bcf9427db8b6be9ab6b7bb7372 100644 (file)
@@ -579,6 +579,14 @@ static const SchemaQuery Query_for_list_of_views = {
 "       and pg_catalog.quote_ident(c1.relname)='%s'"\
 "       and pg_catalog.pg_table_is_visible(c2.oid)"
 
+/* the silly-looking length condition is just to eat up the current word */
+#define Query_for_constraint_of_table \
+"SELECT pg_catalog.quote_ident(conname) "\
+"  FROM pg_catalog.pg_class c1, pg_catalog.pg_constraint con "\
+" WHERE c1.oid=conrelid and (%d = pg_catalog.length('%s'))"\
+"       and pg_catalog.quote_ident(c1.relname)='%s'"\
+"       and pg_catalog.pg_table_is_visible(c1.oid)"
+
 /* the silly-looking length condition is just to eat up the current word */
 #define Query_for_list_of_tables_for_trigger \
 "SELECT pg_catalog.quote_ident(relname) "\
@@ -1337,6 +1345,14 @@ psql_completion(char *text, int start, int end)
                         pg_strcasecmp(prev2_wd, "DROP") == 0 &&
                         pg_strcasecmp(prev_wd, "COLUMN") == 0)
                COMPLETE_WITH_ATTR(prev3_wd, "");
+       /* If we have TABLE <sth> DROP CONSTRAINT, provide list of constraints */
+       else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
+                        pg_strcasecmp(prev2_wd, "DROP") == 0 &&
+                        pg_strcasecmp(prev_wd, "CONSTRAINT") == 0)
+       {
+               completion_info_charp = prev3_wd;
+               COMPLETE_WITH_QUERY(Query_for_constraint_of_table);
+       }
        /* ALTER TABLE ALTER [COLUMN] <foo> */
        else if ((pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
                          pg_strcasecmp(prev2_wd, "COLUMN") == 0) ||