ClickHouse 的 Parser与Interpreter

Parser和Interpreter是非常重要的两组接口:

  • Parser分析器负责创建AST对象;
  • Interpreter解释器则负责解释AST,并进一步创建查询的执行管道。

它们与IStorage一起,串联起了整个数据查询的过程。

Parser分析器可以将一条SQL语句以递归下降的方法解析成AST语法树的形式。

不同的SQL语句,会经由不同的Parser实现类解析。例如,有负责解析DDL查询语句的ParserRenameQuery、ParserDropQuery和ParserAlterQuery解析器,也有负责解析INSERT语句的ParserInsertQuery解析器,还有负责SELECT语句的ParserSelectQuery等。

Interpreter解释器的作用就像Service服务层一样,起到串联整个查询过程的作用,它会根据解释器的类型,聚合它所需要的资源。首先它会解析AST对象;然后执行“业务逻辑”(例如分支判断、设置参数、调用接口等);最终返回IBlock对象,以线程的形式建立起一个查询执行管道。

Interpreter模式也类似于Composite模式。Composite模式通常会为单个对象和群组对象定义一个公共接口。不过,Composite模式并不要求支持以不同方式组织的结构,尽管该模式可以支持这些结构。例如,介绍Composite模式时曾描述过ProcessComponent类层次结构,该结构允许生产流程顺序进行,也允许生产流程交替进行。Interpreter模式通常都会涉及不同类型的组合结构(Interpreter模式通常处于Composite模式结构之上)。一个类组成其他组件的方式定义了解释器类实现或解释一个操作的方式。

Interpreter模式的主要意图是可以按照自己定义的组合规则集合来组合可执行对象。

你可能感兴趣的:(java,数据库,设计模式,mysql,python)