From 9e2eeeb5066cbfa75d8a4be3658ed394e3efa11b Mon Sep 17 00:00:00 2001
From: reshke kirill <reshke@double.cloud>
Date: Fri, 1 Nov 2024 17:56:23 +0000
Subject: [PATCH v2 2/2] Enhance tab completion to ALTER TYPE ADD/DROP
 ATTRIBUTE

Now psql will complete

ALTER TYPE <typname> ADD ATTRIBUTE <attname>
with possible datatypes

Also, DROP/ADD ATTRIBUTE ... will be completed with CASCADE/RESRTICT
where appropriate
---
 src/bin/psql/tab-complete.in.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/bin/psql/tab-complete.in.c b/src/bin/psql/tab-complete.in.c
index 4b5334f2f0..7a3826aee8 100644
--- a/src/bin/psql/tab-complete.in.c
+++ b/src/bin/psql/tab-complete.in.c
@@ -3007,6 +3007,15 @@ match_previous_words(int pattern_id,
 	 */
 	else if (Matches("ALTER", "TYPE", MatchAny, "ALTER|DROP|RENAME", "ATTRIBUTE"))
 		COMPLETE_WITH_ATTR(prev3_wd);
+	/* complete ALTER TYPE ADD ATTRIBUTE <foo> with list of types */
+	else if (Matches("ALTER", "TYPE", MatchAny, "ADD", "ATTRIBUTE", MatchAny))
+		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_datatypes);
+	/* complete ALTER TYPE ADD ATTRIBUTE <foo> <footype> with CASCADE/RESTRICT */
+	else if (Matches("ALTER", "TYPE", MatchAny, "ADD", "ATTRIBUTE", MatchAny, MatchAny))
+		COMPLETE_WITH("CASCADE", "RESTRICT");
+	/* complete ALTER TYPE DROP ATTRIBUTE <foo> with CASCADE/RESTRICT */
+	else if (Matches("ALTER", "TYPE", MatchAny, "DROP", "ATTRIBUTE", MatchAny))
+		COMPLETE_WITH("CASCADE", "RESTRICT");
 	/* ALTER TYPE ALTER ATTRIBUTE <foo> */
 	else if (Matches("ALTER", "TYPE", MatchAny, "ALTER", "ATTRIBUTE", MatchAny))
 		COMPLETE_WITH("TYPE");
-- 
2.34.1

