Index: tab-complete.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/bin/psql/tab-complete.c,v retrieving revision 1.141 diff -r1.141 tab-complete.c 478a479,480 > static int find_open_parenthesis(int end); > 1019c1021,1037 < COMPLETE_WITH_ATTR(prev_wd); --- > { > if (find_open_parenthesis(end)) > { > COMPLETE_WITH_ATTR(prev_wd); > } > else > { > COMPLETE_WITH_CONST("("); > } > } > else if (pg_strcasecmp(prev5_wd, "INDEX") == 0 && > pg_strcasecmp(prev3_wd, "ON") == 0 && > pg_strcasecmp(prev_wd, "(") == 0) > { > COMPLETE_WITH_ATTR(prev2_wd); > } > 1225,1228c1243,1275 < static const char *const list_DROPCR[] = < {"CASCADE", "RESTRICT", NULL}; < < COMPLETE_WITH_LIST(list_DROPCR); --- > > if ((pg_strcasecmp(prev3_wd, "DROP") == 0) && (pg_strcasecmp(prev2_wd, "FUNCTION") == 0)) > { > if (find_open_parenthesis(end)) > { > static const char func_args_query[] = "select pg_catalog.oidvectortypes(proargtypes)||')' from pg_proc where proname='%s'"; > char *tmp_buf = malloc(strlen(func_args_query) + strlen(prev_wd)); > sprintf(tmp_buf, func_args_query, prev_wd); > COMPLETE_WITH_QUERY(tmp_buf); > free(tmp_buf); > } > else > { > COMPLETE_WITH_CONST("("); > } > } > else > { > static const char *const list_DROPCR[] = > {"CASCADE", "RESTRICT", NULL}; > > COMPLETE_WITH_LIST(list_DROPCR); > } > } > else if (pg_strcasecmp(prev4_wd, "DROP") == 0 && > pg_strcasecmp(prev3_wd, "FUNCTION") == 0 && > pg_strcasecmp(prev_wd, "(") == 0 ) > { > static const char func_args_query[] = "select pg_catalog.oidvectortypes(proargtypes)||')' from pg_proc where proname='%s'"; > char *tmp_buf = malloc(strlen(func_args_query) + strlen(prev2_wd)); > sprintf(tmp_buf, func_args_query, prev2_wd); > COMPLETE_WITH_QUERY(tmp_buf); > free(tmp_buf); 1230a1278,1279 > > 2249a2299,2319 > /* Find the parenthesis after the last word */ > > > static int find_open_parenthesis(int end) > { > int i = end-1; > > while((rl_line_buffer[i]!=' ')&&(i>=0)) > { > if (rl_line_buffer[i]=='(') return 1; > i--; > } > while((rl_line_buffer[i]==' ')&&(i>=0)) > { > i--; > } > if (rl_line_buffer[i]=='(') > { > return 1; > } > return 0; 2250a2321 > }