PostgreSQL 的 target_list分析(七)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介:
修改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://www.cnblogs.com/gaojian/archive/2012/09/11/2680395.html,如需转载请自行联系原作者
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
20天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
56 3
|
4月前
|
SQL 存储 关系型数据库
PostgreSQL窗口函数避坑指南:如何让复杂分析查询提速300%?
本文基于真实企业级案例,深入剖析PostgreSQL窗口函数的执行原理与性能陷阱,提供8大优化策略。通过定制索引、分区裁剪、内存调优及并行处理等手段,将分钟级查询压缩至秒级响应。结合CTE分阶段计算与物化视图技术,解决海量数据分析中的瓶颈问题。某金融客户实践表明,风险分析查询从47秒降至0.8秒,效率提升5800%。文章附带代码均在PostgreSQL 15中验证,助您高效优化SQL性能。
200 0
|
20天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
82 6
|
20天前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
75 1
|
2月前
|
存储 关系型数据库 MySQL
深入理解MySQL索引类型及其应用场景分析。
通过以上介绍可以看出各类MySQL指标各自拥有明显利弊与最佳实践情墁,在实际业务处理过程中选择正确型号极其重要以确保系统运作流畅而稳健。
127 12
|
3月前
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
124 10
|
3月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
6月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
177 12
|
5月前
|
缓存 JSON 关系型数据库
MySQL 查询优化分析 - 常用分析方法
本文介绍了MySQL查询优化分析的常用方法EXPLAIN、Optimizer Trace、Profiling和常用监控指标。
|
7月前
|
关系型数据库 MySQL OLAP
无缝集成 MySQL,解锁秒级 OLAP 分析性能极限,完成任务可领取三合一数据线!
通过 AnalyticDB MySQL 版、DMS、DTS 和 RDS MySQL 版协同工作,解决大规模业务数据统计难题,参与活动完成任务即可领取三合一数据线(限量200个),还有机会抽取蓝牙音箱大奖!

推荐镜像

更多