PostgreSQL——查询分析

2021SC@SDUSC

我负责的PostgreSQL代码部分:查询的编译与执行
此篇博客的分析内容:查询分析源码
原因:由查询处理的完整流程图可知:查询分析是处于核心地位的,统领查询重写和调度等相关内容,所以我按照一个清晰的框架,首先从查询分析入手。

查询分析

功能:由SQL查询语句生成查询树
源码路径:src/backend/parser
主要部分:词法分析,语法分析,语义分析
重要源码文件及调用关系:

kwlist.h:SQL关键字定义,注意:关键字名要小写,按照字符串值顺序定义
kwlookup.h:定义结构体ScanKeyword;
kwlookup.c:使用kwlist.h初始化关键字数组ScanKeywords,提供ScanKeywordLookup函数,该函数判断输入的字符串是否是关键字,若是则返回当前标识符指向关键字列表中对应单词的指针,采用二分法查找;
scanup.c:提供几个词法分析时常用的函数。scanstr函数处理转义字符,downcase_truncate_identifier函数将大写英文字符转换为小写字符,truncate_identifier函数截断超过最大标识符长度的标识符,scanner_isspace函数判断输入字符是否为空白字符。
scan.l:定义词法结构,编译生成scan.c;这里会忽略comment等无用信息。
gram.y:定义语法结构,编译生成gram.c;分析后生成语法分析树。
gram.h:定义关键字的数值编号。
辅助脚本:
check_keywords.pl:检查在gram.y 和 kwlist.h 中定义的关键字列表是否一致。

查询分析执行流程:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_47373497

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值