文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

分布式 | DBLE 之 SQL 解析

2020-12-15 09:37

关注

分布式 | DBLE 之 SQL 解析


数据库中间件与数据库有什么区别?

个人认为除了没做数据存储,其他的功能数据库中间件几乎一样不少,比如 SQL 解析、结果集处理、协议实现等。

SQL 解析的定义

今天我们主要来谈谈 SQL 解析,SQL 的全称为 Structured Query Language,即结构化查询语言,既然定义为语言,那其实它和任何其他语言都是平等的。所以对 SQL 的解析完全等同于对任何一门语言的解析,对编程语言的解析这就涉及到编译原理相关知识了。

想要解析一门语言,通常需要具备以下工具:

上面的定义可能大家看完还有点懵懂,这里我通过一个实际的例子来让大家有个更具体的认识。

案例解析

原始 SQL 如下:

SELECT id, name FROM test WHERE ID > 2 LIMIT 2;

下面我们来解析这个 SQL:

1. 词法分析

词法分析是将字符序列转换为单词(Token)序列的过程,所以上面的 SQL 经过词法分析后,将会变成这样一串序列:

是的,大家也许看出来了,词法分析就是拆分字符序列(是的,没错,我们都能自己写个词法分析器)。

2. 语法分析

语法分析是将词法分析器解析出的单词(Token)序列,进一步构建成有语义的抽象语法树(为什么是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节,比如上面拆分出来的“,”就不需要再数据结构中展现了)。

经过语法分析,上述序列将呈现如下结构:

同学们看到这里,应该知道语法分析器的作用了吧,其实就是把单词(TOKEN)序列转换成相应的数据结构,因为是树形的,又是“抽象”的,所以就叫抽象语法树了,看起来高端,其实大家也能自己写个语法分析器。

完成了上面两步,SQL 语法解析就已经完成了,至于遍历器,其实就是访问抽象语法树中的结构的。

总结

对于 SQL 解析,难道我们真的要手写吗?答案是当然不用啦,毕竟我们不是第一个吃螃蟹的人,DRUID 已经帮我们实现了 SQL 解析的功能,所以我们可以直接拿来用。DRUID 中的词法分析器以及语法分析器都是纯手写的,效率也很快。这里同学们可能会问,难道还有不用手写的吗?答案是肯定的,ANLTR 就可以帮你生成相应的解析器,不过还是需要你定义规则的。

DBLE 中 SQL 解析用的是 DRUID 实现,其实 SQL 解析说白了就是理解 SQL,理解了 SQL 就知道它要干嘛了,所以 DBLE 中的 SQL 解析是为后面的路由、结果集处理等功能服务的。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