On Sun, 23 Jun 2002, Christopher Kings-Lynne wrote:
> Hi All,
>
> Whereabouts in the code is the '*' expanded into the list of valid columns
See the rule 'target_el' in gram.y. The SelectStmt node is processed
further down the parser in analyze.c: see transformStmt(),
transformSelectStmt() and transformTargetList().
> and also where are the columns specified in the select arguments (or
> whereever) checked for validity?
This is pretty easy to discover by working backward from the
elog(ERROR) produced when you select a non-existent attribute from a
relation:
ERROR: Attribute 'nonexistent' not found
This is generated by transformIdent(), called from transformExpr, called
from transformTargetEntry. The latter is called by transformTargetList()
when it the attribute is not of the form '*' or 'relation.*' or when we
don't know if the attribute is actually an attribute.
> Chris
Gavin