sharding-jdbc解析sql流程
2022-05-09 15:30:06 17 举报
sharding-jdbc解析sql流程
作者其他创作
大纲/内容
SQLParserEngine.parse解析得到SQLAST抽象语法树
fillerEngine.fill填充SQLStatement
SQLStatementRule中包含SQLSegmentExtractor
SQLSegmentExtractor.extract提取器提取SQLSegment返回
具体流程如下
每个entity里面都仅有一个集合的属性,集合中是解析xml得到的规则
返回SQLStatement
调用ANTLR4获取sql解析树ParseTree
ExtractorRuleDefinitionEntityLoader(xml提取规则加载器)extractor-rule-definition.xml
SQLParserEngine(解析引擎,用于利用ANTLR4框架解析sql得到SQLAST抽象语法树)SQLSegmentsExtractorEngine(提取引擎,用于从抽象语法树中提起took也就是SQLSegment)SQLStatementFillerEngine(填充引擎,用于将解析出来的东西填充到SQLStatement对象中)
初始化SQLParseKernel
根据sql类型(sql类型由sql-statemnet-rule-definition.xml中决定)获取提取规则列表
初始化ParseRuleRegistry(解析/填充引擎的属性)1、加载各种数据库的SQLParseEntry到缓存2、从xml中加载提取规则、填充规则缓存 key为数据库类型extractor-rule-definition.xmlfiller-rule-definition.xml
FillerRuleDefinitionEntity
SQLStatementFillerEngine填充引擎填充,返回SQLStatement
extractorEngine.extractsqlSegment提取
new SQLAST(抽象语法树)构造SQLAST返回
parseRuleRegistry.getSQLStatementRule根据数据库类型,xx获取sql解析规则
返回SQLSegment列表
FillerRuleDefinitionEntityLoader(xml填充规则加载器)filler-rule-definition.xml
SQLStatementRuleDefinitionEntity
SQLParserEngine解析得到SQLAST抽象语法树
SQLStatementRuleDefinitionEntityLoader(xml解析规则加载器)sql-statement-rule-definition.xml
ParseRuleRegistry
1、将所有提取出来的sqlSegment放到SQLStatement中2、遍历所有提取出来的sqlSegment,根据filler-rule-definition.xml定义的填充器,将每个SqlSegment填充到SQLStatement中
SQLSegmentsExtractorEngine从SQLAST中提取token,封装成segment,比如tableSegement
SQLParseKernel.parse(sql解析核心)
内部属性
根据sql类型(sql类型由sql-statemnet-rule-definition.xml中决定)获取SQLStatement的class,反射创建SQLStatement对象
SQLParserFactory.newInstance根据数据库类型,原sql创建SQLParser
每个definiton里面都仅有一个map,map中存了xml每一个解析规则
spi机制线获取mysql/oracle的sqlParserEntry,然后再根据原sql创建SQLParser
ExtractorRuleDefinitionEntity
SQLParseEngine.parse(sql解析引擎)
0 条评论
下一页