--- tab-complete.c.orig 2002-12-11 12:11:15.000000000 -0600 +++ tab-complete.c 2002-12-11 12:18:44.000000000 -0600 @@ -363,14 +363,17 @@ 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 (TABLE, GROUP, USER, ...) + * unless we're in ALTER TABLE sth ALTER*/ + else if (strcasecmp(prev_wd, "ALTER") == 0 && (strcasecmp(prev3_wd, "TABLE") != 0 )) +) { char *list_ALTER[] = {"DATABASE", "GROUP", "SCHEMA", "TABLE", "TRIGGER", "USER", NULL}; @@ -396,12 +399,12 @@ COMPLETE_WITH_QUERY(Query_for_list_of_tables); /* - * 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", "ALTER", "DROP", "RENAME", "OWNER TO", NULL}; COMPLETE_WITH_LIST(list_ALTER2); } @@ -410,6 +413,19 @@ (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) {