@@ -874,6 +874,11 @@ static const SchemaQuery Query_for_list_of_matviews = {
874
874
" AND d.datname = pg_catalog.current_database() "\
875
875
" AND s.subdbid = d.oid"
876
876
877
+ #define Query_for_list_of_compression_methods \
878
+ " SELECT pg_catalog.quote_ident(cmname) "\
879
+ " FROM pg_catalog.pg_compression "\
880
+ " WHERE substring(pg_catalog.quote_ident(cmname),1,%d)='%s'"
881
+
877
882
/* the silly-looking length condition is just to eat up the current word */
878
883
#define Query_for_list_of_arguments \
879
884
"SELECT pg_catalog.oidvectortypes(proargtypes)||')' "\
@@ -996,6 +1001,7 @@ static const pgsql_thing_t words_after_create[] = {
996
1001
* CREATE CONSTRAINT TRIGGER is not supported here because it is designed
997
1002
* to be used only by pg_dump.
998
1003
*/
1004
+ {"COMPRESSION METHOD" ,NULL ,NULL },
999
1005
{"CONFIGURATION" ,Query_for_list_of_ts_configurations ,NULL ,THING_NO_SHOW },
1000
1006
{"CONVERSION" ,"SELECT pg_catalog.quote_ident(conname) FROM pg_catalog.pg_conversion WHERE substring(pg_catalog.quote_ident(conname),1,%d)='%s'" },
1001
1007
{"DATABASE" ,Query_for_list_of_databases },
@@ -1404,8 +1410,8 @@ psql_completion(const char *text, int start, int end)
1404
1410
static const char * const backslash_commands []= {
1405
1411
"\\a" ,"\\connect" ,"\\conninfo" ,"\\C" ,"\\cd" ,"\\copy" ,
1406
1412
"\\copyright" ,"\\crosstabview" ,
1407
- "\\d" ,"\\da" ,"\\dA" ,"\\db" ,"\\dc" ,"\\dC" ,"\\dd " ,"\\ddp " ,"\\dD " ,
1408
- "\\des" ,"\\det" ,"\\deu" ,"\\dew" ,"\\dE" ,"\\df" ,
1413
+ "\\d" ,"\\da" ,"\\dA" ,"\\db" ,"\\dc" ,"\\dC" ,"\\dCM " ,"\\dd " ,"\\ddp " ,
1414
+ "\\dD" , "\\ des" ,"\\det" ,"\\deu" ,"\\dew" ,"\\dE" ,"\\df" ,
1409
1415
"\\dF" ,"\\dFd" ,"\\dFp" ,"\\dFt" ,"\\dg" ,"\\di" ,"\\dl" ,"\\dL" ,
1410
1416
"\\dm" ,"\\dn" ,"\\do" ,"\\dO" ,"\\dp" ,"\\drds" ,"\\ds" ,"\\dS" ,
1411
1417
"\\dt" ,"\\dT" ,"\\dv" ,"\\du" ,"\\dx" ,"\\dy" ,
@@ -1906,11 +1912,17 @@ psql_completion(const char *text, int start, int end)
1906
1912
/* ALTER TABLE ALTER [COLUMN] <foo> SET */
1907
1913
else if (Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" )||
1908
1914
Matches6 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ))
1909
- COMPLETE_WITH_LIST5 ("(" ,"DEFAULT" ,"NOT NULL" ,"STATISTICS" ,"STORAGE" );
1915
+ COMPLETE_WITH_LIST6 ("(" , "COMPRESSED " ,"DEFAULT" ,"NOT NULL" ,"STATISTICS" ,"STORAGE" );
1910
1916
/* ALTER TABLE ALTER [COLUMN] <foo> SET ( */
1911
1917
else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"(" )||
1912
1918
Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"(" ))
1913
1919
COMPLETE_WITH_LIST2 ("n_distinct" ,"n_distinct_inherited" );
1920
+ else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"COMPRESSED" )||
1921
+ Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"COMPRESSED" ))
1922
+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
1923
+ else if (Matches9 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"COMPRESSED" ,MatchAny )||
1924
+ Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"COMPRESSED" ,MatchAny ))
1925
+ COMPLETE_WITH_CONST ("WITH (" );
1914
1926
/* ALTER TABLE ALTER [COLUMN] <foo> SET STORAGE */
1915
1927
else if (Matches8 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,"COLUMN" ,MatchAny ,"SET" ,"STORAGE" )||
1916
1928
Matches7 ("ALTER" ,"TABLE" ,MatchAny ,"ALTER" ,MatchAny ,"SET" ,"STORAGE" ))
@@ -2125,12 +2137,14 @@ psql_completion(const char *text, int start, int end)
2125
2137
"SERVER" ,"INDEX" ,"LANGUAGE" ,"POLICY" ,"PUBLICATION" ,"RULE" ,"SCHEMA" ,"SEQUENCE" ,"SUBSCRIPTION" ,
2126
2138
"TABLE" ,"TYPE" ,"VIEW" ,"MATERIALIZED VIEW" ,"COLUMN" ,"AGGREGATE" ,"FUNCTION" ,
2127
2139
"OPERATOR" ,"TRIGGER" ,"CONSTRAINT" ,"DOMAIN" ,"LARGE OBJECT" ,
2128
- "TABLESPACE" ,"TEXT SEARCH" ,"ROLE" ,NULL };
2140
+ "TABLESPACE" ,"TEXT SEARCH" ,"ROLE" ,"COMPRESSION METHOD" , NULL };
2129
2141
2130
2142
COMPLETE_WITH_LIST (list_COMMENT );
2131
2143
}
2132
2144
else if (Matches4 ("COMMENT" ,"ON" ,"ACCESS" ,"METHOD" ))
2133
2145
COMPLETE_WITH_QUERY (Query_for_list_of_access_methods );
2146
+ else if (Matches4 ("COMMENT" ,"ON" ,"COMPRESSION" ,"METHOD" ))
2147
+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
2134
2148
else if (Matches3 ("COMMENT" ,"ON" ,"FOREIGN" ))
2135
2149
COMPLETE_WITH_LIST2 ("DATA WRAPPER" ,"TABLE" );
2136
2150
else if (Matches4 ("COMMENT" ,"ON" ,"TEXT" ,"SEARCH" ))
@@ -2203,6 +2217,17 @@ psql_completion(const char *text, int start, int end)
2203
2217
else if (Matches6 ("CREATE" ,"ACCESS" ,"METHOD" ,MatchAny ,"TYPE" ,MatchAny ))
2204
2218
COMPLETE_WITH_CONST ("HANDLER" );
2205
2219
2220
+ /* CREATE COMPRESSION METHOD */
2221
+ /* Complete "CREATE COMPRESSION METHOD <name>" */
2222
+ else if (Matches4 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ))
2223
+ COMPLETE_WITH_CONST ("FOR" );
2224
+ /* Complete "CREATE COMPRESSION METHOD <name> FOR" */
2225
+ else if (Matches5 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ,"FOR" ))
2226
+ COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_datatypes ,NULL );
2227
+ /* Complete "CREATE COMPRESSION METHOD <name> FOR <type>" */
2228
+ else if (Matches6 ("CREATE" ,"COMPRESSION" ,"METHOD" ,MatchAny ,"FOR" ,MatchAny ))
2229
+ COMPLETE_WITH_CONST ("HANDLER" );
2230
+
2206
2231
/* CREATE DATABASE */
2207
2232
else if (Matches3 ("CREATE" ,"DATABASE" ,MatchAny ))
2208
2233
COMPLETE_WITH_LIST9 ("OWNER" ,"TEMPLATE" ,"ENCODING" ,"TABLESPACE" ,
@@ -2603,6 +2628,7 @@ psql_completion(const char *text, int start, int end)
2603
2628
Matches4 ("DROP" ,"ACCESS" ,"METHOD" ,MatchAny )||
2604
2629
(Matches4 ("DROP" ,"AGGREGATE|FUNCTION" ,MatchAny ,MatchAny )&&
2605
2630
ends_with (prev_wd ,')' ))||
2631
+ Matches4 ("DROP" ,"COMPRESSION" ,"METHOD" ,MatchAny )||
2606
2632
Matches4 ("DROP" ,"EVENT" ,"TRIGGER" ,MatchAny )||
2607
2633
Matches5 ("DROP" ,"FOREIGN" ,"DATA" ,"WRAPPER" ,MatchAny )||
2608
2634
Matches4 ("DROP" ,"FOREIGN" ,"TABLE" ,MatchAny )||
@@ -2695,6 +2721,12 @@ psql_completion(const char *text, int start, int end)
2695
2721
else if (Matches3 ("DROP" ,"SUBSCRIPTION" ,MatchAny ))
2696
2722
COMPLETE_WITH_LIST2 ("DROP SLOT" ,"NODROP SLOT" );
2697
2723
2724
+ /* DROP COMPRESSION METHOD */
2725
+ else if (Matches2 ("DROP" ,"COMPRESSION" ))
2726
+ COMPLETE_WITH_CONST ("METHOD" );
2727
+ else if (Matches3 ("DROP" ,"COMPRESSION" ,"METHOD" ))
2728
+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
2729
+
2698
2730
/* EXECUTE */
2699
2731
else if (Matches1 ("EXECUTE" ))
2700
2732
COMPLETE_WITH_QUERY (Query_for_list_of_prepared_statements );
@@ -3325,6 +3357,8 @@ psql_completion(const char *text, int start, int end)
3325
3357
COMPLETE_WITH_QUERY (Query_for_list_of_access_methods );
3326
3358
else if (TailMatchesCS1 ("\\db*" ))
3327
3359
COMPLETE_WITH_QUERY (Query_for_list_of_tablespaces );
3360
+ else if (TailMatchesCS1 ("\\dCM*" ))
3361
+ COMPLETE_WITH_QUERY (Query_for_list_of_compression_methods );
3328
3362
else if (TailMatchesCS1 ("\\dD*" ))
3329
3363
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_domains ,NULL );
3330
3364
else if (TailMatchesCS1 ("\\des*" ))