Thread: Expression Evaluator used for creating the plan tree / stmt ?

Expression Evaluator used for creating the plan tree / stmt ?

From
Vaibhav Kaushal
Date:
Hi,

Query:
=====
I am aware of the fact that Expression evaluator is used to filter tuples based on the qual. However, I think it is not the only purpose it serves. As I manipulated the ExecEvalVar in the executor, the queries started behaving abnormally (the comparison operators < , <>, > lost effect and at times started working ). Is the creation of qual also done (in part?) by the expression evaluator? If yes, what part of query creation process is handled by the evaluator? I know ExecInitExpr does expr -> exprstate tree creation, but it is not the evaluator.

If the above is confusing, I just want to ask: "Is expression evaluator, even in part responsible for {PLANNEDSTMT creation?"
--------------------------------------------------------


My work / trial so far:
===============
I see that the target list to be scanned is handled by "ExecTargetList" function. 

I am not so sure about this because this function is not listed in the list of functions which GDB shows me (./configure --enable-debug && make clean && make && make install). Rest everything else (almost / perhaps) is shown! (Can anyone tell why? :( )

Whatever be the case, I think the target list creation will somehow call ExecEvalVar because:

1. It is this function whose modification gets me the erroneous behavior.
2. Server, when run in debug 4 / 5 mode shows target entries as VARs.
3. VARs are range table representation in some form and ExecEvalVar makes sense to create the target entry.
---------------------------------------------------


What changes caused this:
===================

I inserted this line into ExecEvalVar as well as ExecEvalScalarVar:

return cute_datum_array[attnum];

before:

return slot_getattr(slot, attnum, isNull);

It was just an experiment to see how things are getting done. I know most devs here would suggest GDB but I am already using that and I did this to check possible effects than trace. 

-----------------------------------------------------

I seriously think the target list would involve VARs whose one-time evaluation is done. Since cute_datum_array was a garbage array (intentional), it would crash! Am I right?

Regards,
Vaibhav


Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Pavan Deolasee
Date:


On Wed, May 25, 2011 at 3:22 PM, Vaibhav Kaushal <vaibhavkaushal123@gmail.com> wrote:
I see that the target list to be scanned is handled by "ExecTargetList" function. 

I am not so sure about this because this function is not listed in the list of functions which GDB shows me (./configure --enable-debug && make clean && make && make install). Rest everything else (almost / perhaps) is shown! (Can anyone tell why? :( )


You would need to turn optimization off by passing "-O0" flag to the compiler. Otherwise static functions may get optimized and you may not see them in gdb stack.

CFLAGS="-O0" ./configure --enable-debug

Thanks,
Pavan

--
Pavan Deolasee
EnterpriseDB     http://www.enterprisedb.com

Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Alvaro Herrera
Date:
Excerpts from Vaibhav Kaushal's message of mié may 25 05:52:32 -0400 2011:

> If the above is confusing, I just want to ask: "Is expression evaluator,
> even in part responsible for {PLANNEDSTMT creation?"

Yeah, as far as I understood Tom's talk, the expr evaluator is used to
reduce some expressions to constants and such.

-- 
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Tom Lane
Date:
Alvaro Herrera <alvherre@commandprompt.com> writes:
> Excerpts from Vaibhav Kaushal's message of mié may 25 05:52:32 -0400 2011:
>> If the above is confusing, I just want to ask: "Is expression evaluator,
>> even in part responsible for {PLANNEDSTMT creation?"

> Yeah, as far as I understood Tom's talk, the expr evaluator is used to
> reduce some expressions to constants and such.

The planner would never call it with an expression containing a Var,
though.
        regards, tom lane


Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Vaibhav Kaushal
Date:
<p>@pavan - thanks a lot. Will try it when i go to desktop the next time.<p>--<br /> Sent from my Android<div
class="gmail_quote">On25 May 2011 15:33, "Pavan Deolasee" <<a
href="mailto:pavan.deolasee@gmail.com">pavan.deolasee@gmail.com</a>>wrote:<br type="attribution" />> On Wed, May
25,2011 at 3:22 PM, Vaibhav Kaushal <<br /> > <a
href="mailto:vaibhavkaushal123@gmail.com">vaibhavkaushal123@gmail.com</a>>wrote:<br />> <br />>> I see that
thetarget list to be scanned is handled by "ExecTargetList"<br />>> function.<br /> >><br />>> I am
notso sure about this because this function is not listed in the list<br />>> of functions which GDB shows me
(./configure--enable-debug && make clean &&<br />>> make && make install). Rest
everythingelse (almost / perhaps) is shown!<br /> >> (Can anyone tell why? :( )<br />>><br />>><br
/>>You would need to turn optimization off by passing "-O0" flag to the<br />> compiler. Otherwise static
functionsmay get optimized and you may not see<br /> > them in gdb stack.<br />> <br />> CFLAGS="-O0"
./configure--enable-debug<br />> <br />> Thanks,<br />> Pavan<br />> <br />> -- <br />> Pavan
Deolasee<br/>> EnterpriseDB <a href="http://www.enterprisedb.com">http://www.enterprisedb.com</a><br /></div> 

Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Vaibhav Kaushal
Date:
<p>But somehow the execevalvar is being called. When i changed the logic of its working to use slot_getattr instead of
cute_datum_arrayfor the first run / call, everything just worked! <p>This would indicate surely that the function does
getcalled at least once before being called by executor for qual check. This is what got me confused - where does the
functionget called? Gdb trace says its first call comes through ExecutePlan but results say something else. Moreover,
gdbstill confuses me. Is there some gui to gdb? :( <p>The only thing i am trying to make sure that ExecEvalVar gets the
valuesfrom cute_datum_array only when called durin a scan, no way before it. May be there could be another way. I think
ihave to rethink about this.<br /> --<br /> Sent from my Android<div class="gmail_quote">On 25 May 2011 20:34, "Tom
Lane"<<a href="mailto:tgl@sss.pgh.pa.us">tgl@sss.pgh.pa.us</a>> wrote:<br type="attribution" />> Alvaro
Herrera<<a href="mailto:alvherre@commandprompt.com">alvherre@commandprompt.com</a>> writes:<br /> >>
Excerptsfrom Vaibhav Kaushal's message of mié may 25 05:52:32 -0400 2011:<br />>>> If the above is confusing,
Ijust want to ask: "Is expression evaluator,<br />>>> even in part responsible for {PLANNEDSTMT creation?"<br
/>> <br />>> Yeah, as far as I understood Tom's talk, the expr evaluator is used to<br />>> reduce some
expressionsto constants and such.<br />> <br />> The planner would never call it with an expression containing a
Var,<br/> > though.<br />> <br />> regards, tom lane<br /></div> 

Re: Expression Evaluator used for creating the plan tree / stmt ?

From
Robert Haas
Date:
On Wed, May 25, 2011 at 12:34 PM, Vaibhav Kaushal
<vaibhavkaushal123@gmail.com> wrote:
> But somehow the execevalvar is being called. When i changed the logic of its
> working to use slot_getattr instead of cute_datum_array for the first run /
> call, everything just worked!

This is what gdb is for... set a breakpoint on that function using "b
ExexEvalVar", and when it hits the breakpoint, use "bt" to see where
the call came from.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company