From cc71ceab57d763f8f443346badd8e826b3b09e6e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 26 Apr 2012 20:07:40 +0300 Subject: [PATCH] psql: Tab completion updates Add/complete support for: - ALTER DOMAIN / VALIDATE CONSTRAINT - ALTER DOMAIN / RENAME - ALTER DOMAIN / RENAME CONSTRAINT - ALTER TABLE / RENAME CONSTRAINT --- src/bin/psql/tab-complete.c | 38 ++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 2864693158a..23b7a907f7e 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1090,7 +1090,7 @@ psql_completion(char *text, int start, int end) pg_strcasecmp(prev2_wd, "DOMAIN") == 0) { static const char *const list_ALTERDOMAIN[] = - {"ADD", "DROP", "OWNER TO", "SET", NULL}; + {"ADD", "DROP", "OWNER TO", "RENAME", "SET", "VALIDATE CONSTRAINT", NULL}; COMPLETE_WITH_LIST(list_ALTERDOMAIN); } @@ -1104,6 +1104,22 @@ psql_completion(char *text, int start, int end) COMPLETE_WITH_LIST(list_ALTERDOMAIN2); } + /* ALTER DOMAIN RENAME */ + else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 && + pg_strcasecmp(prev3_wd, "DOMAIN") == 0 && + pg_strcasecmp(prev_wd, "RENAME") == 0) + { + static const char *const list_ALTERDOMAIN[] = + {"CONSTRAINT", "TO", NULL}; + + COMPLETE_WITH_LIST(list_ALTERDOMAIN); + } + /* ALTER DOMAIN RENAME CONSTRAINT */ + else if (pg_strcasecmp(prev5_wd, "DOMAIN") == 0 && + pg_strcasecmp(prev3_wd, "RENAME") == 0 && + pg_strcasecmp(prev2_wd, "CONSTRAINT") == 0) + COMPLETE_WITH_CONST("TO"); + /* ALTER DOMAIN SET */ else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 && pg_strcasecmp(prev3_wd, "DOMAIN") == 0 && @@ -1220,12 +1236,18 @@ psql_completion(char *text, int start, int end) COMPLETE_WITH_LIST(list_ALTERDISABLE); } - /* If we have TABLE ALTER|RENAME, provide list of columns */ - else if (pg_strcasecmp(prev3_wd, "TABLE") == 0 && - (pg_strcasecmp(prev_wd, "ALTER") == 0 || - pg_strcasecmp(prev_wd, "RENAME") == 0)) + /* ALTER TABLE xxx ALTER */ + else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 && + pg_strcasecmp(prev3_wd, "TABLE") == 0 && + pg_strcasecmp(prev_wd, "ALTER") == 0) COMPLETE_WITH_ATTR(prev2_wd, " UNION SELECT 'COLUMN'"); + /* ALTER TABLE xxx RENAME */ + else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 && + pg_strcasecmp(prev3_wd, "TABLE") == 0 && + pg_strcasecmp(prev_wd, "RENAME") == 0) + COMPLETE_WITH_ATTR(prev2_wd, " UNION SELECT 'COLUMN' UNION SELECT 'CONSTRAINT' UNION SELECT 'TO'"); + /* * If we have TABLE ALTER COLUMN|RENAME COLUMN, provide list of * columns @@ -1239,13 +1261,15 @@ psql_completion(char *text, int start, int end) /* ALTER TABLE xxx RENAME yyy */ else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 && pg_strcasecmp(prev2_wd, "RENAME") == 0 && + pg_strcasecmp(prev_wd, "CONSTRAINT") != 0 && pg_strcasecmp(prev_wd, "TO") != 0) COMPLETE_WITH_CONST("TO"); - /* ALTER TABLE xxx RENAME COLUMN yyy */ + /* ALTER TABLE xxx RENAME COLUMN/CONSTRAINT yyy */ else if (pg_strcasecmp(prev5_wd, "TABLE") == 0 && pg_strcasecmp(prev3_wd, "RENAME") == 0 && - pg_strcasecmp(prev2_wd, "COLUMN") == 0 && + (pg_strcasecmp(prev2_wd, "COLUMN") == 0 || + pg_strcasecmp(prev2_wd, "CONSTRAINT") == 0) && pg_strcasecmp(prev_wd, "TO") != 0) COMPLETE_WITH_CONST("TO");