ShardingSphere-SQL 解析 Issue 处理流程

news/2024/4/19 15:07:35/文章来源:https://blog.csdn.net/kaishizhangcheng/article/details/136468249

ShardingSphere-SQL 解析 Issue 处理流程

这是之前给社区写的 SQL 解析 Issue 的处理流程,可以帮助社区用户快速参与到 ShardingSphere-SQL 解析任务当中。

ShardingSphere SQL 解析 issue 列表

Issue 背景说明

当前 Issue 使用自定义的爬虫脚本从对应的数据库官网上抓取 SQL Cases,然后交给 ShardingSphere 的解析引擎进行解析。对于解析失败的 SQL Case,每 3~5 条 SQL 作为一个 Issue。

  1. 由于是通过爬虫抓取的,所以不保证所有 SQL 本身就是正确的,请按照如下流程处理该 PR。
  2. 有些 SQL Case 可能已经在其他 PR 里被修复,对于已经可以执行的 Case 直接留言忽略即可。
  3. 如果该 SQL Case 已经可以成功运行,没有任何代码改动,那么不需要添加对应的 Test 断言文件。

总体流程

  1. 如果你打算参与该 Issue 的修复,欢迎在 Issue 下方留言,会有社区同学分配该 Issue。

比如留言:Hi, please assign this issue to me. Thank you!

  1. 当认领到 Issue 之后,请在对应数据库的官网上查看该 SQL 的相关语法,并在对应的数据库上执行该 SQL 确保 SQL 本身语法的正确性。

举个例子,对于 Issue: https://github.com/apache/shardingsphere/issues/30305

总共包含 3 条有问题的 SQL Cases。

可以通过 case 下方的 link 查看该条 SQL 在数据库官网上对应的出处。

在这里插入图片描述

点开官网链接后,查看相关 SQL 语法。如果链接里不包含对应的 SQL 语法,此时需要您自行搜索相关 SQL 语法。

比如此处官网对应的语法示例如下:

在这里插入图片描述

接着把上述有问题的 SQL CASE 放到数据库里执行(可以使用对应数据库的 Docker 镜像快速启动对应数据库,然后使用您熟悉的客户端进行连接),确保 SQL 语法本身没有问题。

在这里插入图片描述

ANTLR 语法解析问题修复

确定 SQL 语法正确之后,可以在 ShardingSphere 里验证并修复该语法解析问题。

如果您使用的是 Intellij IDEA,需要先安装 ANTLR 插件。

在这里插入图片描述

当插件安装完成之后,在 IDEA 底部菜单栏中找到 ANTLR Preview 菜单。

在这里插入图片描述

下面打开第一条 SQL CREATE TABLE 对应的 .g4 文件。目前.g4 规则已经按照 SQL 类型进行分类,比如CREATE TABLE 语法规则在 DDLStatement.g4文件中。

DDLStatement.g4 文件里 createTable 这条规则上右键->Test Rule Xxx。然后将有问题的 SQL 粘贴到底部的 ANTLR Preview 窗口中。

在这里插入图片描述

此时可以看到 ANTLR 解析报错的信息,根据报错信息对照数据库官方语法尝试修复 .g4 文件,直到 SQL 可以被 ANTLR 正确的解析。

可以在修复.g4 语法过程中,实时通过执行 Test Rule Xxx 在 ANTLR Preview 窗口中观察语法问题是否已经被成功修复。

当 ANTLR Preview 窗口不再有报错信息,表示 ANTLR 已经可以正确解析该条 SQL 了。

在这里插入图片描述

Visitor 问题修复

ANTLR 将 SQL 解析成抽象语法树之后,ShardingSphere 会通过 Visitor 访问抽象语法树,提取所需的信息。

如果需要提取 Segment,需要先在 shardingsphere-parser 模块下,执行 mvn -T 2C clean install -DskipTests 编译整个 parser 模块。

然后按需重写 SQLStatementVisitor 里对应的 visit 方法,提取对应的 Segment。

参考 https://github.com/apache/shardingsphere/pull/30258

在这里插入图片描述

添加断言测试文件

当上面 SQL 解析问题修复完毕之后,需要添加对应的 Test,步骤如下:

  1. sql/supported 目录下添加对应的 sql-case
  2. 在 shardingsphere-test-it-parser 模块的 case 目录下添加 case 断言。

在这里插入图片描述

  1. 运行 org.apache.shardingsphere.test.it.sql.parser.internal.InternalSQLParserIT,确保 SQL Parser IT 可以正常运行。

InternalSQLParserIT 对于每种数据库方言,提供了对应实现。比如此处运行 InternalSQLServerParserIT

在这里插入图片描述

当 SQL Parser IT 运行成功之后,即可提交 PR。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_999238.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理模式以及静态代理、JDK代理、Cglib代理的实现

代理模式(Proxy) 介绍 1、代理模式:为对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作 &…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先…

数据结构 - 栈和队列

本篇博客将介绍栈和队列的定义以及实现。 1.栈的定义 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除数据,插入数据的一端叫做栈顶,另一端叫做栈底。栈中的数据遵守后进先出的原则 LIFO (Last In First Out)。 插入数据的操作称为压…

