博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 的 语法分析的理解(五)
阅读量:6424 次
发布时间:2019-06-23

本文共 3337 字,大约阅读时间需要 11 分钟。

接上文,从 simple_select 中的 target_list ,再看target_list部分的内容:

/*****************************************************************************                                     *                                     *    target list for SELECT                                 *                                     *****************************************************************************/                                                                        target_list:                                                target_el                { $$ = list_make1($1); }                    | target_list ',' target_el                { $$ = lappend($1, $3); }                ;                                                                target_el:    a_expr AS ColLabel                                                {                                        $$ = makeNode(ResTarget);                                    $$->name = $3;                                    $$->indirection = NIL;                                    $$->val = (Node *)$1;                                    $$->location = @1;                                }                                /*                                     * We support omitting AS only for column labels that aren't              * any known keyword.  There is an ambiguity against postfix              * operators: is "a ! b" an infix expression, or a postfix               * expression and a column label?  We prefer to resolve this              * as an infix expression, which we accomplish by assigning              * IDENT a precedence higher than POSTFIXOP.                                     */                                    | a_expr IDENT                                        {                                        $$ = makeNode(ResTarget);                                    $$->name = $2;                                    $$->indirection = NIL;                                    $$->val = (Node *)$1;                                    $$->location = @1;                                }                                | a_expr                                        {                                        $$ = makeNode(ResTarget);                                    $$->name = NULL;                                    $$->indirection = NIL;                                    $$->val = (Node *)$1;                                    $$->location = @1;                                }                                | '*'                                        {                                        ColumnRef *n = makeNode(ColumnRef);                                    n->fields = list_make1(makeNode(A_Star));                                    n->location = @1;                                                                        $$ = makeNode(ResTarget);                                    $$->name = NULL;                                    $$->indirection = NIL;                                    $$->val = (Node *)n;                                    $$->location = @1;                                }                            ;

从上面可以看出:

target_list 是一个递归表达式:

target_list:  target_el

                 | target_list  ','  target_el

而具体 target_el又分为以下几种:

         a_expr AS ColLabel

         a_expr  INDENT

         a_expr

         '*'

这个 target_list 就是指我们平时 select col1,col2,col3 ... from table 中的各个列的组合。

         

转载地址:http://uzyga.baihongyu.com/

你可能感兴趣的文章
REST API用得也痛苦
查看>>
test for windows live writer plugins
查看>>
Tiny210 U-BOOT(二)----配置时钟频率基本原理
查看>>
代理模式
查看>>
javaweb学习总结(二十四)——jsp传统标签开发
查看>>
让script的type属性等于text/html
查看>>
linux 文件系统sysvinit 流程分析
查看>>
体素科技:2018年,算法驱动下的医学影像分析进展
查看>>
Vue 折腾记 - (8) 写一个挺靠谱的多地区选择组件
查看>>
VS Code折腾记 - (3) 多图解VSCode基础功能
查看>>
『翻译』Node.js 调试
查看>>
我的iOS开发之路总结(更新啦~)
查看>>
Java NIO之拥抱Path和Files
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>
微信小程序教学第三章(含视频):小程序中级实战教程:列表篇-页面逻辑处理...
查看>>
页面间通信与数据共享解决方案简析
查看>>
Swift 中 Substrings 与 String
查看>>
作为一个开源软件的作者是一种什么样的感受?
查看>>
移动端适配知识你到底知多少
查看>>
TiDB 在 G7 的实践和未来
查看>>