- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL.docx
由于每个数据库在遵守 SQL 语法规范的同时,又有各自独特的语法。因此,在 Sharding-JDBC 里每个数据库都有自己的 SELECT 语句的解析器实现方式,当然绝大部分逻辑是相同的。本文主要分享笔者最常用的 MySQL 查询。查询 SQL 解析主流程如下:// AbstractSelectParser.javapublicfinal SelectStatement parse(){ query(); parseOrderBy(); customizedSelect(); appendDerivedColumns(); appendDerivedOrderBy();return selectStatement;}#parseOrderBy()?:对于 MySQL 查询语句解析器无效果,因为已经在?#query()?方法里面已经调用?#parseOrderBy(),因此图中省略该方法。#customizedSelect()?:Oracle、SQLServer 查询语句解析器重写了该方法,对于 MySQL 查询解析器是个空方法,进行省略。有兴趣的同学可以单独去研究研究。Sharding-JDBC 正在收集使用公司名单:传送门。传送门Sharding-JDBC 也会因此,能够覆盖更多的业务场景。传送门登记吧,骚年!传送门最灵活也是最复杂的,希望大家有耐心看完本文。理解查询语句解析,另外三种语句理解起来简直是 SO EASY。骗人是小狗(芋道源码)留言,我会逐条认真耐心回复。骗人是小猪OK,不废话啦,开始我们这段痛并快乐的旅途。2. SelectStatement?本节只介绍这些类,方便本文下节分析源码实现大家能知道认识它们?SelectStatement,查询语句解析结果对象。// SelectStatement.javapublicfinalclassSelectStatementextendsAbstractSQLStatement{/** * 是否行 DISTINCT / DISTINCTROW / UNION */privateboolean distinct;/** * 是否查询所有字段,即 SELECT * */privateboolean containStar;/** * 最后一个查询项下一个 Token 的开始位置 * * @see #items */privateint selectListLastPosition;/** * 最后一个分组项下一个 Token 的开始位置 */privateint groupByLastPosition;/** * 查询项 */privatefinal ListSelectItem items = new LinkedList();/** * 分组项 */privatefinal ListOrderItem groupByItems = new LinkedList();/** * 排序项 */privatefinal ListOrderItem orderByItems = new LinkedList();/** * 分页 */private Limit limit;}我们对属性按照类型进行归类:特殊distinct查询字段containStaritemsselectListLastPosition分组条件groupByItemsgroupByLastPosition排序条件orderByItems分页条件limit2.1 AbstractSQLStatement增删改查解析结果对象的抽象父类。publicabstractclassAbstractSQLStatementimplementsSQLStatement{/** * SQL 类型 */privatefinal SQLType type;/** * 表 */privatefinal Tables tables = new Tables();/** * 过滤条件。 * 只有对路由结果有影响的条件,才添加进数组 */privatefinal Conditions conditions = new Conditions();/** * SQL标记对象 */privatefinal ListSQLToken sqlTokens = new LinkedList();}2.2 SQLTokenSQLToken,SQL标记对象接口,SQL 改写时使用到。下面都是它的实现类:类说明Genera
文档评论(0)