PATCH: psql tab completion for SELECT

From: Edmund Horner <ejrh00(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: PATCH: psql tab completion for SELECT
Date: 2017-11-06 04:28:55
Message-ID: CAMyN-kB_xrU4iYdcF1j=tijgO1DSyjtb3j96O4UEj91XZrZcMg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi pgsql-hackers,

Here's a little draft patch to add *some* tab completion ability for
SELECT in psql. I have often missed the ability, especially with
invocations of utility functions.

It would be nice to be able to suggest column names from the relevant
tables in the query, but, as the SQL language puts the column list
before the FROM clause, we have to use columns from all tables; I'm
certainly not the first to be frustrated by this language feature, but
we can't do much about it.

What my patch does:

For a command line with the single word SELECT, column names and
function names will be used for completions of the next word.
Function names have a "(" suffix added, largely because it makes them
easier to distinguish in the completion list.

Only the first select-list item can be tab-completed; i.e. SELECT foo,
b<tab> won't find column bar.

Examples:

postgres=# select rel<tab>
relacl relchecks relhasindex
relhassubclass (etc.)

postgres=# select str<tab>
string_to_array( strip( strpos(

How it works:

The implementation uses a normal non-schema query, because columns
don't have schemas.

The eligible columns are normal, visible columns.

I have tried to filter out the various functions which aren't likely
to be directly used in queries.

The eligible functions are those which are:
- visible
- not aggregate or window functions
- not RI_FKey_* functions
- not support functions for types, aggregates, operators, languages,
casts, access methods.

Completions for FROM, WHERE, etc. still work, since the additional
completions are only used immediately after the single word SELECT.

Is this likely to be a useful addition to PostgreSQL?

If so, I'll try to get the patch to a good standard. I am not aiming
for complete support for the SELECT grammar, but just the low-hanging
fruit.

I'm not aware of existing tests for psql tab completion. But I ran
"make check" anyway, with no problems.

Some other questions about how it should be done:

- Are my criteria for the columns and function names appropriate?

- Should I try to use a SchemaQuery so that function schema names can be used?

- Should I try to support simple cases of multiple columns? (How?
We can use TailMatches1(",") but how do we tell we aren't into the
FROM-clause or later?)

- How do we make it work with older servers, e.g. those that predate
some of the newer columns used in the function criteria?

Cheers,
Edmund Horner

Attachment Content-Type Size
psql-select-tab-completion-v1.patch application/octet-stream 2.1 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Langote 2017-11-06 04:30:02 Re: [Sender Address Forgery]Re: path toward faster partition pruning
Previous Message Amit Kapila 2017-11-06 04:21:48 Re: Setting pd_lower in GIN metapage