【AI视野·今日Robot 机器人论文速览 第八十四期】Thu, 7 Mar 2024

AI视野今日CS.Robotics 机器人学论文速览 Thu, 7 Mar 2024 Totally 23 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers 3D Diffusion Policy Authors Yanjie Ze, Gu Zhang, Kangning Zhang, Chenyuan Hu, Muhan Wang, Huazhe Xu模仿学习提供了一种教…

js【详解】Promise

为什么需要使用 Promise ? 传统回调函数的代码层层嵌套,形成回调地狱,难以阅读和维护,为了解决回调地狱的问题,诞生了 Promise 什么是 Promise ? Promise 是一种异步编程的解决方案,本身是一个构…

防御保护--IPSEC VPPN实验

实验拓扑图 实验背景:FW1和FW2是双机热备的状态。 实验要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 IPSEC VPPN实验配置(由于是双机热备状态,所以FW1和FW2只需要配置FW1…

解决方案TypeError: string indices must be integers

文章目录 一、现象:二、解决方案 一、现象: PyTorch深度学习框架,运行bert-mini,本地环境是torch1.4-gpu,发现报错显示:TypeError: string indices must be integers 后面报字符问题,百度过找…

阿里云服务器安装EMQX避坑指南

首先我们在EMQX官网按照教程安装了EMQX,博主采用的是Ubantu20.04 然后用netstat -lntu指令检测emqx是否启动 从上面这张图片可以看到我们的端口已经在本地运行了,18083是后台管理系统的端口。随后我们在阿里云服务器配置安全组规则。 但是即便做到这样仍…

数据结构之栈详解(C语言手撕)

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

如何保证消息不丢之MQ重试机制消息队列

1. 简介 死信队列,简称:DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX 那么什么情况下会成为Dead message&a…

智慧城市如何助力疫情防控:科技赋能城市安全

目录 一、引言 二、智慧城市与疫情防控的紧密结合 三、智慧城市在疫情防控中的具体应用 1、智能监测与预警系统 2、智慧医疗与健康管理 3、智能交通与物流管理 4、智慧社区与基层防控 四、科技赋能城市安全的未来展望 五、结论 一、引言 近年来,全球范围内…

鼠标右键没有git bash here,右键添加git bash here并增加图标

突然发现自己鼠标右键没有git bash here,或者安装之后就没有git bash here。后面那种情况多半是没有默认装在C盘。我们装在其他盘的时候就需要自己去配置。git gui目前用不上,这里只讲git bash here。网上一堆教程,说法不同大多不能用要么就很…

Docker部署SimpleMindMap结合内网穿透实现公网访问本地思维导图

文章目录 1. Docker一键部署思维导图2. 本地访问测试3. Linux安装Cpolar4. 配置公网地址5. 远程访问思维导图6. 固定Cpolar公网地址7. 固定地址访问 SimpleMindMap 是一个可私有部署的web思维导图工具。它提供了丰富的功能和特性,包含插件化架构、多种结构类型&…

1-Git-基础

版本控制 为什么要进行版本控制? **个人角度:**代码的修改繁杂,如果一点点修改代码,不利于开发。进行版本控制,可以在特定历史状态下进行修改。即可以进行回退和撤销操作 **团队角度:**每个人负责各自的…

垃圾收集器底层算法

垃圾收集器底层算法 三色标记 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生,这里我们引入“三色标记”来给大家解释下把Gcroots可达性分析遍历对象过程中遇到对象…

灯塔:CSS笔记(2)

一 选择器进阶 后代选择器:空格 作用:根据HTML标签的嵌套关系,,选择父元素 后代中满足条件的元素 选择器语法:选择器1 选择器2{ css } 结果: *在选择器1所找到标签的后代(儿子 孙子 重孙子…

opencv dnn模块 示例(24) 目标检测 object_detection 之 yolov8-pose 和 yolov8-obb

前面博文【opencv dnn模块 示例(23) 目标检测 object_detection 之 yolov8】 已经已经详细介绍了yolov8网络和测试。本文继续说明使用yolov8 进行 人体姿态估计 pose 和 旋转目标检测 OBB 。 文章目录 1、Yolov8-pose 简单使用2、Yolov8-OBB2.1、python 命令行测试2.2、opencv…

iOS-系统弹窗调用

代码: UIAlertController *alertViewController [UIAlertController alertControllerWithTitle:"请选择方式" message:nil preferredStyle:UIAlertControllerStyleActionSheet];// style 为 sheet UIAlertAction *cancle [UIAlertAction actionWithTit…

Unity性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI,因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测,则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明,我们看不见它&#xf…

C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码

1 老鼠迷宫问题 迷宫中的老鼠,作为另一个可以使用回溯解决的示例问题。 迷宫以块的NN二进制矩阵给出,其中源块是最左上方的块,即迷宫[0][0],目标块是最右下方的块,即迷宫[N-1][N-1]。老鼠从源头开始,必须…