Makefile 打包文件,目录索引
SearchProject
ctrl+函数 查看想要祥读的源码
语法解析器
定义在parsenodes.h中的SelectStmt数据结构中,根据SQL语句会生成一棵语法解析树(parse tree)。
详细的数据结构如下:
typedef struct SelectStmt
{
NodeTag type;
/*
* These fields are used only in "leaf" SelectStmts.
这些字段仅用于SelectStmts的叶子结点
*/
List *distinctClause; /* NULL, DISTINCT ON 表达式列 */
IntoClause *intoClause; /* SELECT INTO 的目标*/
List *targetList; /* 结果集目标列表 (ResTarget) */
List *fromClause; /* FROM 子句 */
Node *whereClause; /* WHERE 限定条件 */
List *groupClause; /* GROUP BY 子句 */
Node *havingClause; /* HAVING 条件表达式 */
List *windowClause; /* WINDOW window_name AS (...), ... */
/*
*在上面一个值列表的“叶子”结点中,上面字段全部是null,而这个字段会被设置。
*注意,这个子列表表达式元素都没有ResTarget的修饰的表达式类型。
*还要注意,无论值列表的内容是什么,列表元素都可能置为DEFAULT(表示一个SetToDefault节点)
*由分析阶段决定是否合法并拒绝
*/
List *valuesLists; /* 未转换的表达式列表 */
/*
* 这些字段同时被用于SelectStmts叶节点与SelectStmts上层节点中使用。
*/
List *sortClause; /* sort子句 ( SortBy's列表) */
Node *limitOffset; /* #需要跳过的元组数目 */
Node *limitCount; /* # 需要返回的元组数目 */
List *lockingClause; /* FOR UPDATE (Locking子句的列表) */
WithClause *withClause; /* WITH 子句*/
/*
* 这些字段仅用于SelectStmts上层
*/
SetOperation op; /* set操作类型*/
bool all; /* 是否指明ALL选项 */
struct SelectStmt *larg; /* 左child节点 */
struct SelectStmt *rarg; /* 右child节点 */
/* 最终这些字段都会与查询语句中条件相互对应*/
} SelectStmt;
语法解析树示例: