Thread: Code questions
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
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