Hi All,

Whereabouts in the code is the '*' expanded into the list of valid columns and also where are the columns specified in the select arguments (or whereever) checked for validity?

Chris








Hi All,
 
Whereabouts in the code is the '*' expanded into 
the list of valid columns and also where are the columns specified in the select 
arguments (or whereever) checked for validity?
 
Chris
Sun, 23 Jun 2002 16:27:04 +0800
"Christopher Kings-Lynne" <chriskl@familyhealth.com.au>
Code questions
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


Sun, 23 Jun 2002 18:55:24 +1000 (EST)
Gavin Sherry <swm@linuxworld.com.au>
Re: Code questions