对于 gram.y 中, target_list 进一步理解:
其中有如下一段:
| a_expr IDENT { $$ = makeNode(ResTarget); $$->name = $2; $$->indirection = NIL; $$->val = (Node *)$1; $$->location = @1; }
把它改动一下:
| a_expr IDENT { $$ = makeNode(ResTarget); $$->name = $2; $$->indirection = NIL; $$->val = (Node *)$1; $$->location = @1; fprintf(stderr,"In a_expr IDENT\n"); }
然后,在psql 中执行如下的语句:
select id myid from a6;
在后台,就会看到:In a_expr IDENT
也就是说 select col alias from table 这样的,都会被当作 a_expr IDENT 来处理。
换句话说,alias 在语法分析中,被认定为 identifier。