From: Michael Paquier Date: Sun, 23 Dec 2018 00:33:49 +0000 (+0900) Subject: Add completion for storage parameters after CREATE TABLE WITH in psql X-Git-Tag: REL_12_BETA1~1035 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=11a60d496147a1e1bbf6932bda53941c5a62ee1a;p=thirdparty%2Fpostgresql.git Add completion for storage parameters after CREATE TABLE WITH in psql In passing, move the list of parameters where it can be used for both CREATE TABLE and ALTER TABLE, and reorder it alphabetically. Author: Dagfinn Ilmari Mannsåker Discussion: https://postgr.es/m/d8j1s77kdbb.fsf@dalvik.ping.uio.no --- diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index 5ba6ffba8c6..c504a9fd1c7 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -1005,6 +1005,41 @@ static const pgsql_thing_t words_after_create[] = { {NULL} /* end of list */ }; +/* Storage parameters for CREATE TABLE and ALTER TABLE */ +static const char *const table_storage_parameters[] = { + "autovacuum_analyze_scale_factor", + "autovacuum_analyze_threshold", + "autovacuum_enabled", + "autovacuum_freeze_max_age", + "autovacuum_freeze_min_age", + "autovacuum_freeze_table_age", + "autovacuum_multixact_freeze_max_age", + "autovacuum_multixact_freeze_min_age", + "autovacuum_multixact_freeze_table_age", + "autovacuum_vacuum_cost_delay", + "autovacuum_vacuum_cost_limit", + "autovacuum_vacuum_scale_factor", + "autovacuum_vacuum_threshold", + "fillfactor", + "log_autovacuum_min_duration", + "parallel_workers", + "toast.autovacuum_enabled", + "toast.autovacuum_freeze_max_age", + "toast.autovacuum_freeze_min_age", + "toast.autovacuum_freeze_table_age", + "toast.autovacuum_multixact_freeze_max_age", + "toast.autovacuum_multixact_freeze_min_age", + "toast.autovacuum_multixact_freeze_table_age", + "toast.autovacuum_vacuum_cost_delay", + "toast.autovacuum_vacuum_cost_limit", + "toast.autovacuum_vacuum_scale_factor", + "toast.autovacuum_vacuum_threshold", + "toast.log_autovacuum_min_duration", + "toast_tuple_target", + "user_catalog_table", + NULL +}; + /* Forward declaration of functions */ static char **psql_completion(const char *text, int start, int end); @@ -1904,44 +1939,7 @@ psql_completion(const char *text, int start, int end) COMPLETE_WITH("("); /* ALTER TABLE SET|RESET ( */ else if (Matches("ALTER", "TABLE", MatchAny, "SET|RESET", "(")) - { - static const char *const list_TABLEOPTIONS[] = - { - "autovacuum_analyze_scale_factor", - "autovacuum_analyze_threshold", - "autovacuum_enabled", - "autovacuum_freeze_max_age", - "autovacuum_freeze_min_age", - "autovacuum_freeze_table_age", - "autovacuum_multixact_freeze_max_age", - "autovacuum_multixact_freeze_min_age", - "autovacuum_multixact_freeze_table_age", - "autovacuum_vacuum_cost_delay", - "autovacuum_vacuum_cost_limit", - "autovacuum_vacuum_scale_factor", - "autovacuum_vacuum_threshold", - "fillfactor", - "parallel_workers", - "log_autovacuum_min_duration", - "toast_tuple_target", - "toast.autovacuum_enabled", - "toast.autovacuum_freeze_max_age", - "toast.autovacuum_freeze_min_age", - "toast.autovacuum_freeze_table_age", - "toast.autovacuum_multixact_freeze_max_age", - "toast.autovacuum_multixact_freeze_min_age", - "toast.autovacuum_multixact_freeze_table_age", - "toast.autovacuum_vacuum_cost_delay", - "toast.autovacuum_vacuum_cost_limit", - "toast.autovacuum_vacuum_scale_factor", - "toast.autovacuum_vacuum_threshold", - "toast.log_autovacuum_min_duration", - "user_catalog_table", - NULL - }; - - COMPLETE_WITH_LIST(list_TABLEOPTIONS); - } + COMPLETE_WITH_LIST(table_storage_parameters); else if (Matches("ALTER", "TABLE", MatchAny, "REPLICA", "IDENTITY", "USING", "INDEX")) { completion_info_charp = prev5_wd; @@ -2439,6 +2437,10 @@ psql_completion(const char *text, int start, int end) else if (TailMatches("CREATE", "TEMP|TEMPORARY", "TABLE", MatchAny, "(*)")) COMPLETE_WITH("INHERITS (", "ON COMMIT", "PARTITION BY", "TABLESPACE", "WITH ("); + /* Complete CREATE TABLE (...) WITH with storage parameters */ + else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)", "WITH", "(") || + TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "(*)", "WITH", "(")) + COMPLETE_WITH_LIST(table_storage_parameters); /* Complete CREATE TABLE ON COMMIT with actions */ else if (TailMatches("CREATE", "TEMP|TEMPORARY", "TABLE", MatchAny, "(*)", "ON", "COMMIT")) COMPLETE_WITH("DELETE ROWS", "DROP", "PRESERVE ROWS");