|
41 | 41 |
|
42 | 42 | #include <ctype.h>
|
43 | 43 |
|
| 44 | +#include "catalog/pg_am_d.h" |
44 | 45 | #include "catalog/pg_class_d.h"
|
45 | 46 |
|
46 | 47 | #include "libpq-fe.h"
|
@@ -824,6 +825,18 @@ static const SchemaQuery Query_for_list_of_statistics = {
|
824 | 825 | " FROM pg_catalog.pg_am "\
|
825 | 826 | " WHERE substring(pg_catalog.quote_ident(amname),1,%d)='%s'"
|
826 | 827 |
|
| 828 | +#define Query_for_list_of_index_access_methods \ |
| 829 | +" SELECT pg_catalog.quote_ident(amname) "\ |
| 830 | +" FROM pg_catalog.pg_am "\ |
| 831 | +" WHERE substring(pg_catalog.quote_ident(amname),1,%d)='%s' AND "\ |
| 832 | +" amtype=" CppAsString2(AMTYPE_INDEX) |
| 833 | + |
| 834 | +#define Query_for_list_of_table_access_methods \ |
| 835 | +" SELECT pg_catalog.quote_ident(amname) "\ |
| 836 | +" FROM pg_catalog.pg_am "\ |
| 837 | +" WHERE substring(pg_catalog.quote_ident(amname),1,%d)='%s' AND "\ |
| 838 | +" amtype=" CppAsString2(AMTYPE_TABLE) |
| 839 | + |
827 | 840 | /* the silly-looking length condition is just to eat up the current word */
|
828 | 841 | #define Query_for_list_of_arguments \
|
829 | 842 | "SELECT pg_catalog.oidvectortypes(proargtypes)||')' "\
|
@@ -2234,7 +2247,7 @@ psql_completion(const char *text, int start, int end)
|
2234 | 2247 | COMPLETE_WITH("TYPE");
|
2235 | 2248 | /* Complete "CREATE ACCESS METHOD <name> TYPE" */
|
2236 | 2249 | else if (Matches("CREATE", "ACCESS", "METHOD", MatchAny, "TYPE"))
|
2237 |
| - COMPLETE_WITH("INDEX"); |
| 2250 | + COMPLETE_WITH("INDEX", "TABLE"); |
2238 | 2251 | /* Complete "CREATE ACCESS METHOD <name> TYPE <type>" */
|
2239 | 2252 | else if (Matches("CREATE", "ACCESS", "METHOD", MatchAny, "TYPE", MatchAny))
|
2240 | 2253 | COMPLETE_WITH("HANDLER");
|
@@ -2322,7 +2335,7 @@ psql_completion(const char *text, int start, int end)
|
2322 | 2335 | else if (TailMatches("INDEX", MatchAny, MatchAny, "ON", MatchAny, "USING") ||
|
2323 | 2336 | TailMatches("INDEX", MatchAny, "ON", MatchAny, "USING") ||
|
2324 | 2337 | TailMatches("INDEX", "ON", MatchAny, "USING"))
|
2325 |
| - COMPLETE_WITH_QUERY(Query_for_list_of_access_methods); |
| 2338 | + COMPLETE_WITH_QUERY(Query_for_list_of_index_access_methods); |
2326 | 2339 | else if (TailMatches("ON", MatchAny, "USING", MatchAny) &&
|
2327 | 2340 | !TailMatches("POLICY", MatchAny, MatchAny, MatchAny, MatchAny, MatchAny) &&
|
2328 | 2341 | !TailMatches("FOR", MatchAny, MatchAny, MatchAny))
|
@@ -2490,10 +2503,14 @@ psql_completion(const char *text, int start, int end)
|
2490 | 2503 | /* Complete CREATE TABLE name (...) with supported options */
|
2491 | 2504 | else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)") ||
|
2492 | 2505 | TailMatches("CREATE", "UNLOGGED", "TABLE", MatchAny, "(*)"))
|
2493 |
| - COMPLETE_WITH("INHERITS (", "PARTITION BY", "TABLESPACE", "WITH ("); |
| 2506 | + COMPLETE_WITH("INHERITS (", "PARTITION BY", "USING", "TABLESPACE", "WITH ("); |
2494 | 2507 | else if (TailMatches("CREATE", "TEMP|TEMPORARY", "TABLE", MatchAny, "(*)"))
|
2495 | 2508 | COMPLETE_WITH("INHERITS (", "ON COMMIT", "PARTITION BY",
|
2496 | 2509 | "TABLESPACE", "WITH (");
|
| 2510 | + /* Complete CREATE TABLE (...) USING with table access methods */ |
| 2511 | + else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)", "USING") || |
| 2512 | + TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "(*)", "USING")) |
| 2513 | + COMPLETE_WITH_QUERY(Query_for_list_of_table_access_methods); |
2497 | 2514 | /* Complete CREATE TABLE (...) WITH with storage parameters */
|
2498 | 2515 | else if (TailMatches("CREATE", "TABLE", MatchAny, "(*)", "WITH", "(") ||
|
2499 | 2516 | TailMatches("CREATE", "TEMP|TEMPORARY|UNLOGGED", "TABLE", MatchAny, "(*)", "WITH", "("))
|
|
0 commit comments