From 7c0b49cd03fdb6bbedada6c5e6439cb4cd6872c3 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 20 Oct 2015 10:27:20 -0400 Subject: [PATCH] Tab complete CREATE EXTENSION .. VERSION. Jeff Janes --- src/bin/psql/tab-complete.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 1619de52ae..4eb5058416 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -729,6 +729,13 @@ static const SchemaQuery Query_for_list_of_matviews = { " FROM pg_catalog.pg_available_extensions "\ " WHERE substring(pg_catalog.quote_ident(name),1,%d)='%s' AND installed_version IS NULL" +/* the silly-looking length condition is just to eat up the current word */ +#define Query_for_list_of_available_extension_versions \ +" SELECT pg_catalog.quote_ident(version) "\ +" FROM pg_catalog.pg_available_extension_versions "\ +" WHERE (%d = pg_catalog.length('%s'))"\ +" AND pg_catalog.quote_ident(name)='%s'" + #define Query_for_list_of_prepared_statements \ " SELECT pg_catalog.quote_ident(name) "\ " FROM pg_catalog.pg_prepared_statements "\ @@ -2266,10 +2273,18 @@ psql_completion(const char *text, int start, int end) pg_strcasecmp(prev2_wd, "EXTENSION") == 0) { static const char *const list_CREATE_EXTENSION[] = - {"WITH SCHEMA", "CASCADE", NULL}; + {"WITH SCHEMA", "CASCADE", "VERSION", NULL}; COMPLETE_WITH_LIST(list_CREATE_EXTENSION); } + /* CREATE EXTENSION VERSION */ + else if (pg_strcasecmp(prev4_wd, "CREATE") == 0 && + pg_strcasecmp(prev3_wd, "EXTENSION") == 0 && + pg_strcasecmp(prev_wd, "VERSION") == 0) + { + completion_info_charp = prev2_wd; + COMPLETE_WITH_QUERY(Query_for_list_of_available_extension_versions); + } /* CREATE FOREIGN */ else if (pg_strcasecmp(prev2_wd, "CREATE") == 0 &&