Add tab completion for partition MERGE/SPLIT operations
authorAlexander Korotkov <akorotkov@postgresql.org>
Tue, 30 Apr 2024 08:55:10 +0000 (11:55 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Tue, 30 Apr 2024 09:00:39 +0000 (12:00 +0300)
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

src/bin/psql/tab-complete.c

index 6fee3160f029f22c70ee9161cafc130d0903f9c3..97cd5d9f6281e9996debd1fca9a7e4af30b5cc6a 100644 (file)
@@ -2353,6 +2353,7 @@ psql_completion(const char *text, int start, int end)
                                          "OWNER TO", "SET", "VALIDATE CONSTRAINT",
                                          "REPLICA IDENTITY", "ATTACH PARTITION",
                                          "DETACH PARTITION", "FORCE ROW LEVEL SECURITY",
+                                         "SPLIT PARTITION", "MERGE PARTITIONS (",
                                          "OF", "NOT OF");
        /* ALTER TABLE xxx 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 (");
 
        /*
-        * 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>.
         */
-       else if (Matches("ALTER", "TABLE", MatchAny, "DETACH", "PARTITION"))
+       else if (Matches("ALTER", "TABLE", MatchAny, "DETACH|SPLIT", "PARTITION"))
        {
                set_completion_reference(prev3_wd);
                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))
                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 */
        else if (Matches("ALTER", "TABLE", MatchAny, "OF"))
                COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);