Sharding-JDBC源码解析(一)整体流程-CSDN博客
Sharding-JDBC源码解析(二)SQL解析-CSDN博客
Sharding-JDBC源码解析(三)SQL路由-CSDN博客
Sharding-JDBC源码解析(四)SQL改写-CSDN博客
Sharding-JDBC源码解析(五)SQL执行-CSDN博客
Sharding-JDBC源码解析(六)结果归并-CSDN博客
目录
一、概述
SQL解析的流程直接引用官网的描述,不再额外进行深入解析。
解析过程分为词法解析和语法解析。 词法解析器用于将 SQL 拆解为不可再分的原子符号,称为 Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。 再使用语法解析器将词法解析器的输出转换为抽象语法树。
二、详细流程
例如,以下 SQL,会被解析成如下的语法树。
SELECT id, name FROM t_user WHERE status = 'ACTIVE' AND age > 18
代码位于ShardingSpherePreparedStatement#ShardingSpherePreparedStatement
private ShardingSpherePreparedStatement(...) {
// 在这个构造函数中会去对sql进行解析,以及获取一些元数据配置
// ...略
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()), metaDataContexts.getProps());
sqlStatement = sqlParserEngine.parse(sql, true);
}