Hi community
When I read the Internals document (41.1. The Query Tree),
the introduction of  the 'the result relation' confuse me.


In the document, it says


> This is an index into the range table that identifies the relation where 
the results of the query go.


And I cheak the corresponding code:



In parsenodes.h (A part)



typedef struct ResTarget
{
    NodeTag        type;
    char       *name;    
        /* column name or NULL */
    List       
*indirection;    /* subscripts, field names, and '*', or NIL */
    Node       *val;    
        /* the value expression to compute or 
assign */
    int            
location;        /* token location, or -1 if 
unknown */
} ResTarget;


In gram.y (A part)


insert_column_item:
            ColId opt_indirection
                {
                
    $$ = makeNode(ResTarget);


My question is:


I really don't the the use of ResTarget, in my original understand, I guess the 
use of ResTarget is to store the columns of the result, like:


SELECT row_1, row_2 FROM table;


After the parse, the ResTarget will store the row_1, row_2 in the ResTarget.



But the turth is, it also be used in the another clause, like INSERT, far from 
what I imagined.
So what's the use of ResTarget?



Can someone give me some advice?
Thanks in advance!


Yours,
Wen Yi

Reply via email to