Re: ExecEvalVar does not have appropriate ExprState?
От | Heikki Linnakangas |
---|---|
Тема | Re: ExecEvalVar does not have appropriate ExprState? |
Дата | |
Msg-id | 4D903A2D.7040802@enterprisedb.com обсуждение исходный текст |
Ответ на | ExecEvalVar does not have appropriate ExprState? (Vaibhav Kaushal <vaibhavkaushal123@gmail.com>) |
Ответы |
Re: ExecEvalVar does not have appropriate ExprState?
|
Список | pgsql-hackers |
On 28.03.2011 10:02, Vaibhav Kaushal wrote: > Hi, > > I see the ExecInitExpr says something like this: > ------------ > case T_Var: > state = (ExprState *) makeNode(ExprState); > state->evalfunc = ExecEvalVar; > --------------- > > > But the ExecEvalVar function definition says: > > ------------------------ > Var *variable = (Var *) exprstate->expr; > TupleTableSlot *slot; > AttrNumber attnum; > > if (isDone) > *isDone = ExprSingleResult; > > /* Get the input slot and attribute number we want */ > switch (variable->varno) > { > case INNER: /* get the tuple from the inner node */ > ------------------------- > > > Since ExprState -> expr in its final form would finally contain only: > > NodeTag type; > > I think that the pointer being cast in the ExecEvalVar is actually > already a form of Var which is passed around as Expr for sake of > function call. Right, exprstate->expr is a Var in ExecEvalVar. > So, was the node in the Expr tree for the corresponding ExprState node > of the ExprState tree actually a 'Var'? Yes. > Also, I have tried, but failed to fidn the exact place where the Expr > tree is created. Just pointing me to the file / function which does this > would be of great help. A raw expression tree is created in the grammar, src/backend/parser/gram.y. It is then transformed in parse analysis phase to the form the planner accepts, in transformExpr(). The planner can do some further transformations, like replacing immutable function calls with Consts. -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: