diff options
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/parse_clause.c | 15 | ||||
-rw-r--r-- | src/backend/parser/parse_relation.c | 19 |
2 files changed, 17 insertions, 17 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index e2baa9d852e..249255b65f5 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -1445,21 +1445,6 @@ transformFromClauseItem(ParseState *pstate, Node *n, res_nscolumns + res_colindex); /* - * Check alias (AS clause), if any. - */ - if (j->alias) - { - if (j->alias->colnames != NIL) - { - if (list_length(j->alias->colnames) > list_length(res_colnames)) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("column alias list for \"%s\" has too many entries", - j->alias->aliasname))); - } - } - - /* * Now build an RTE and nsitem for the result of the join. * res_nscolumns isn't totally done yet, but that's OK because * addRangeTableEntryForJoin doesn't examine it, only store a pointer. diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 00469763e88..926dcbf30e2 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -1989,11 +1989,13 @@ addRangeTableEntryForTableFunc(ParseState *pstate, bool inFromCl) { RangeTblEntry *rte = makeNode(RangeTblEntry); - char *refname = alias ? alias->aliasname : - pstrdup(tf->functype == TFT_XMLTABLE ? "xmltable" : "json_table"); + char *refname; Alias *eref; int numaliases; + refname = alias ? alias->aliasname : + pstrdup(tf->functype == TFT_XMLTABLE ? "xmltable" : "json_table"); + Assert(pstate != NULL); rte->rtekind = RTE_TABLEFUNC; @@ -2013,6 +2015,13 @@ addRangeTableEntryForTableFunc(ParseState *pstate, eref->colnames = list_concat(eref->colnames, list_copy_tail(tf->colnames, numaliases)); + if (numaliases > list_length(tf->colnames)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("%s function has %d columns available but %d columns specified", + tf->functype == TFT_XMLTABLE ? "XMLTABLE" : "JSON_TABLE", + list_length(tf->colnames), numaliases))); + rte->eref = eref; /* @@ -2192,6 +2201,12 @@ addRangeTableEntryForJoin(ParseState *pstate, eref->colnames = list_concat(eref->colnames, list_copy_tail(colnames, numaliases)); + if (numaliases > list_length(colnames)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("join expression \"%s\" has %d columns available but %d columns specified", + eref->aliasname, list_length(colnames), numaliases))); + rte->eref = eref; /* |