[PATCH] Tab complete EXECUTE FUNCTION for CREATE (EVENT) TRIGGER

Поиск
Список
Период
Сортировка
От ilmari@ilmari.org (Dagfinn Ilmari Mannsåker)
Тема [PATCH] Tab complete EXECUTE FUNCTION for CREATE (EVENT) TRIGGER
Дата
Msg-id d8jmur4q4yc.fsf@dalvik.ping.uio.no
обсуждение исходный текст
Ответы Re: [PATCH] Tab complete EXECUTE FUNCTION for CREATE (EVENT) TRIGGER
Re: [PATCH] Tab complete EXECUTE FUNCTION for CREATE (EVENT) TRIGGER
Список pgsql-hackers
Hi hackers,

The last-minute change for CREATE (EVENT) TRIGGER to accept EXECUTE
FUNCTION as well as EXECUTE PROCEDURE did not update the tab completion
in psql to match.  Please find attached two patches that do this for
CREATE TRIGGER and CREATE EVENT TRIGGER, respectively.

To keep the duplication minimal, I've changed it from completing EXECUTE
PROCEDURE as a single thing to just EXECUTE, and then completing
FUNCTION or FUNCTION and PROCEDURE after that depending on the server
version.

- ilmari
-- 
- Twitter seems more influential [than blogs] in the 'gets reported in
  the mainstream press' sense at least.               - Matt McLeod
- That'd be because the content of a tweet is easier to condense down
  to a mainstream media article.                      - Calle Dybedahl

From 61d6fcc4f979f31b40fb54d3a7481e27d62eb772 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Fri, 19 Oct 2018 17:13:05 +0100
Subject: [PATCH 1/2] Tab complete EXECUTE FUNCTION for CREATE TRIGGER
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The change to accept EXECUTE FUNCTION as well as EXECUTE PROCEDURE in
CREATE TRIGGER (commit 0a63f996e018ac508c858e87fa39cc254a5db49f)
didn't tell psql's tab completion system about this.

Change the completion from EXECUTE PROCEDURE to just EXECUTE, then
complete any CREATE TRIGGER … EXECUTE with FUNCTION as well as
PROCEDURE if we're connected to a version 11 or newer server.

In passing, add tab completion of EXECUTE FUNCTION/PROCEDURE after a
complete WHEN ( … ) clause.

The FUNCTION alternative for completing function names isn't strictly
necessary, because words_after_create makes it complete function names
after FUNCTION, but having all the completion logic for a single
command in one place seems neater to me.
---
 src/bin/psql/tab-complete.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 299600652f..70aa629a3b 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2474,10 +2474,10 @@ psql_completion(const char *text, int start, int end)
         COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_views, NULL);
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("ON", MatchAny))
         COMPLETE_WITH("NOT DEFERRABLE", "DEFERRABLE", "INITIALLY",
-                      "REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+                      "REFERENCING", "FOR", "WHEN (", "EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") &&
              (TailMatches("DEFERRABLE") || TailMatches("INITIALLY", "IMMEDIATE|DEFERRED")))
-        COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+        COMPLETE_WITH("REFERENCING", "FOR", "WHEN (", "EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("REFERENCING"))
         COMPLETE_WITH("OLD TABLE", "NEW TABLE");
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("OLD|NEW", "TABLE"))
@@ -2485,17 +2485,17 @@ psql_completion(const char *text, int start, int end)
     else if (HeadMatches("CREATE", "TRIGGER") &&
              (TailMatches("REFERENCING", "OLD", "TABLE", "AS", MatchAny) ||
               TailMatches("REFERENCING", "OLD", "TABLE", MatchAny)))
-        COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+        COMPLETE_WITH("NEW TABLE", "FOR", "WHEN (", "EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") &&
              (TailMatches("REFERENCING", "NEW", "TABLE", "AS", MatchAny) ||
               TailMatches("REFERENCING", "NEW", "TABLE", MatchAny)))
