Code questions

Started by Christopher Kings-Lynneover 23 years ago2 messages
#1Christopher Kings-Lynne
chriskl@familyhealth.com.au

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

#2Gavin Sherry
swm@linuxworld.com.au
In reply to: Christopher Kings-Lynne (#1)
Re: 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