sharding jdbc_sharding-jdbc系列之SQL解析(二)

前言

再讲SQL路由之前,先简要的将一个SQL解析,SQL解析是sharding-jdbc非常底层的东西,了解这个,

对于真正用这个中间件的作用相对来说稍微弱一点,但是也要了解一个大概。

ParsingSQLRouter

在SQL路由之前,都会调用该类的parse方法,进行SQL解析

public 

SQL解析步骤

SQLParsingEngine的parse方法如下,根据dbType , 和查询语句的Type,构建SQL解析器,并且进行解析

public 

第一步:

根据databaseType,选用不一样的词法解析器

// com.dangdang.ddframe.rdb.sharding.parsing.lexer.LexerEngineFactory

第二步:

调用词法解析器进行分词 , 主要就是将SQL进行分词。

第三步:

获取SQL解析器,并且进行SQL解析

public 

根据databaseType 选用不同的词法解析器,主要是因为各大厂商的SQL语法有些不同,所以需要根据databaseType来区分,

然后根据SQL语句的类型,调用不同的SQL解析器,将SQL解析。 关于SQL解析这一块我也没有去细看,sharding-jdbc1.5以后

将SQL解析引擎替换了druid , 对SQL采取半理解的模式。

总结:

SQL解析分为两步, 第一步为 词法解析, 词法解析的意思是就是将SQL进行拆分。

例:

select 

词法解析:

_user]

这么做的目的是什么? 是为了后面的SQL解析, 一个很直白的说法,通过词法解析,我们可以知道这个SQL语句是什么类型的SQL语句 ,到底是select,还是

insert , 都需要词法解析器去做。

SQL解析最后这一块我没有细看原理,不过我可以给大家截一张图

SQL语句

<select 

上面的SQL,通过SQL解析器最后解析的结果如下:

v2-8871fcf1d47299fba35821d1c96e57fe_b.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值