diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2013-02-08 23:58:40 -0500 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2013-02-08 23:58:40 -0500 |
| commit | c61e26ee3e447c0277c6c4e5a8a452dbefdc502d (patch) | |
| tree | 156aaa9c81e67649fab714f63257d88ba6424322 /src/bin/psql/tab-complete.c | |
| parent | f806c191a3d5faa1af1e5032d394fc6c5f93df86 (diff) | |
Add support for ALTER RULE ... RENAME TO.
Ali Dar, reviewed by Dean Rasheed.
Diffstat (limited to 'src/bin/psql/tab-complete.c')
| -rw-r--r-- | src/bin/psql/tab-complete.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 09396ca5900..edfba677667 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -625,6 +625,15 @@ static const SchemaQuery Query_for_list_of_views = { " WHERE pg_catalog.quote_ident(conname)='%s')" /* the silly-looking length condition is just to eat up the current word */ +#define Query_for_list_of_tables_for_rule \ +"SELECT pg_catalog.quote_ident(relname) "\ +" FROM pg_catalog.pg_class"\ +" WHERE (%d = pg_catalog.length('%s'))"\ +" AND oid IN "\ +" (SELECT ev_class FROM pg_catalog.pg_rewrite "\ +" WHERE pg_catalog.quote_ident(rulename)='%s')" + +/* 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) "\ " FROM pg_catalog.pg_class"\ @@ -925,7 +934,7 @@ psql_completion(char *text, int start, int end) {"AGGREGATE", "COLLATION", "CONVERSION", "DATABASE", "DEFAULT PRIVILEGES", "DOMAIN", "EXTENSION", "FOREIGN DATA WRAPPER", "FOREIGN TABLE", "FUNCTION", "GROUP", "INDEX", "LANGUAGE", "LARGE OBJECT", "OPERATOR", - "ROLE", "SCHEMA", "SERVER", "SEQUENCE", "TABLE", + "ROLE", "RULE", "SCHEMA", "SERVER", "SEQUENCE", "TABLE", "TABLESPACE", "TEXT SEARCH", "TRIGGER", "TYPE", "USER", "USER MAPPING FOR", "VIEW", NULL}; @@ -1259,6 +1268,26 @@ psql_completion(char *text, int start, int end) COMPLETE_WITH_LIST(list_ALTERVIEW); } + + /* ALTER RULE <name>, add ON */ + else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && + pg_strcasecmp(prev2_wd, "RULE") == 0) + COMPLETE_WITH_CONST("ON"); + + /* If we have ALTER RULE <name> ON, then add the correct tablename */ + else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 && + pg_strcasecmp(prev3_wd, "RULE") == 0 && + pg_strcasecmp(prev_wd, "ON") == 0) + { + completion_info_charp = prev2_wd; + COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_rule); + } + + /* ALTER RULE <name> ON <name> */ + else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 && + pg_strcasecmp(prev4_wd, "RULE") == 0) + COMPLETE_WITH_CONST("RENAME TO"); + /* ALTER TRIGGER <name>, add ON */ else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && pg_strcasecmp(prev2_wd, "TRIGGER") == 0) |
