" FROM pg_catalog.pg_roles "\
" WHERE rolname LIKE '%s'"
+/* add these to Query_for_list_of_roles in OWNER contexts */
+#define Keywords_for_list_of_owner_roles \
+"CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
+
/* add these to Query_for_list_of_roles in GRANT contexts */
#define Keywords_for_list_of_grant_roles \
-"PUBLIC", "CURRENT_ROLE", "CURRENT_USER", "SESSION_USER"
+Keywords_for_list_of_owner_roles, "PUBLIC"
#define Query_for_all_table_constraints \
"SELECT conname "\
/* CREATE */
/* complete with something you can create */
else if (TailMatches("CREATE"))
- matches = rl_completion_matches(text, create_command_generator);
-
+ {
+ /* only some object types can be created as part of CREATE SCHEMA */
+ if (HeadMatches("CREATE", "SCHEMA"))
+ COMPLETE_WITH("TABLE", "VIEW", "INDEX", "SEQUENCE", "TRIGGER",
+ /* for INDEX and TABLE/SEQUENCE, respectively */
+ "UNIQUE", "UNLOGGED");
+ else
+ matches = rl_completion_matches(text, create_command_generator);
+ }
/* complete with something you can create or replace */
else if (TailMatches("CREATE", "OR", "REPLACE"))
COMPLETE_WITH("FUNCTION", "PROCEDURE", "LANGUAGE", "RULE", "VIEW",
else if (TailMatches("AS", "ON", "SELECT|UPDATE|INSERT|DELETE", "TO"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables);
+/* CREATE SCHEMA [ <name> ] [ AUTHORIZATION ] */
+ else if (Matches("CREATE", "SCHEMA"))
+ COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_schemas,
+ "AUTHORIZATION");
+ else if (Matches("CREATE", "SCHEMA", "AUTHORIZATION") ||
+ Matches("CREATE", "SCHEMA", MatchAny, "AUTHORIZATION"))
+ COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
+ Keywords_for_list_of_owner_roles);
+ else if (Matches("CREATE", "SCHEMA", "AUTHORIZATION", MatchAny) ||
+ Matches("CREATE", "SCHEMA", MatchAny, "AUTHORIZATION", MatchAny))
+ COMPLETE_WITH("CREATE", "GRANT");
+ else if (Matches("CREATE", "SCHEMA", MatchAny))
+ COMPLETE_WITH("AUTHORIZATION", "CREATE", "GRANT");
+
/* CREATE SEQUENCE --- is allowed inside CREATE SCHEMA, so use TailMatches */
else if (TailMatches("CREATE", "SEQUENCE", MatchAny) ||
TailMatches("CREATE", "TEMP|TEMPORARY", "SEQUENCE", MatchAny))
/* Complete "CREATE TEMP/TEMPORARY" with the possible temp objects */
else if (TailMatches("CREATE", "TEMP|TEMPORARY"))
COMPLETE_WITH("SEQUENCE", "TABLE", "VIEW");
- /* Complete "CREATE UNLOGGED" with TABLE or MATVIEW */
+ /* Complete "CREATE UNLOGGED" with TABLE, SEQUENCE or MATVIEW */
else if (TailMatches("CREATE", "UNLOGGED"))
- COMPLETE_WITH("TABLE", "MATERIALIZED VIEW");
+ {
+ /* but not MATVIEW in CREATE SCHEMA */
+ if (HeadMatches("CREATE", "SCHEMA"))
+ COMPLETE_WITH("TABLE", "SEQUENCE");
+ else
+ COMPLETE_WITH("TABLE", "SEQUENCE", "MATERIALIZED VIEW");
+ }
/* Complete PARTITION BY with RANGE ( or LIST ( or ... */
else if (TailMatches("PARTITION", "BY"))
COMPLETE_WITH("RANGE (", "LIST (", "HASH (");
/* OWNER TO - complete with available roles */
else if (TailMatches("OWNER", "TO"))
COMPLETE_WITH_QUERY_PLUS(Query_for_list_of_roles,
- "CURRENT_ROLE",
- "CURRENT_USER",
- "SESSION_USER");
+ Keywords_for_list_of_owner_roles);
/* ORDER BY */
else if (TailMatches("FROM", MatchAny, "ORDER"))