Tab completion for CREATE TABLE ... AS
Hi,
Look like the tab completion for CREATE TABLE ... AS is not proposed.
gilles=# CREATE TABLE test
( OF PARTITION OF
The attached patch fix that and also propose the further completion
after the AS keyword.
gilles=# CREATE TABLE test
( AS OF PARTITION OF
gilles=# CREATE TABLE test AS
SELECT WITH
Adding the patch to current commitfest.
Best regards,
--
Gilles Darold
http://www.darold.net/
Attachments:
fix-create-as-completion-v1.patchtext/x-patch; charset=UTF-8; name=fix-create-as-completion-v1.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index 93742fc6ac..d793a94d6a 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3231,11 +3231,15 @@ psql_completion(const char *text, int start, int end)
/* Complete CREATE TABLE <name> with '(', OF or PARTITION OF */
else if (TailMatches("CREATE", "TABLE", MatchAny) ||
TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny))
- COMPLETE_WITH("(", "OF", "PARTITION OF");
+ COMPLETE_WITH("(", "OF", "PARTITION OF", "AS");
/* Complete CREATE TABLE <name> OF with list of composite types */
else if (TailMatches("CREATE", "TABLE", MatchAny, "OF") ||
TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "OF"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes);
+ /* Complete CREATE TABLE <name> AS with list of keywords */
+ else if (TailMatches("CREATE", "TABLE", MatchAny, "AS") ||
+ TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "AS"))
+ COMPLETE_WITH("SELECT", "WITH");
/* Complete CREATE TABLE name (...) with supported options */
else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)") ||
TailMatches("CREATE", "UNLOGGED", "TABLE", MatchAny, "(*)"))
Hi
On 02.11.23 17:27, Gilles Darold wrote:
Hi,
Look like the tab completion for CREATE TABLE ... AS is not proposed.
gilles=# CREATE TABLE test
( OF PARTITION OFThe attached patch fix that and also propose the further completion
after the AS keyword.gilles=# CREATE TABLE test
( AS OF PARTITION OF
gilles=# CREATE TABLE test AS
SELECT WITHAdding the patch to current commitfest.
Best regards,
Thanks for the patch!
It applies and builds cleanly, and it works as expected
"AS" is suggested after "CREATE TABLE t":
postgres=# CREATE TABLE t <TAB><TAB>
( AS OF PARTITION OF
--
Jim
On Thu, Nov 02, 2023 at 07:27:02PM +0300, Gilles Darold wrote:
Look like the tab completion for CREATE TABLE ... AS is not
proposed.+ /* Complete CREATE TABLE <name> AS with list of keywords */ + else if (TailMatches("CREATE", "TABLE", MatchAny, "AS") || + TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "AS")) + COMPLETE_WITH("SELECT", "WITH");
There is a bit more than SELECT and WITH as possible query for a CTAS.
How about VALUES, TABLE or even EXECUTE (itself able to handle a
SELECT, TABLE or VALUES)?
--
Michael
Le 15/11/2023 à 03:58, Michael Paquier a écrit :
On Thu, Nov 02, 2023 at 07:27:02PM +0300, Gilles Darold wrote:
Look like the tab completion for CREATE TABLE ... AS is not
proposed.+ /* Complete CREATE TABLE <name> AS with list of keywords */ + else if (TailMatches("CREATE", "TABLE", MatchAny, "AS") || + TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "AS")) + COMPLETE_WITH("SELECT", "WITH");There is a bit more than SELECT and WITH as possible query for a CTAS.
How about VALUES, TABLE or even EXECUTE (itself able to handle a
SELECT, TABLE or VALUES)?
--
Michael
Right, I don't know how I have missed the sql-createtableas page in the
documentation.
Patched v2 fixes the keyword list, I have also sorted by alphabetical
order the CREATE TABLE completion (AS was at the end of the list).
It has also been re-based on current master.
--
Gilles Darold
http://www.darold.net/
Attachments:
fix-create-as-completion-v2.patchtext/x-patch; charset=UTF-8; name=fix-create-as-completion-v2.patchDownload
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index a1dfc11f6b..e6c88cf1a1 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -2501,11 +2501,15 @@ psql_completion(const char *text, int start, int end)
/* Complete CREATE TABLE <name> with '(', OF or PARTITION OF */
else if (TailMatches("CREATE", "TABLE", MatchAny) ||
TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny))
- COMPLETE_WITH("(", "OF", "PARTITION OF");
+ COMPLETE_WITH("(", "AS", "OF", "PARTITION OF");
/* Complete CREATE TABLE <name> OF with list of composite types */
else if (TailMatches("CREATE", "TABLE", MatchAny, "OF") ||
TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "OF"))
COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_composite_datatypes, NULL);
+ /* Complete CREATE TABLE <name> AS with list of keywords */
+ else if (TailMatches("CREATE", "TABLE", MatchAny, "AS") ||
+ TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "AS"))
+ COMPLETE_WITH("EXECUTE", "SELECT", "TABLE", "VALUES", "WITH");
/* Complete CREATE TABLE name (...) with supported options */
else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)") ||
TailMatches("CREATE", "UNLOGGED", "TABLE", MatchAny, "(*)"))
On Wed, Nov 15, 2023 at 05:26:58PM +0300, Gilles Darold wrote:
Right, I don't know how I have missed the sql-createtableas page in the
documentation.Patched v2 fixes the keyword list, I have also sorted by alphabetical order
the CREATE TABLE completion (AS was at the end of the list).It has also been re-based on current master.
Fun. It has failed to apply here.
Anyway, I can see that a comment update has been forgotten. A second
thing is that it requires two more lines to add the query keywords for
the case where a CTAS has a list of column names. I've added both
changes, and applied the patch on HEAD. That's not all the patterns
possible, but this covers the most useful ones.
--
Michael