Add tab completion for partition MERGE/SPLIT operations

This commit implements psql tab completion for ALTER TABLE ... SPLIT PARTITION
and ALTER TABLE ... MERGE PARTITIONS commands.

Reported-by: Alexander Lakhin
Discussion: https://postgr.es/m/5dee3937-8e9f-cca4-11fb-737709a92b37%40gmail.com
Author: Dagfinn Ilmari Mannsåker, Pavel Borisov
This commit is contained in:
Alexander Korotkov 2024-04-30 11:55:10 +03:00
parent f4fc7cb54b
commit 60ae37a8bc
1 changed files with 16 additions and 2 deletions

View File

@ -2353,6 +2353,7 @@ psql_completion(const char *text, int start, int end)
"OWNER TO", "SET", "VALIDATE CONSTRAINT", "OWNER TO", "SET", "VALIDATE CONSTRAINT",
"REPLICA IDENTITY", "ATTACH PARTITION", "REPLICA IDENTITY", "ATTACH PARTITION",
"DETACH PARTITION", "FORCE ROW LEVEL SECURITY", "DETACH PARTITION", "FORCE ROW LEVEL SECURITY",
"SPLIT PARTITION", "MERGE PARTITIONS (",
"OF", "NOT OF"); "OF", "NOT OF");
/* ALTER TABLE xxx ADD */ /* ALTER TABLE xxx ADD */
else if (Matches("ALTER", "TABLE", MatchAny, "ADD")) else if (Matches("ALTER", "TABLE", MatchAny, "ADD"))
@ -2609,10 +2610,10 @@ psql_completion(const char *text, int start, int end)
COMPLETE_WITH("FROM (", "IN (", "WITH ("); COMPLETE_WITH("FROM (", "IN (", "WITH (");
/* /*
* If we have ALTER TABLE <foo> DETACH PARTITION, provide a list of * If we have ALTER TABLE <foo> DETACH|SPLIT PARTITION, provide a list of
* partitions of <foo>. * partitions of <foo>.
*/ */
else if (Matches("ALTER", "TABLE", MatchAny, "DETACH", "PARTITION")) else if (Matches("ALTER", "TABLE", MatchAny, "DETACH|SPLIT", "PARTITION"))
{ {
set_completion_reference(prev3_wd); set_completion_reference(prev3_wd);
COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table); COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
@ -2620,6 +2621,19 @@ psql_completion(const char *text, int start, int end)
else if (Matches("ALTER", "TABLE", MatchAny, "DETACH", "PARTITION", MatchAny)) else if (Matches("ALTER", "TABLE", MatchAny, "DETACH", "PARTITION", MatchAny))
COMPLETE_WITH("CONCURRENTLY", "FINALIZE"); COMPLETE_WITH("CONCURRENTLY", "FINALIZE");
/* ALTER TABLE <name> SPLIT PARTITION <name> */
else if (Matches("ALTER", "TABLE", MatchAny, "SPLIT", "PARTITION", MatchAny))
COMPLETE_WITH("INTO ( PARTITION");
/* ALTER TABLE <name> MERGE PARTITIONS ( */
else if (Matches("ALTER", "TABLE", MatchAny, "MERGE", "PARTITIONS", "("))
{
set_completion_reference(prev4_wd);
COMPLETE_WITH_SCHEMA_QUERY(Query_for_partition_of_table);
}
else if (Matches("ALTER", "TABLE", MatchAny, "MERGE", "PARTITIONS", "(*)"))
COMPLETE_WITH("INTO");
/* ALTER TABLE <name> OF */ /* ALTER TABLE <name> OF */
else if (Matches("ALTER", "TABLE", MatchAny, "OF")) else if (Matches("ALTER", "TABLE", MatchAny, "OF"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes); COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);