暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【手写数据库核心揭秘系列】第113节 DELETE命令的语法解析规则,来定制你的规则

开源无限 2025-07-22
70


💻 深耕数据库内核架构设计与开发十余年,曾主导多款高性能分布式数据库内核研发,攻克高并发、低延迟等核心技术难题。现倾力打造《从零手写数据库》系列教程,首次系统性公开数据库内核源码级实现细节!
🚀 从存储引擎、查询优化到分布式事务,手把手拆解核心模块;从语法解析树构建到执行计划生成,逐行代码还原设计精髓
🌟 无论你是数据库开发者、系统架构师,还是对底层技术充满好奇的极客,这里都有你想要的“硬核干货”!点击关注,与行业老兵共同探索数据库技术的星辰大海!
公众号:开源无限

一、概述 


DELETE命令的语法解析相对比较简单,它的基本子句都已经在其它命令中实现。DELETE命令的语法解析,包括三个部分:词法分析、语法节点定义和语法解析。

二、词法分析 


本次只新增一个DELETE关键词,在词法规则文件sqlscanner.l中定义分词规则。

    ounter(lineounter(lineounter(line
    DELETE          {
                        return DELETE;
                    }  

    当匹配到DELETE分词时,返回token值,在语法规则文件中定义token值。

      ounter(line
      %token DELETE

      三、语法节点 


      在DELETE语法解析树中,顶层节点就是DELETE语法节点。

        ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
        typedef struct DeleteStmt
        {
            NodeType type;
            Node *targetRel; 
            Node *whereList;
        }DeleteStmt;

        在DELETE语法节点中包含两个成员:

        • targetRel,删除数据的目标表;
        • whereList,where子句中条件列表;

        同时还需要定义语法节点类型,在语法树节点中通过节点类型来区分它们的不同。

          ounter(line
              T_DeleteStmt,

          四、语法解析 


          根据DELETE命令的语法规则,生成语法解析树。从顶层规则开始,将生成的语法树进行记录。

            ounter(lineounter(lineounter(lineounter(line
                        | delete_stmt
                                {
                                    $$ = $1;
                                }      

            语法树的根节点,由DELETE命令的各子句组成,将各子句生成的子语法树记录到顶层语法节点当中。

              ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
              delete_stmt:    DELETE FROM table_info where_clause
                              {
                                  DeleteStmt *node = NewNode(DeleteStmt);
                                  node->targetRel = $3;
                                  node->whereList = $4;
                                  $$ = (Node*)node;
                              }
                      ;

              组成DELETE语法规则的数据表节点和where子句,已经在其它命令中定义过,这里直接复用,至此DELETE命令的语法树生成实现。

              五、总结 


              本节实现代码位于exam_70目录下的sqlscanner.l和sqlgram.y文件中。


              🌟 点赞收藏,分享给身边的技术伙伴,关注我们,持续获取数据库内核开发的硬核干货!一起从源码级实现到分布式架构,解锁数据库技术的每一个核心细节!🚀


              【往期精彩推荐】

              【手写数据库核心揭秘系列】第112节 终于到DELETE命令啦~

              【手写数据库核心揭秘系列】第111节 UPDATE更新演示,多表联合的跨表UPDATE,多列赋值的简洁写法

              【手写数据库核心揭秘系列】第99节 多表联合查询演示,高复杂度查询SQL,四张数据表混合联合类型的查询

              文章转载自开源无限,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论