On Mon, Mar 21, 2011 at 5:47 PM, Heikki Linnakangas < heikki.linnakan...@enterprisedb.com> wrote:
> > Yes. There's actually two "trees" involved. The planner produces a tree of > Expr nodes, and ExecInitExpr prepares a tree of ExprState nodes that mirrors > the first tree. The ExprStates contain run-time state needed to execute the > Expr tree. > > > Yes I am seeing that in the code. > 5. The most common nodes in the expression trees are the ExecEvalVar, >> ExecEvalConst and ExecEvalParam. >> > > Well, that's obviously going to depend on the query. > > Indeed yes, it does, but still for most cases the ExecEvalVar or ExecEvalScalarVar is seen a lot of times (I am trying only simple queries which take most data from disk) which is why i said that. Anyways you are right there. > > I might be wrong somewhere (especially most people would be able to say >> a lot about the 5th point). But if the above were to be correct then how >> and why are the ExecMakeFunctionResultNoSets, ExecEvalRelabelType, >> ExecEvalFuncArgs and the likes are used? >> > > ExecMakeFunctionResultNoSets is used to evaluate function calls. The first > function call invocation always uses ExecMakeFunctionResult, but if > ExecMakeFunctionResult sees on that first invocation that it was not a > set-returning-function, it changes the evaluator function for subsequent > invocations to ExecMakeFunctionResultNoSets. ExecMakeFunctionResultNoSets > does the same thing as ExecMakeFunctionResult, but skips the checks for > set-returning functions, making the evaluation a bit faster. > > ExecEvalFuncArgs is used by ExecMakeFunctionResult to evaluate the function > arguments. > > ExecEvalRelabelType is used to evaluate RelabelType nodes. RelabelType > doesn't really do anything, it's just a placeholder when a type is cast to > another, and the source and target types are binary compatible. > > did not know the last fact. > > I wanted to see how the expression tree gets into form before it gets >> into the ExecQual for parse by ExecEvalExpr function. Is there a way to >> see the Expression Tree so that I get a better idea about what is >> happening? >> > > set debug_print_plan=on > > I am already using the postgresql server with -d 4 option and it shows a lot of things. But I am not able to see the Expression State trees. OK. I know that the output DOES show the 'expr' entries. But if those are what make the Expression _tree_ then I am not able to understand them. A little help on that would be generous. > -- > Heikki Linnakangas > EnterpriseDB http://www.enterprisedb.com > Regards, Vaibhav