mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Refactor CLUSTER and REINDEX grammar to use DefElem for option lists
This changes CLUSTER and REINDEX so as a parenthesized grammar becomes
possible for options, while unifying the grammar parsing rules for
option lists with the existing ones.
This is a follow-up of the work done in 873ea9e
for VACUUM, ANALYZE and
EXPLAIN. This benefits REINDEX for a potential backend-side filtering
for collatable-sensitive indexes and TABLESPACE, while CLUSTER would
benefit from the latter.
Author: Alexey Kondratov, Justin Pryzby
Discussion: https://postgr.es/m/8a8f5f73-00d3-55f8-7583-1375ca8f6a91@postgrespro.ru
This commit is contained in:
@ -2287,21 +2287,33 @@ psql_completion(const char *text, int start, int end)
|
||||
/* CLUSTER */
|
||||
else if (Matches("CLUSTER"))
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables, "UNION SELECT 'VERBOSE'");
|
||||
else if (Matches("CLUSTER", "VERBOSE"))
|
||||
else if (Matches("CLUSTER", "VERBOSE") ||
|
||||
Matches("CLUSTER", "(*)"))
|
||||
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_clusterables, NULL);
|
||||
/* If we have CLUSTER <sth>, then add "USING" */
|
||||
else if (Matches("CLUSTER", MatchAnyExcept("VERBOSE|ON")))
|
||||
else if (Matches("CLUSTER", MatchAnyExcept("VERBOSE|ON|(|(*)")))
|
||||
COMPLETE_WITH("USING");
|
||||
/* If we have CLUSTER VERBOSE <sth>, then add "USING" */
|
||||
else if (Matches("CLUSTER", "VERBOSE", MatchAny))
|
||||
else if (Matches("CLUSTER", "VERBOSE|(*)", MatchAny))
|
||||
COMPLETE_WITH("USING");
|
||||
/* If we have CLUSTER <sth> USING, then add the index as well */
|
||||
else if (Matches("CLUSTER", MatchAny, "USING") ||
|
||||
Matches("CLUSTER", "VERBOSE", MatchAny, "USING"))
|
||||
Matches("CLUSTER", "VERBOSE|(*)", MatchAny, "USING"))
|
||||
{
|
||||
completion_info_charp = prev2_wd;
|
||||
COMPLETE_WITH_QUERY(Query_for_index_of_table);
|
||||
}
|
||||
else if (HeadMatches("CLUSTER", "(*") &&
|
||||
!HeadMatches("CLUSTER", "(*)"))
|
||||
{
|
||||
/*
|
||||
* This fires if we're in an unfinished parenthesized option list.
|
||||
* get_previous_words treats a completed parenthesized option list as
|
||||
* one word, so the above test is correct.
|
||||
*/
|
||||
if (ends_with(prev_wd, '(') || ends_with(prev_wd, ','))
|
||||
COMPLETE_WITH("VERBOSE");
|
||||
}
|
||||
|
||||
/* COMMENT */
|
||||
else if (Matches("COMMENT"))
|
||||
@ -3565,7 +3577,7 @@ psql_completion(const char *text, int start, int end)
|
||||
* one word, so the above test is correct.
|
||||
*/
|
||||
if (ends_with(prev_wd, '(') || ends_with(prev_wd, ','))
|
||||
COMPLETE_WITH("VERBOSE");
|
||||
COMPLETE_WITH("CONCURRENTLY", "VERBOSE");
|
||||
}
|
||||
|
||||
/* SECURITY LABEL */
|
||||
|
Reference in New Issue
Block a user