对于 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。
本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/09/05/2672093.html,如需转载请自行联系原作者