Thread

Commits

  1. Fix bogus tab-completion rule for CREATE PUBLICATION.

  1. Redundant psql tab-completion for CREATE PUBLICATION

    Edmund Horner <ejrh00@gmail.com> — 2018-05-29T12:58:07Z

    Hi,
    
    While looking at Justin's patch for VACUUM completions, I found an
    existing bit of code that tries to match on a word with a space:
    
       /* Complete "CREATE PUBLICATION <name> FOR TABLE <table>" */
        else if (Matches4("CREATE", "PUBLICATION", MatchAny, "FOR TABLE"))
            COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
    
    I think the clause will never match the "FOR TABLE" word; and can, in
    any case, be removed, as the the final check for completable "things"
    (at the end of psql_completion) will see "TABLE" and act
    appropriately.
    
    Here's a little patch to remove these lines.
    
    Edmund
    
  2. Re: Redundant psql tab-completion for CREATE PUBLICATION

    Tom Lane <tgl@sss.pgh.pa.us> — 2018-09-21T20:01:19Z

    [ This seems to have slipped through the cracks, sorry about that ]
    
    Edmund Horner <ejrh00@gmail.com> writes:
    > While looking at Justin's patch for VACUUM completions, I found an
    > existing bit of code that tries to match on a word with a space:
    >    /* Complete "CREATE PUBLICATION <name> FOR TABLE <table>" */
    >     else if (Matches4("CREATE", "PUBLICATION", MatchAny, "FOR TABLE"))
    >         COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
    
    > I think the clause will never match the "FOR TABLE" word;
    
    Yeah, that's certainly right.
    
    > and can, in
    > any case, be removed, as the the final check for completable "things"
    > (at the end of psql_completion) will see "TABLE" and act
    > appropriately.
    
    But that only works for the table name immediately after TABLE, not
    for a list of table names.  I think we need to fix it like this,
    instead:
    
    -	/* Complete "CREATE PUBLICATION <name> FOR TABLE <table>" */
    -	else if (Matches4("CREATE", "PUBLICATION", MatchAny, "FOR TABLE"))
    +	/* Complete "CREATE PUBLICATION <name> FOR TABLE <table>, ..." */
    +	else if (HeadMatches5("CREATE", "PUBLICATION", MatchAny, "FOR", "TABLE"))
     		COMPLETE_WITH_SCHEMA_QUERY(Query_for_list_of_tables, NULL);
    
    Pushed like that.
    
    			regards, tom lane