|
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 | +#defineQuery_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 | +#defineQuery_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 | #defineQuery_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 | elseif (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 | elseif (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 | elseif (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 | elseif (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 | elseif (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 | elseif (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 | +elseif (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 | elseif (TailMatches("CREATE","TABLE",MatchAny,"(*)","WITH","(")||
|
2499 | 2516 | TailMatches("CREATE","TEMP|TEMPORARY|UNLOGGED","TABLE",MatchAny,"(*)","WITH","("))
|
|