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;
語法解析樹示例: