From a53f73da6c3f6d6ace59ec9d8d9db5efef323f6c Mon Sep 17 00:00:00 2001 From: Christoph Heiss Date: Fri, 9 Dec 2022 11:22:38 +0100 Subject: [PATCH v2] psql: Add tab-complete for optional view parameters This adds them in the same matter as it works for storage parameters of tables. Signed-off-by: Christoph Heiss --- src/bin/psql/tab-complete.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 89e7317c23..7d30ec6d5a 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1310,6 +1310,13 @@ static const char *const table_storage_parameters[] = { NULL }; +/* Optional parameters for CREATE VIEW and ALTER VIEW */ +static const char *const view_optional_parameters[] = { + "check_option", + "security_barrier", + "security_invoker", + NULL +}; /* Forward declaration of functions */ static char **psql_completion(const char *text, int start, int end); @@ -2139,7 +2146,7 @@ psql_completion(const char *text, int start, int end) /* ALTER VIEW */ else if (Matches("ALTER", "VIEW", MatchAny)) COMPLETE_WITH("ALTER COLUMN", "OWNER TO", "RENAME", - "SET SCHEMA"); + "SET SCHEMA", "SET (", "RESET ("); /* ALTER VIEW xxx RENAME */ else if (Matches("ALTER", "VIEW", MatchAny, "RENAME")) COMPLETE_WITH_ATTR_PLUS(prev2_wd, "COLUMN", "TO"); @@ -2155,6 +2162,13 @@ psql_completion(const char *text, int start, int end) /* ALTER VIEW xxx RENAME COLUMN yyy */ else if (Matches("ALTER", "VIEW", MatchAny, "RENAME", "COLUMN", MatchAnyExcept("TO"))) COMPLETE_WITH("TO"); + /* ALTER VIEW xxx SET|RESET ( yyy [= zzz] ) */ + else if (Matches("ALTER", "VIEW", MatchAny, "SET|RESET", "(")) + COMPLETE_WITH_LIST(view_optional_parameters); + else if (Matches("ALTER", "VIEW", MatchAny, "SET", "(", "check_option", "=")) + COMPLETE_WITH("local", "cascaded"); + else if (Matches("ALTER", "VIEW", MatchAny, "SET", "(", "security_barrier|security_invoker", "=")) + COMPLETE_WITH("true", "false"); /* ALTER MATERIALIZED VIEW */ else if (Matches("ALTER", "MATERIALIZED", "VIEW", MatchAny)) @@ -3426,13 +3440,23 @@ psql_completion(const char *text, int start, int end) } /* CREATE VIEW --- is allowed inside CREATE SCHEMA, so use TailMatches */ - /* Complete CREATE [ OR REPLACE ] VIEW with AS */ + /* Complete CREATE [ OR REPLACE ] VIEW with AS or WITH ( */ else if (TailMatches("CREATE", "VIEW", MatchAny) || TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny)) + COMPLETE_WITH("AS", "WITH ("); + /* Complete CREATE [ OR REPLACE ] VIEW WITH ( with supported options */ + else if (TailMatches("CREATE", "VIEW", MatchAny, "WITH", "(") || + TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny, "WITH", "(")) + COMPLETE_WITH_LIST(view_optional_parameters); + /* Complete CREATE [ OR REPLACE ] VIEW WITH ( ... ) with "AS" */ + else if (TailMatches("CREATE", "VIEW", MatchAny, "WITH", "(*)") || + TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny, "WITH", "(*)")) COMPLETE_WITH("AS"); - /* Complete "CREATE [ OR REPLACE ] VIEW AS with "SELECT" */ + /* Complete "CREATE [ OR REPLACE ] VIEW [ WITH ( ... ) ] AS with "SELECT" */ else if (TailMatches("CREATE", "VIEW", MatchAny, "AS") || - TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny, "AS")) + TailMatches("CREATE", "VIEW", MatchAny, "WITH", "(*)", "AS") || + TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny, "AS") || + TailMatches("CREATE", "OR", "REPLACE", "VIEW", MatchAny, "WITH", "(*)", "AS")) COMPLETE_WITH("SELECT"); /* CREATE MATERIALIZED VIEW */ -- 2.38.1