Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oicZT-0001Xa-Kl for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Oct 2022 14:18:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oicZS-0005kx-8o for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Oct 2022 14:18:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oicZR-0005hZ-AV for pgsql-hackers@lists.postgresql.org; Wed, 12 Oct 2022 14:18:53 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oicZO-0003KH-DR for pgsql-hackers@lists.postgresql.org; Wed, 12 Oct 2022 14:18:52 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 6048F5C00ED for ; Wed, 12 Oct 2022 10:18:49 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Wed, 12 Oct 2022 10:18:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ilmari.org; h=cc :content-type:date:date:from:from:in-reply-to:message-id :mime-version:reply-to:sender:subject:subject:to:to; s=fm3; t= 1665584329; x=1665670729; bh=1s6pmlEUS7y1YbnfGPNmQERjVkIBUs17sqC llsk7kuE=; b=Nwdq3zyZUJ1MDzFw7RHzCdbmPGb5wcCGy1y7Pmu2ENImdCEeYYn 8ocw/ONZuYLDCJMu+QBs7gJagBy2IRB3Vyd0GfcKWUubWdNGfbfOSc6mg/JC8ICS vTIEPlaT95hdlbFVKseq1FGRLKc/zeUpqOn3J7EfzbzzmpaTW/bIZhAqC1ratU5w W+b/zyr3F667TAOE/P8vAUbnzx/aYMI1hlCiJx55Nk6RcTcx2NWfKzhVE5VXizcb 9sr29OHEINMH44UhvPLOl3Sj6r29lEih4jdyQ35KRULriI5/lKA+aBff9sEUj8zC /kFXRBbLOHWxRxOXWdRRkCZDbuv/Gh3Ll7A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1665584329; x= 1665670729; bh=1s6pmlEUS7y1YbnfGPNmQERjVkIBUs17sqCllsk7kuE=; b=Z e9tqIk0cVP6KRIN9NIjAPnV85JL6X6bSUgf+NUCIe59+Gzx1HOp2gfS23gz43YNq wA0dpmxaoVTJjVueFiyX9Z70NGqguhNd9mhQuDPWNgHkcoMACM2b3NOFMRJYgsd9 ebMCvhjJcpU5zAkC+reQJGcTQ6CjJZ+mJiFeg8XSWuGhutRM863vK2JiX2DDEG2w jklogDHgCXVeMNXswFa1cuzSvggyvP0+MQHUdv2K4vmD4LNzXg2MaQi4WkiDpG1x R9NEa+UR4u2QFR83sC3q0ydSqxMND0KNEdpZjTtXgWjPn7wmf9q6WMVx0T6SQOC8 cO4cBZ3NhbxKRXR9g5zAg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrfeejkedgjeehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkfgfgggtsehmtderredtreejnecuhfhrohhmpeffrghgfhhinhhn pgfklhhmrghrihgpofgrnhhnshonkhgvrhcuoehilhhmrghrihesihhlmhgrrhhirdhorh hgqeenucggtffrrghtthgvrhhnpedvvddvveevhfevgfefffdvhfehheekfedtfffffedt jeffudelveevgeetteetieenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmh grihhlfhhrohhmpehilhhmrghrihesihhlmhgrrhhirdhorhhg X-ME-Proxy: Feedback-ID: i1ff147bf:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 12 Oct 2022 10:18:48 -0400 (EDT) From: =?utf-8?Q?Dagfinn_Ilmari_Manns=C3=A5ker?= To: PostgreSQL Hackers Subject: [PATCH] Improve tab completion for ALTER TABLE on identity columns Date: Wed, 12 Oct 2022 15:18:46 +0100 Message-ID: <87mta1jfax.fsf@wibble.ilmari.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi Hackers, I noticed that psql has no tab completion around identity columns in ALTER TABLE, so here's some patches for that. In passing, I also added completion for ALTER SEQUECNE … START, which was missing for some reason. - ilmari --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-psql-Add-tab-completion-for-ALTER-SEQUENCE-START.patch From 4dad38d17e82b2efafe3666a0a92aa248cfc5e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Wed, 12 Oct 2022 14:17:12 +0100 Subject: [PATCH 1/4] =?UTF-8?q?psql:=20Add=20tab=20completion=20for=20ALTE?= =?UTF-8?q?R=20SEQUENCE=20=E2=80=A6=20START=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/psql/tab-complete.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 584d9d5ae6..24a5f1f62b 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2104,7 +2104,7 @@ psql_completion(const char *text, int start, int end) /* ALTER SEQUENCE */ else if (Matches("ALTER", "SEQUENCE", MatchAny)) COMPLETE_WITH("AS", "INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", - "NO", "CACHE", "CYCLE", "SET", "OWNED BY", + "START", "NO", "CACHE", "CYCLE", "SET", "OWNED BY", "OWNER TO", "RENAME TO"); /* ALTER SEQUENCE AS */ else if (TailMatches("ALTER", "SEQUENCE", MatchAny, "AS")) -- 2.34.1 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0002-psql-Add-tab-completion-for-ALTER-COLUMN-SET-GENERAT.patch From 59b0ab0159ad941dbc39b22aabb07e82c814612d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Wed, 12 Oct 2022 14:03:52 +0100 Subject: [PATCH 2/4] =?UTF-8?q?psql:=20Add=20tab=20completion=20for=20ALTE?= =?UTF-8?q?R=20COLUMN=20=E2=80=A6=20SET=20GENERATED=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/psql/tab-complete.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 24a5f1f62b..1d4f1fd794 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2381,7 +2381,7 @@ psql_completion(const char *text, int start, int end) /* ALTER TABLE ALTER [COLUMN] SET */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET")) - COMPLETE_WITH("(", "COMPRESSION", "DEFAULT", "NOT NULL", "STATISTICS", "STORAGE"); + COMPLETE_WITH("(", "COMPRESSION", "DEFAULT", "GENERATED", "NOT NULL", "STATISTICS", "STORAGE"); /* ALTER TABLE ALTER [COLUMN] SET ( */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "(") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "(")) @@ -2390,6 +2390,10 @@ psql_completion(const char *text, int start, int end) else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "COMPRESSION") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "COMPRESSION")) COMPLETE_WITH("DEFAULT", "PGLZ", "LZ4"); + /* ALTER TABLE ALTER [COLUMN] SET GENERATED */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "GENERATED") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "GENERATED")) + COMPLETE_WITH("ALWAYS", "BY DEFAULT"); /* ALTER TABLE ALTER [COLUMN] SET STORAGE */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "STORAGE") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "STORAGE")) -- 2.34.1 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0003-psql-Add-tab-completion-for-ALTER-COLUMN-SET-sequenc.patch From 45c3d606f7d19fcee8223618ace7907b197401e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Wed, 12 Oct 2022 14:21:24 +0100 Subject: [PATCH 3/4] =?UTF-8?q?psql:=20Add=20tab=20completion=20for=20ALTE?= =?UTF-8?q?R=20COLUMN=20=E2=80=A6=20SET=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/psql/tab-complete.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 1d4f1fd794..009b6a7265 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2381,7 +2381,9 @@ psql_completion(const char *text, int start, int end) /* ALTER TABLE ALTER [COLUMN] SET */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET")) - COMPLETE_WITH("(", "COMPRESSION", "DEFAULT", "GENERATED", "NOT NULL", "STATISTICS", "STORAGE"); + COMPLETE_WITH("(", "COMPRESSION", "DEFAULT", "GENERATED", "NOT NULL", "STATISTICS", "STORAGE", + /* a subset of ALTER SEQUENCE options */ + "INCREMENT", "MINVALUE", "MAXVALUE", "START", "NO", "CACHE", "CYCLE"); /* ALTER TABLE ALTER [COLUMN] SET ( */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "(") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "(")) @@ -2394,6 +2396,10 @@ psql_completion(const char *text, int start, int end) else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "GENERATED") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "GENERATED")) COMPLETE_WITH("ALWAYS", "BY DEFAULT"); + /* ALTER TABLE ALTER [COLUMN] SET NO */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "NO") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "NO")) + COMPLETE_WITH("MINVALUE", "MAXVALUE", "CYCLE"); /* ALTER TABLE ALTER [COLUMN] SET STORAGE */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET", "STORAGE") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET", "STORAGE")) -- 2.34.1 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0004-psql-Add-tab-completion-for-ALTER-COLUMN-ADD-GENERAT.patch From 47661c1c5d866816af3b898fe5d20137f6497780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= Date: Wed, 12 Oct 2022 15:07:13 +0100 Subject: [PATCH 4/4] =?UTF-8?q?psql:=20Add=20tab=20completion=20for=20ALTE?= =?UTF-8?q?R=20COLUMN=20=E2=80=A6=20ADD=20GENERATED=20=E2=80=A6=20AS=20IDE?= =?UTF-8?q?NTITY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bin/psql/tab-complete.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 009b6a7265..525bcf9d57 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -2378,6 +2378,20 @@ psql_completion(const char *text, int start, int end) else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny) || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny)) COMPLETE_WITH("TYPE", "SET", "RESET", "RESTART", "ADD", "DROP"); + /* ALTER TABLE ALTER [COLUMN] ADD */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "ADD") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "ADD")) + COMPLETE_WITH("GENERATED"); + /* ALTER TABLE ALTER [COLUMN] ADD GENERATED */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "ADD", "GENERATED") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "ADD", "GENERATED")) + COMPLETE_WITH("ALWAYS", "BY DEFAULT"); + /* ALTER TABLE ALTER [COLUMN] ADD GENERATED */ + else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "ADD", "GENERATED", "ALWAYS") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "ADD", "GENERATED", "ALWAYS") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "ADD", "GENERATED", "BY", "DEFAULT") || + Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "ADD", "GENERATED", "BY", "DEFAULT")) + COMPLETE_WITH("AS IDENTITY"); /* ALTER TABLE ALTER [COLUMN] SET */ else if (Matches("ALTER", "TABLE", MatchAny, "ALTER", "COLUMN", MatchAny, "SET") || Matches("ALTER", "TABLE", MatchAny, "ALTER", MatchAny, "SET")) -- 2.34.1 --=-=-=--