From 1906cc07d90a8e58fd381dba43c1085e9231f236 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 13 May 2021 09:48:28 +0900 Subject: [PATCH] Make saner the tab completion of INSERT and DELETE in psql When specified directly as DML queries, INSERT was not getting always completed to "INSERT INTO", same for DELETE with "DELETE FROM". This makes the completion behavior more consistent for both commands, saving a few keystrokes. Commands on policies, triggers, grant/revoke, etc. require only DELETE as completion keyword. Author: Haiying Tang Reviewed-by: Dilip Kumar, Julien Rouhaud Discussion: https://postgr.es/m/OS0PR01MB61135AE2B07CCD1AB8C6A0F6FB549@OS0PR01MB6113.jpnprd01.prod.outlook.com --- src/bin/psql/tab-complete.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 51ae248ed8..6598c5369a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1491,7 +1491,7 @@ psql_completion(const char *text, int start, int end) "ABORT", "ALTER", "ANALYZE", "BEGIN", "CALL", "CHECKPOINT", "CLOSE", "CLUSTER", "COMMENT", "COMMIT", "COPY", "CREATE", "DEALLOCATE", "DECLARE", "DELETE FROM", "DISCARD", "DO", "DROP", "END", "EXECUTE", "EXPLAIN", - "FETCH", "GRANT", "IMPORT FOREIGN SCHEMA", "INSERT", "LISTEN", "LOAD", "LOCK", + "FETCH", "GRANT", "IMPORT FOREIGN SCHEMA", "INSERT INTO", "LISTEN", "LOAD", "LOCK", "MOVE", "NOTIFY", "PREPARE", "REASSIGN", "REFRESH MATERIALIZED VIEW", "REINDEX", "RELEASE", "RESET", "REVOKE", "ROLLBACK", @@ -2386,7 +2386,7 @@ psql_completion(const char *text, int start, int end) " UNION ALL SELECT '('"); /* Complete COPY ( with legal query commands */ else if (Matches("COPY|\\copy", "(")) - COMPLETE_WITH("SELECT", "TABLE", "VALUES", "INSERT", "UPDATE", "DELETE", "WITH"); + COMPLETE_WITH("SELECT", "TABLE", "VALUES", "INSERT INTO", "UPDATE", "DELETE FROM", "WITH"); /* Complete COPY */ else if (Matches("COPY|\\copy", MatchAny)) COMPLETE_WITH("FROM", "TO"); @@ -3080,7 +3080,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("FOR"); /* DELETE --- can be inside EXPLAIN, RULE, etc */ - /* ... despite which, only complete DELETE with FROM at start of line */ + /* Complete DELETE with "FROM" */ else if (Matches("DELETE")) COMPLETE_WITH("FROM"); /* Complete DELETE FROM with a list of tables */ @@ -3208,7 +3208,7 @@ psql_completion(const char *text, int start, int end) * EXPLAIN [ ANALYZE ] [ VERBOSE ] statement */ else if (Matches("EXPLAIN")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE", + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE", "ANALYZE", "VERBOSE"); else if (HeadMatches("EXPLAIN", "(*") && !HeadMatches("EXPLAIN", "(*)")) @@ -3227,12 +3227,12 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("TEXT", "XML", "JSON", "YAML"); } else if (Matches("EXPLAIN", "ANALYZE")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE", + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE", "VERBOSE"); else if (Matches("EXPLAIN", "(*)") || Matches("EXPLAIN", "VERBOSE") || Matches("EXPLAIN", "ANALYZE", "VERBOSE")) - COMPLETE_WITH("SELECT", "INSERT", "DELETE", "UPDATE", "DECLARE"); + COMPLETE_WITH("SELECT", "INSERT INTO", "DELETE FROM", "UPDATE", "DECLARE"); /* FETCH && MOVE */ @@ -3587,7 +3587,7 @@ psql_completion(const char *text, int start, int end) /* PREPARE xx AS */ else if (Matches("PREPARE", MatchAny, "AS")) - COMPLETE_WITH("SELECT", "UPDATE", "INSERT", "DELETE FROM"); + COMPLETE_WITH("SELECT", "UPDATE", "INSERT INTO", "DELETE FROM"); /* * PREPARE TRANSACTION is missing on purpose. It's intended for transaction