ShardingSphere-SQL 解析 Issue 处理流程

news2024/11/15 21:30:28

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.coloradmin.cn/o/1503186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载

文章目录 导文文章重点内容效果展示:代码展示这些方法适用于哪些场景 总结 导文 vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载 文章重点 内容效果展示: 当div拉到底部的时候: 编辑器返回: 代码展示 在…

分享axios+MQTT简单封装示例

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在19…

鸿蒙实战开发Camera组件:【相机】

相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。 基本概念 拍照 此功能用于拍摄采集照片。 预览 此功能用于在开启相机后,在缓冲区内重复采集…

IP地址定位技术的主要功能及应用

在互联网时代,IP地址定位技术成为了一项重要的技术,它通过分析用户的IP地址,确定用户的地理位置信息。IP地址定位技术不仅在网络安全、网络管理等领域有着重要的应用,也在商业、广告营销等领域发挥着重要作用。IP数据云将探讨IP地…

【网络层】IP多播技术的相关基本概念(湖科大慕课自学笔记)

IP多播 1:IP多播技术的相关基本概念 我们简单举例,如下图所示: 一共有60个主机要接受来自视频服务器的同一个节目,如果采用单播方式,则视频服务器要发送60份,这些视频节目通过路由器的转发,最…

⎣优化技术⎤CoT-Decoding

微信公众号|人工智能技术派 作 者|hws 一种解码策略优化技术:目标是不需要任何显示的CoT prompting,能够有效提升大型语言模型在各种推理任务中的表现,并通过自发地揭示CoT推理路径,改善模型的推理能力和准确性。 背景介绍 大模…

【Linux基础(四)】管道

学习分享 1、什么是管道2、管道的分类3、管道的特点4、pipe函数(匿名管道)5、命名管道:FIFO文件5.1、创建一个命名管道5.2、访问一个FIFO文件 6、命名管道示例6.1、写操作示例6.2、读操作示例 7、access函数和mkfifo函数8、删除FIFO文件 1、什…

基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206

摘 要 本宠物健康咨询系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及宠物健康知识信息,能够与用户进行相互交流等操作,用户可以查看宠物健康知识信息,可以查看公告以及查看…

一个将图片转3D的开源项目TripoSR

TripoSR AI是StabilityAI联合发布的图生3D模型,TripoSR是一个快速的3D物体重建模型。TripoSR能够在不到一秒钟的时间内从单张图片生成高质量的3D模型。TripoSR模型的特点是能够快速处理输入,在 NVIDIA A100 GPU 上不到 0.5 秒的时间内生成高质量的 3D 模…

【STM32+OPENMV】二维云台颜色识别及追踪

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容,详情见【STM32HAL】与OpenMV通信 有关七针OLED屏显示内容,详情见【STM32HAL】七针OLED(SSD1306)配置(SPI版) 二、所用工具 1、芯片:STM32F407ZGT6 2、CUBEMX配置软件 3、KEIL5 4…

Python和Google Colab进行卫星图像二维小波变化和机器学习

2D 小波分解是图像处理中的一种流行技术,使用不同的滤波器将图像分解为不同的频率分量(“近似”和“细节”系数)。该技术对于各种图像处理任务特别有用,例如压缩、去噪、特征提取和边缘检测。 在本文中,我们将演示如何在 Google Colab 中使用 Python 下载高分辨率样本卫星…

XSS-Labs靶场1---11关

一、XSS环境搭建: [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 (该博主总结的较为详细,若侵权必删) 常用的xss攻击语句: 输入检测确定标签没有过滤后,为了显示存在漏洞&#…

Vue2 基础二常用特性

代码下载 表单操作 基于Vue的表单操作 input 单行文本textarea 多行文本select 下拉多选,multiple属性实现多选,多选时对应的 data 中的数据也要定义成数组radio 单选框checkbox 多选框,data 中的数据要定义成数组,否则无法实现…

C++ Qt开发:QNetworkInterface网络接口组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkInterface组件实现查询详细的…

面试遇到了接口分析和测试用例分析题,该如何下手?

只要有软件产品的公司百分之九十以上都会做接口测试,要做接口测试的公司那是少不了接口测试工程师的,接口测试工程师相对于其他的职位又比较轻松并且容易胜任。如果你想从事接口测试的工作那就少不了对接口进行分析,同时也会对测试用例进行研…

el根据需求合并列

将 列分为 3 3 1 的格式 以下是vue代码&#xff1a; <el-table:data"dataSource":border"true":header-cell-style"{ font-weight: normal, text-align: center }":cell-style"{ text-align: center }"size"mini"style…

CODESYS双通气缸功能块(ST源代码)

博途PLC双通气缸功能块请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/136415539https://rxxw-control.blog.csdn.net/article/details/136415539CODESYS 结构变量使用 https://rxxw-control.blog.csdn.net/article/details/126248829

NUMA简介

NUMA 1 什么是NUMA 早期的计算机&#xff0c;内存控制器还没有整合进 CPU&#xff0c;所有的内存访问都需要经过北桥芯片来完成。如下图所示&#xff0c;CPU 通过前端总线&#xff08;FSB&#xff0c;Front Side Bus&#xff09;连接到北桥芯片&#xff0c;然后北桥芯片连接到…

go语言添加代理

LiteIDE 工具->管理 https://mirrors.aliyun.com/goproxy/或https://goproxy.cn,direct 命令行 go env -w GOPROXYhttps://goproxy.cn,direct

找不到duilib.dll:是什么文件?如何解决

当你尝试打开某个程序软件时&#xff0c;你可能会看到一条错误信息&#xff0c;提示你缺失一个名为“duilib.dll”的文件。这个文件通常与程序开发中使用的UI框架相关&#xff0c;缺失它会导致程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff1f;本文将为你提供…