PostgreSQL 的 语法分析的理解(四)

simple_select:                                        
            SELECT    opt_distinct    target_list                            
            into_clause     from_clause     where_clause 
            group_clause     having_clause    window_clause  
                {                        
                    SelectStmt *n = makeNode(SelectStmt);                    
                    n->distinctClause = $2;                    
                    n->targetList = $3;                    
                    n->intoClause = $4;                    
                    n->fromClause = $5;                    
                    n->whereClause = $6;                    
                    n->groupClause = $7;                    
                    n->havingClause = $8;                    
                    n->windowClause = $9;                    
                    $$ = (Node *)n;                    
                }                        
            | values_clause                            { $$ = $1; }
            | TABLE relation_expr                            
                {                        
                    /* same as SELECT * FROM relation_expr */                    
                    ColumnRef *cr = makeNode(ColumnRef);                    
                    ResTarget *rt = makeNode(ResTarget);                    
                    SelectStmt *n = makeNode(SelectStmt);                    
                                        
                    cr->fields = list_make1(makeNode(A_Star));                    
                    cr->location = -1;                    
                                        
                    rt->name = NULL;                    
                    rt->indirection = NIL;                    
                    rt->val = (Node *)cr;                    
                    rt->location = -1;                    
                                        
                    n->targetList = list_make1(rt);                    
                    n->fromClause = list_make1($2);                    
                    $$ = (Node *)n;                    
                }                        
            | select_clause UNION opt_all select_clause                            
                {                        
                    $$ = makeSetOp(SETOP_UNION, $3, $1, $4);                    
                }                        
            | select_clause INTERSECT opt_all select_clause                            
                {                        
                    $$ = makeSetOp(SETOP_INTERSECT, $3, $1, $4);                    
                }                        
            | select_clause EXCEPT opt_all select_clause                            
                {                        
                    $$ = makeSetOp(SETOP_EXCEPT, $3, $1, $4);                    
                }                        
        ;                                
                                        

从其中第一段中,

simple_select:                                        
            SELECT    opt_distinct    target_list                            
            into_clause     from_clause     where_clause 
            group_clause     having_clause    window_clause  
                {                        
                    SelectStmt *n = makeNode(SelectStmt);                    
                    n->distinctClause = $2;                    
                    n->targetList = $3;                    
                    n->intoClause = $4;                    
                    n->fromClause = $5;                    
                    n->whereClause = $6;                    
                    n->groupClause = $7;                    
                    n->havingClause = $8;                    
                    n->windowClause = $9;                    
                    $$ = (Node *)n;                    
                }                        
可以得知:
opt_distinct 就是 $2   target_list  就是 $3, 依次类推。



posted @ 2012-09-05 14:29  健哥的数据花园  阅读(436)  评论(0编辑  收藏  举报