1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

Suggest to the user the column they may have meant to reference.

Error messages informing the user that no such column exists can
sometimes provoke a perplexed response.  This often happens due to
a subtle typo in the column name or, perhaps less likely, in the
alias name.  To speed discovery of what the real issue is in such
cases, we'll now search the range table for approximate matches.
If there are one or two such matches that are good enough to think
that they might be what the user intended to type, and better than
all other approximate matches, we'll issue a hint suggesting that
the user might have intended to reference those columns.

Peter Geoghegan and Robert Haas
This commit is contained in:
Robert Haas
2015-03-11 10:44:04 -04:00
parent bbfd7edae5
commit e529cd4ffa
8 changed files with 334 additions and 38 deletions

View File

@ -556,7 +556,8 @@ transformColumnRef(ParseState *pstate, ColumnRef *cref)
colname = strVal(field2);
/* Try to identify as a column of the RTE */
node = scanRTEForColumn(pstate, rte, colname, cref->location);
node = scanRTEForColumn(pstate, rte, colname, cref->location,
0, NULL);
if (node == NULL)
{
/* Try it as a function call on the whole row */
@ -601,7 +602,8 @@ transformColumnRef(ParseState *pstate, ColumnRef *cref)
colname = strVal(field3);
/* Try to identify as a column of the RTE */
node = scanRTEForColumn(pstate, rte, colname, cref->location);
node = scanRTEForColumn(pstate, rte, colname, cref->location,
0, NULL);
if (node == NULL)
{
/* Try it as a function call on the whole row */
@ -659,7 +661,8 @@ transformColumnRef(ParseState *pstate, ColumnRef *cref)
colname = strVal(field4);
/* Try to identify as a column of the RTE */
node = scanRTEForColumn(pstate, rte, colname, cref->location);
node = scanRTEForColumn(pstate, rte, colname, cref->location,
0, NULL);
if (node == NULL)
{
/* Try it as a function call on the whole row */