--- src/bin/psql/tab-complete.c Wed Sep 4 15:31:36 2002 +++ src/bin/psql/tab-complete.c.mine Wed Dec 11 11:53:39 2002 @@ -316,27 +316,29 @@ else if (!prev_wd) COMPLETE_WITH_LIST(sql_commands); -/* CREATE or DROP */ +/* CREATE or DROP but not ALTER TABLE sth DROP*/ /* complete with something you can create or drop */ - else if (strcasecmp(prev_wd, "CREATE") == 0 || strcasecmp(prev_wd, "DROP") == 0) + else if (strcasecmp(prev_wd, "CREATE") == 0 || + ((strcasecmp(prev_wd, "DROP") == 0) && strcasecmp(prev3_wd,"TABLE") != 0 )) matches = completion_matches(text, create_command_generator); /* ALTER */ - /* complete with what you can alter (TABLE, GROUP, USER) */ - else if (strcasecmp(prev_wd, "ALTER") == 0) + /* complete with what you can alter (DATABASE GROUP TABLE TRIGGER USER), + * unless we're in ALTER TABLE sth ALTER */ + else if (strcasecmp(prev_wd, "ALTER") == 0 && (strcasecmp(prev3_wd, "TABLE") != 0 )) { - char *list_ALTER[] = {"GROUP", "SCHEMA", "TABLE", "USER", NULL}; + char *list_ALTER[] = {"DATABASE", "GROUP", "TABLE", "TRIGGER", "USER", NULL}; COMPLETE_WITH_LIST(list_ALTER); } /* - * If we detect ALTER TABLE , suggest either ADD, ALTER, or - * RENAME + * If we detect ALTER TABLE , suggest either ADD, DROP, ALTER, + * RENAME, or OWNER */ else if (strcasecmp(prev3_wd, "ALTER") == 0 && strcasecmp(prev2_wd, "TABLE") == 0) { - char *list_ALTER2[] = {"ADD", "ALTER", "RENAME", NULL}; + char *list_ALTER2[] = {"ADD", "DROP", "ALTER", "RENAME", "OWNER TO", NULL}; COMPLETE_WITH_LIST(list_ALTER2); } @@ -344,6 +346,19 @@ else if (strcasecmp(prev3_wd, "TABLE") == 0 && (strcasecmp(prev_wd, "ALTER") == 0 || strcasecmp(prev_wd, "RENAME") == 0)) COMPLETE_WITH_ATTR(prev2_wd); + + /* If we have TABLE DROP, provide COLUMN or CONSTRAINT */ + else if (strcasecmp(prev3_wd, "TABLE") == 0 && + (strcasecmp(prev_wd, "DROP") == 0)) + { + char *list_TABLEDROP[] = {"COLUMN", "CONSTRAINT", NULL}; + COMPLETE_WITH_LIST(list_TABLEDROP); + } + /* If we have TABLE DROP COLUMN, provide list of columns */ + else if (strcasecmp(prev4_wd, "TABLE") == 0 && + strcasecmp(prev2_wd, "DROP") == 0 && + strcasecmp(prev_wd, "COLUMN") == 0) + COMPLETE_WITH_ATTR(prev3_wd); /* complete ALTER GROUP with ADD or DROP */ else if (strcasecmp(prev3_wd, "ALTER") == 0 && strcasecmp(prev2_wd, "GROUP") == 0)