-        COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE PROCEDURE");
+        COMPLETE_WITH("OLD TABLE", "FOR", "WHEN (", "EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") &&
              (TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
               TailMatches("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", "AS", MatchAny) ||
               TailMatches("REFERENCING", "OLD|NEW", "TABLE", "AS", MatchAny, "OLD|NEW", "TABLE", MatchAny) ||
               TailMatches("REFERENCING", "OLD|NEW", "TABLE", MatchAny, "OLD|NEW", "TABLE", MatchAny)))
-        COMPLETE_WITH("FOR", "WHEN (", "EXECUTE PROCEDURE");
+        COMPLETE_WITH("FOR", "WHEN (", "EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR"))
         COMPLETE_WITH("EACH", "ROW", "STATEMENT");
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("FOR", "EACH"))
@@ -2503,11 +2503,15 @@ psql_completion(const char *text, int start, int end)
     else if (HeadMatches("CREATE", "TRIGGER") &&
              (TailMatches("FOR", "EACH", "ROW|STATEMENT") ||
               TailMatches("FOR", "ROW|STATEMENT")))
-        COMPLETE_WITH("WHEN (", "EXECUTE PROCEDURE");
-    /* complete CREATE TRIGGER ... EXECUTE with PROCEDURE */
+        COMPLETE_WITH("WHEN (", "EXECUTE");
+    else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("WHEN", "(*)"))
+        COMPLETE_WITH("EXECUTE");
     else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE"))
-        COMPLETE_WITH("PROCEDURE");
-    else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE", "PROCEDURE"))
+        if (pset.sversion >= 110000)
+            COMPLETE_WITH("FUNCTION", "PROCEDURE");
+        else
+            COMPLETE_WITH("PROCEDURE");
+    else if (HeadMatches("CREATE", "TRIGGER") && TailMatches("EXECUTE", "FUNCTION|PROCEDURE"))
         COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
 
 /* CREATE ROLE,USER,GROUP <name> */
-- 
2.19.1

From 1fa81580cc399cff78e4a3d0914145ca824494e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Mon, 22 Oct 2018 18:06:20 +0100
Subject: [PATCH 2/2] Improve CREATE EVENT TRIGGER tab completion

This adds tab completion of the WHEN and EXECUTE TRIGGER/PROCEDURE
clauses to CREATE EVENT TRIGGER, similar to CREATE TRIGGER in the
previous commit.
---
 src/bin/psql/tab-complete.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 70aa629a3b..3253e51ebe 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2567,6 +2567,19 @@ psql_completion(const char *text, int start, int end)
     /* Complete CREATE EVENT TRIGGER <name> ON with event_type */
     else if (Matches("CREATE", "EVENT", "TRIGGER", MatchAny, "ON"))
         COMPLETE_WITH("ddl_command_start", "ddl_command_end", "sql_drop");
+    else if (Matches("CREATE", "EVENT", "TRIGGER", MatchAny, "ON", MatchAny))
+        COMPLETE_WITH("WHEN TAG IN (", "EXECUTE");
+    else if (Matches("CREATE", "EVENT", "TRIGGER", MatchAny, "ON", MatchAny, "WHEN"))
+        COMPLETE_WITH("TAG IN (");
+    else if (Matches("CREATE", "EVENT", "TRIGGER", MatchAny, "ON", MatchAny, "WHEN", "TAG", "IN", "(*)"))
+        COMPLETE_WITH("EXECUTE");
+    else if (HeadMatches("CREATE", "EVENT", "TRIGGER") && TailMatches("EXECUTE"))
+        if (pset.sversion >= 110000)
+            COMPLETE_WITH("FUNCTION", "PROCEDURE");
+        else
+            COMPLETE_WITH("PROCEDURE");
+    else if (HeadMatches("CREATE", "EVENT", "TRIGGER") && TailMatches("EXECUTE", "FUNCTION|PROCEDURE"))
+        COMPLETE_WITH_VERSIONED_SCHEMA_QUERY(Query_for_list_of_functions, NULL);
 
 /* DEALLOCATE */
     else if (Matches("DEALLOCATE"))
-- 
2.19.1


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Buildfarm failures for hash indexes: buffer leaks
Следующее
От: Fabien COELHO
Дата:
Сообщение: Re: Buildfarm failures for hash indexes: buffer leaks