引文
- Query_block(查询块)
查询块也称为查询范式
即一个由 SELECT 关键词开头,紧跟表列表,可选由 WHERE 子句、GROUP BY 子句等组成的一个基本查询块 - Query_expression(查询表达式)
一个查询表达式可能由一个或者多个查询块组成
多于一个查询块表示查询表达式中包含一个或者多个 UNION、INTERSET 或者 EXCEPT 操作
如果有子查询,那么也可能含有多个查询块 - LEX
LEX 是一条 SQL 语句相关的解析语法树结构对象
即 MySQL 使用 LEX 对象来保存解析语法树
Query_block(查询块)
一个查询块对应着一条基本的 SELECT 语句的语法结构
- master
指向查询块的上层表达式(外部查询表达式) - slave
执行属于该查询块的第一个查询表达式(子查询) - neighbors
link_next、link_prev 分别指向同层同级别的邻居查询块,查询块列表
class Query_block : public Query_term {
/**
Intrusive linked list of all query blocks within the same
query expression.
*/
Query_block *next{
nullptr};
/// The query expression containing this query block.
Query_expression *master{
nullptr};
/// The first query expression contained within this query block.
Query_expression *slave{
nullptr};
/// Intrusive double-linked global list of query blocks.
Query_block *link_next{
nullptr};
Query_block **link_prev{
nullptr};
Query_expression *master_query_expression() const {
return master; }
Query_expression *first_inner_query_expression() const {
return slave; }
Query_block *outer_query_block() const {
return master->outer_query_block(); }
Query_block *next_query_block() const {
return next; }
Query_block *next_select_in_list() const {