@@ -3430,28 +3430,48 @@ psql_completion(const char *text, int start, int end)
3430
3430
COMPLETE_WITH ("DATA" );
3431
3431
3432
3432
/* REINDEX */
3433
- else if (Matches ("REINDEX" ))
3433
+ else if (Matches ("REINDEX" )||
3434
+ Matches ("REINDEX" ,"(*)" ))
3434
3435
COMPLETE_WITH ("TABLE" ,"INDEX" ,"SYSTEM" ,"SCHEMA" ,"DATABASE" );
3435
- else if (Matches ("REINDEX" ,"TABLE" ))
3436
+ else if (Matches ("REINDEX" ,"TABLE" )||
3437
+ Matches ("REINDEX" ,"(*)" ,"TABLE" ))
3436
3438
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_indexables ,
3437
3439
" UNION SELECT 'CONCURRENTLY'" );
3438
- else if (Matches ("REINDEX" ,"INDEX" ))
3440
+ else if (Matches ("REINDEX" ,"INDEX" )||
3441
+ Matches ("REINDEX" ,"(*)" ,"INDEX" ))
3439
3442
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_indexes ,
3440
3443
" UNION SELECT 'CONCURRENTLY'" );
3441
- else if (Matches ("REINDEX" ,"SCHEMA" ))
3444
+ else if (Matches ("REINDEX" ,"SCHEMA" )||
3445
+ Matches ("REINDEX" ,"(*)" ,"SCHEMA" ))
3442
3446
COMPLETE_WITH_QUERY (Query_for_list_of_schemas
3443
3447
" UNION SELECT 'CONCURRENTLY'" );
3444
- else if (Matches ("REINDEX" ,"SYSTEM|DATABASE" ))
3448
+ else if (Matches ("REINDEX" ,"SYSTEM|DATABASE" )||
3449
+ Matches ("REINDEX" ,"(*)" ,"SYSTEM|DATABASE" ))
3445
3450
COMPLETE_WITH_QUERY (Query_for_list_of_databases
3446
3451
" UNION SELECT 'CONCURRENTLY'" );
3447
- else if (Matches ("REINDEX" ,"TABLE" ,"CONCURRENTLY" ))
3452
+ else if (Matches ("REINDEX" ,"TABLE" ,"CONCURRENTLY" )||
3453
+ Matches ("REINDEX" ,"(*)" ,"TABLE" ,"CONCURRENTLY" ))
3448
3454
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_indexables ,NULL );
3449
- else if (Matches ("REINDEX" ,"INDEX" ,"CONCURRENTLY" ))
3455
+ else if (Matches ("REINDEX" ,"INDEX" ,"CONCURRENTLY" )||
3456
+ Matches ("REINDEX" ,"(*)" ,"INDEX" ,"CONCURRENTLY" ))
3450
3457
COMPLETE_WITH_SCHEMA_QUERY (Query_for_list_of_indexes ,NULL );
3451
- else if (Matches ("REINDEX" ,"SCHEMA" ,"CONCURRENTLY" ))
3458
+ else if (Matches ("REINDEX" ,"SCHEMA" ,"CONCURRENTLY" )||
3459
+ Matches ("REINDEX" ,"(*)" ,"SCHEMA" ,"CONCURRENTLY" ))
3452
3460
COMPLETE_WITH_QUERY (Query_for_list_of_schemas );
3453
- else if (Matches ("REINDEX" ,"SYSTEM|DATABASE" ,"CONCURRENTLY" ))
3461
+ else if (Matches ("REINDEX" ,"SYSTEM|DATABASE" ,"CONCURRENTLY" )||
3462
+ Matches ("REINDEX" ,"(*)" ,"SYSTEM|DATABASE" ,"CONCURRENTLY" ))
3454
3463
COMPLETE_WITH_QUERY (Query_for_list_of_databases );
3464
+ else if (HeadMatches ("REINDEX" ,"(*" )&&
3465
+ !HeadMatches ("REINDEX" ,"(*)" ))
3466
+ {
3467
+ /*
3468
+ * This fires if we're in an unfinished parenthesized option list.
3469
+ * get_previous_words treats a completed parenthesized option list as
3470
+ * one word, so the above test is correct.
3471
+ */
3472
+ if (ends_with (prev_wd ,'(' )|| ends_with (prev_wd ,',' ))
3473
+ COMPLETE_WITH ("VERBOSE" );
3474
+ }
3455
3475
3456
3476
/* SECURITY LABEL */
3457
3477
else if (Matches ("SECURITY" ))