Apache Calcite原理解析(3)--解析层

1、Calcite的解析过程

1.1、解析过程

用户的操作请求经过服务层的接收和封装被传递给calcite-core模块,对SQL的处理第一层是解析层。在这个过程中,初始的SQL字符串会被转化为Calcite内部的语法解析节点,为进一步的语法校验和优化做准备。

语法解析过程主要可以分为3个阶段:
1、首先字符串处理器会将源语句中的字符串转换成字符流;
2、然后词法分析器会对字符流中的一些词法进行匹配,形成词组(Token)流;
3、最后由语法分析器将这些词组流进行语义逻辑的理解,转变为最终的抽象语法树
在这里插入图片描述
然后在解析的过程中,还会注册两个监听器,一个是负责检查语法是否存在错误的异常监听器;另外一个是负责维护词法和语法匹配逻辑的表格管理器

1.2、Calcite中的解析体系

语法解析的最终结果是从SQL字符串得到一个抽象语法树,在Calcite中使用SQLNode负责封装抽象语法树中各个节点的语义信息。

在Calcite中SqlNode的实现类有40多个,每个类都代表一个节点到源码结构的映射,其大致可以分为3类,即SqlLiteralSqlIdentifierSqlCall
在这里插入图片描述

SqlLiteral 主要是封装输入的常量,也称为字面量;
SqlIdentifier 主要是封装输入的标识符,比如表名称,字段名称;
SqlCall 主要是SQL中的每个操作,比如Select对应SqlSelect,插入对应SqlInsert。

比如select idfrom t where id > 1 解析后的SQLNode树为:
在这里插入图片描述

2、JavaCC实现解析逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值