From bbc754baed1c217567c41b7d5d215250689f3c5d Mon Sep 17 00:00:00 2001 From: Sho Ito Date: Mon, 9 Nov 2026 22:13:01 -0500 Subject: [PATCH v2 2/2] psql: Add regression tests for REPACK tab completion Extend the existing completion tests to cover USING INDEX after a column list, INDEX after an explicitly typed USING, and table-specific index completion with and without column lists. Include another indexed table to detect fallback to the generic index list. --- src/bin/psql/t/010_tab_completion.pl | 76 ++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/bin/psql/t/010_tab_completion.pl b/src/bin/psql/t/010_tab_completion.pl index 1d2e5f5b..e4dd4bd1 100644 --- a/src/bin/psql/t/010_tab_completion.pl +++ b/src/bin/psql/t/010_tab_completion.pl @@ -422,6 +422,82 @@ check_completion( clear_line(); +# A closed column list can be followed directly by USING INDEX. +check_completion( + "REPACK (ANALYZE) tab1 (c1) \t", + qr/REPACK \(ANALYZE\) tab1 \(c1\) USING INDEX /, + "complete USING INDEX after a REPACK column list"); + +clear_query(); + +# REPACK must recognise USING as a keyword, including after a column list. +check_completion( + "REPACK USING \t", + qr/REPACK USING INDEX /, + "complete INDEX after REPACK USING"); + +clear_query(); + +check_completion( + "REPACK (VERBOSE) USING \t", + qr/REPACK \(VERBOSE\) USING INDEX /, + "complete INDEX after REPACK (VERBOSE) USING"); + +clear_query(); + +check_completion( + "REPACK tab1 USING \t", + qr/REPACK tab1 USING INDEX /, + "complete INDEX after REPACK tab1 USING"); + +clear_query(); + +check_completion( + "REPACK (ANALYZE) tab1 USING \t", + qr/REPACK \(ANALYZE\) tab1 USING INDEX /, + "complete INDEX after REPACK (ANALYZE) tab1 USING"); + +clear_query(); + +check_completion( + "REPACK (ANALYZE) tab1 (c1) USING \t", + qr/REPACK \(ANALYZE\) tab1 \(c1\) USING INDEX /, + "complete INDEX after REPACK (ANALYZE) tab1 (c1) USING"); + +clear_query(); + +# The table reference must skip the optional column list. repack_other is an +# unrelated table with a primary key too, so falling back to all indexes +# cannot uniquely complete the index name to tab1_pkey. +$node->safe_psql('postgres', 'CREATE TABLE repack_other (id int PRIMARY KEY)'); +check_completion( + "REPACK tab1 USING INDEX \t", + qr/REPACK tab1 USING INDEX tab1_pkey /, + "complete only the target table index after REPACK tab1"); + +clear_query(); + +check_completion( + "REPACK (ANALYZE) tab1 USING INDEX \t", + qr/REPACK \(ANALYZE\) tab1 USING INDEX tab1_pkey /, + "complete only the target table index after REPACK (ANALYZE) tab1"); + +clear_query(); + +check_completion( + "REPACK (ANALYZE) tab1 (c1) USING INDEX \t", + qr/REPACK \(ANALYZE\) tab1 \(c1\) USING INDEX tab1_pkey /, + "complete only the target table index after REPACK (ANALYZE) tab1 (c1)"); + +clear_query(); + +check_completion( + "REPACK (ANALYZE) tab1 (c1, c2) USING INDEX \t", + qr/REPACK \(ANALYZE\) tab1 \(c1, c2\) USING INDEX tab1_pkey /, + "complete only the target table index after REPACK (ANALYZE) tab1 (c1, c2)"); + +clear_query(); + # send psql an explicit \q to shut it down, else pty won't close properly $h->quit or die "psql returned $?";