博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL 的 target_list分析(七)
阅读量:6814 次
发布时间:2019-06-26

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

修改gram.y 的select 部分,看能否找出 target_list中的 各个字段名称:

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;                    ListCell * curr=n->targetList->head;                     while ( curr != NULL)                    {                       //To display the current ResTarget Node                       if (curr->data.ptr_value==NULL)                          fprintf(stderr,"NULL of ptr_value\n");                       else                          fprintf(stderr,"Not NULL of ptr_value\n");                       ResTarget * restar=(ResTarget *)(curr->data.ptr_value);                       Node * nod=(Node *)(restar->val);                        ColumnRef * colref=(ColumnRef *)nod;                       if (colref ==NULL)                         fprintf(stderr,"NULL of ColumnRef\n");                       else                         fprintf(stderr,"Not NULL of ColumnRef\n");                      Value * vval=(Value *)(colref->fields->head->data.ptr_value);                      if (vval == NULL)                         fprintf(stderr,"NULl of vval\n");                      else                         fprintf(stderr,"Not Null of vval\n");                       fprintf(stderr,"colum is: %s\n",vval->val.str);                      curr=curr->next;                   }                }            | 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);                }        ;

执行sql文的时候,后台能够正确给出 各个字段的名称。

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

你可能感兴趣的文章
意大利石油和天然气服务公司Saipem称遭到了来自印度的网络***
查看>>
zabbix 自定义端口监控 。
查看>>
软件定时器算法
查看>>
day1 01
查看>>
[MACOS] Mac上的抓包工具Charles
查看>>
电话机器人原来真的运用了人工智能的核心技术
查看>>
实现图片的轮播效果
查看>>
pt-archiver 数据删除、迁移工具使用
查看>>
下载网站地址
查看>>
桌面虚拟化浅谈
查看>>
我的友情链接
查看>>
将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程...
查看>>
Hyper-V 自动化支持技术
查看>>
VS2010启动调试时报“未能将脚本调试器附加到计算机”
查看>>
Python中的一些面试题(2)
查看>>
无法启动 DTC 分布式事务服务,MS DTC 发生服务特定错误: 3221229584
查看>>
基于HTTP协议的轻量级开源简单队列服务:HTTPSQS
查看>>
【精品教程】Android高手进阶教程pdf分享
查看>>
我的友情链接
查看>>
cocos2dx-3.0rc0安装和创建新工程
查看>>