psql: Add more constraint completion
- ALTER DOMAIN ... DROP/RENAME/VALIDATE CONSTRAINT - ALTER TABLE ... RENAME/VALIDATE CONSTRAINT - COMMENT ON CONSTRAINT - SET CONSTRAINTS
This commit is contained in:
parent
bd9b4f1689
commit
05cf0ea8d1
|
@ -354,6 +354,21 @@ static const SchemaQuery Query_for_list_of_tables = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static const SchemaQuery Query_for_list_of_constraints_with_schema = {
|
||||
/* catname */
|
||||
"pg_catalog.pg_constraint c",
|
||||
/* selcondition */
|
||||
"c.conrelid <> 0",
|
||||
/* viscondition */
|
||||
"true", /* there is no pg_constraint_is_visible */
|
||||
/* namespace */
|
||||
"c.connamespace",
|
||||
/* result */
|
||||
"pg_catalog.quote_ident(c.conname)",
|
||||
/* qualresult */
|
||||
NULL
|
||||
};
|
||||
|
||||
/* The bit masks for the following three functions come from
|
||||
* src/include/catalog/pg_trigger.h.
|
||||
*/
|
||||
|
@ -587,6 +602,28 @@ static const SchemaQuery Query_for_list_of_views = {
|
|||
" and pg_catalog.quote_ident(c1.relname)='%s'"\
|
||||
" and pg_catalog.pg_table_is_visible(c1.oid)"
|
||||
|
||||
#define Query_for_all_table_constraints \
|
||||
"SELECT pg_catalog.quote_ident(conname) "\
|
||||
" FROM pg_catalog.pg_constraint c "\
|
||||
" WHERE c.conrelid <> 0 "
|
||||
|
||||
/* the silly-looking length condition is just to eat up the current word */
|
||||
#define Query_for_constraint_of_type \
|
||||
"SELECT pg_catalog.quote_ident(conname) "\
|
||||
" FROM pg_catalog.pg_type t, pg_catalog.pg_constraint con "\
|
||||
" WHERE t.oid=contypid and (%d = pg_catalog.length('%s'))"\
|
||||
" and pg_catalog.quote_ident(t.typname)='%s'"\
|
||||
" and pg_catalog.pg_type_is_visible(t.oid)"
|
||||
|
||||
/* the silly-looking length condition is just to eat up the current word */
|
||||
#define Query_for_list_of_tables_for_constraint \
|
||||
"SELECT pg_catalog.quote_ident(relname) "\
|
||||
" FROM pg_catalog.pg_class"\
|
||||
" WHERE (%d = pg_catalog.length('%s'))"\
|
||||
" AND oid IN "\
|
||||
" (SELECT conrelid FROM pg_catalog.pg_constraint "\
|
||||
" 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_trigger \
|
||||
"SELECT pg_catalog.quote_ident(relname) "\
|
||||
|
@ -1147,6 +1184,17 @@ psql_completion(char *text, int start, int end)
|
|||
|
||||
COMPLETE_WITH_LIST(list_ALTERDOMAIN2);
|
||||
}
|
||||
/* ALTER DOMAIN <sth> DROP|RENAME|VALIDATE CONSTRAINT */
|
||||
else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "DOMAIN") == 0 &&
|
||||
(pg_strcasecmp(prev2_wd, "DROP") == 0 ||
|
||||
pg_strcasecmp(prev2_wd, "RENAME") == 0 ||
|
||||
pg_strcasecmp(prev2_wd, "VALIDATE") == 0) &&
|
||||
pg_strcasecmp(prev_wd, "CONSTRAINT") == 0)
|
||||
{
|
||||
completion_info_charp = prev3_wd;
|
||||
COMPLETE_WITH_QUERY(Query_for_constraint_of_type);
|
||||
}
|
||||
/* ALTER DOMAIN <sth> RENAME */
|
||||
else if (pg_strcasecmp(prev4_wd, "ALTER") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "DOMAIN") == 0 &&
|
||||
|
@ -1340,14 +1388,18 @@ psql_completion(char *text, int start, int end)
|
|||
|
||||
COMPLETE_WITH_LIST(list_TABLEDROP);
|
||||
}
|
||||
/* If we have TABLE <sth> DROP COLUMN, provide list of columns */
|
||||
else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
|
||||
/* If we have ALTER TABLE <sth> DROP COLUMN, provide list of columns */
|
||||
else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "DROP") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "COLUMN") == 0)
|
||||
COMPLETE_WITH_ATTR(prev3_wd, "");
|
||||
/* If we have TABLE <sth> DROP CONSTRAINT, provide list of constraints */
|
||||
else if (pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "DROP") == 0 &&
|
||||
/* If we have ALTER TABLE <sth> DROP|RENAME|VALIDATE CONSTRAINT, provide list of constraints */
|
||||
else if (pg_strcasecmp(prev5_wd, "ALTER") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "TABLE") == 0 &&
|
||||
(pg_strcasecmp(prev2_wd, "DROP") == 0 ||
|
||||
pg_strcasecmp(prev2_wd, "RENAME") == 0 ||
|
||||
pg_strcasecmp(prev2_wd, "VALIDATE") == 0) &&
|
||||
pg_strcasecmp(prev_wd, "CONSTRAINT") == 0)
|
||||
{
|
||||
completion_info_charp = prev3_wd;
|
||||
|
@ -1744,6 +1796,26 @@ psql_completion(char *text, int start, int end)
|
|||
|
||||
COMPLETE_WITH_LIST(list_TRANS2);
|
||||
}
|
||||
else if (pg_strcasecmp(prev3_wd, "COMMENT") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "ON") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "CONSTRAINT") == 0)
|
||||
{
|
||||
COMPLETE_WITH_QUERY(Query_for_all_table_constraints);
|
||||
}
|
||||
else if (pg_strcasecmp(prev4_wd, "COMMENT") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "ON") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "CONSTRAINT") == 0)
|
||||
{
|
||||
COMPLETE_WITH_CONST("ON");
|
||||
}
|
||||
else if (pg_strcasecmp(prev5_wd, "COMMENT") == 0 &&
|
||||
pg_strcasecmp(prev4_wd, "ON") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "CONSTRAINT") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "ON") == 0)
|
||||
{
|
||||
completion_info_charp = prev2_wd;
|
||||
COMPLETE_WITH_QUERY(Query_for_list_of_tables_for_constraint);
|
||||
}
|
||||
else if ((pg_strcasecmp(prev4_wd, "COMMENT") == 0 &&
|
||||
pg_strcasecmp(prev3_wd, "ON") == 0) ||
|
||||
(pg_strcasecmp(prev5_wd, "COMMENT") == 0 &&
|
||||
|
@ -2805,6 +2877,12 @@ psql_completion(char *text, int start, int end)
|
|||
|
||||
COMPLETE_WITH_LIST(my_list);
|
||||
}
|
||||
/* SET CONSTRAINTS */
|
||||
else if (pg_strcasecmp(prev2_wd, "SET") == 0 &&
|
||||
pg_strcasecmp(prev_wd, "CONSTRAINTS") == 0)
|
||||
{
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_constraints_with_schema, "UNION SELECT 'ALL'");
|
||||
}
|
||||
/* Complete SET CONSTRAINTS <foo> with DEFERRED|IMMEDIATE */
|
||||
else if (pg_strcasecmp(prev3_wd, "SET") == 0 &&
|
||||
pg_strcasecmp(prev2_wd, "CONSTRAINTS") == 0)
|
||||
|
|
Loading…
Reference in New Issue