当前位置: 首页 > news >正文

ShardingSphere-SQL 解析 Issue 处理流程

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。

相关文章:

ShardingSphere-SQL 解析 Issue 处理流程

ShardingSphere-SQL 解析 Issue 处理流程 这是之前给社区写的 SQL 解析 Issue 的处理流程,可以帮助社区用户快速参与到 ShardingSphere-SQL 解析任务当中。 ShardingSphere SQL 解析 issue 列表 Issue 背景说明 当前 Issue 使用自定义的爬虫脚本从对应的数据库官…...

【矩阵】48. 旋转图像【中等】

旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,…...

高质量 Git 仓库汇总(持续更新,方便查看)

Leetcode https://github.com/kamyu104/LeetCode-Solutions Cmake https://github.com/viva64/pvs-studio-cmake-examples 3D目标检测 Awesome-3D-Object-Detection Awesome-3D-Object-Detection-for-Autonomous-Driving Cuda Code dbscan https://github.com/l3lackc…...

学习笔记-华为IPD转型2020:1,IPD的重要意义

华为产品开发转型:IPD计划 大多数公司发现,当公司大幅增长时,在较小规模上有效的管理实践不再有效。产品开发过程也是如此。随着华为的发展,该公司遇到了产品故障率更高、开发周期更长和研发成本增加等问题。然后,它转…...

【阿里云系列】-基于云效构建部署NodeJS项目到ACK

准备工作 01、编写Dockerfile文件可以根据不同的环境,新建不同的Dockerfile文件,比如Dockerfile-PROD # Deliver the dist folder with NginxFROM nginx:stable-alpine ENV LANGC.UTF-8 ENV TZAsia/ShanghaiCOPY dist/ /usr/share/nginx/html COPY ngi…...

Jmeter入参问题小记

表单入参的时候,这个地方需要勾选,如果不☑️选的话,会提示errorMsg":"Required String parameter code is not present",...

【四 (2)数据可视化之 Matplotlib 常用图表及代码实现 】

目录 文章导航一、介绍二、安装Matplotlib三、导入Matplotlib四、设置可以中文显示四、常用图形1、散点图(Scatter Plot)2.1、线性图(Line Plot)2.2、堆叠折线图2.3、多图例折线图3.1、柱状图/条形图(Bar Chart&#x…...

官网建设的江湖四大流派,一派苦撑、一派完犊子、另外两派搅局。

有人的地方就有江湖,有江湖的地方就有纷争,有纷争地方就有此起彼伏。 说好的,当赚够了钱就退出建站江湖,人就是江湖,怎么退? 官网建设风起云涌20年,一方倒地,一方揭竿而起&#xff…...

Ubuntu 安装 KVM 虚拟化

1. Ubuntu 安装 KVM 虚拟化 KVM 是 Linux 内核中一个基于 hypervisor 的虚拟化模块,它允许用户在 Linux 操作系统上创建和管理虚拟机。 如果机器的CPU不支持硬件虚拟化扩展,是无法使用KVM(基于内核的虚拟机)直接创建和运行虚拟机的。此时最多只能使用…...

SA3D:基于 NeRF 的三维场景分割方法

Paper: Cen J, Zhou Z, Fang J, et al. Segment anything in 3d with nerfs[J]. Advances in Neural Information Processing Systems, 2024, 36. Introduction: https://jumpat.github.io/SA3D/ Code: https://github.com/Jumpat/SegmentAnythingin3D SA3D 是一种用于 NeRF 表…...

mysql实战开发之 mysql 删除一张表某个字段的sql语句

有一张表, 我需要删除这张表其中的某一个或者某几个字段, 相信大家在日常开发中应该会遇到这种情况, 然后刚好自己接触的项目安装的mysql关闭了允许远程连接的设置, 也就是说不允许使用类似于navicat 等可视化工具连接, 那么就没办法通过可视化工具直接去通过鼠标操作就可以 完…...

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器(3)Bug问题记录1&#xff…...

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…...

数据结构——动态顺序表

数据结构的动态顺序表有以下几个操作:创建,销毁,初始化,增删查改和打印以及内存空间不够时的扩容 本文的宏定义: #define SeqTypeData int 1.动态顺序表的创建 typedef struct SeqListInit{//动态顺序表的创建SeqT…...

Android Studio实现内容丰富的安卓宠物医院管理系统

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号128 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.系统公告 3.宠物社区(可发布宠物帖子&#xf…...

华为OD机试真题-启动多任务排序-2024年OD统一考试(C卷)

题目描述: 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…...

在没有推出硬盘的情况下,重启mac电脑,外接移动硬盘无法加载显示?

一、mac磁盘工具显示未装载 1.打开终端,输入 diskutil list查看当前硬盘列表,大多数时候,可以解决。 二、使用命令行装载硬盘 执行上面命令后,仍不起作用,则手动挂载,在命令行输入如下内容: …...

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1:按照二叉搜索树的方法插入结点步骤2:自底向上调整平衡因子步骤3:触发旋转操作(AVL树平衡的精髓)右单旋左单旋左右双旋右左双旋…...

CodeSys通过C函数接口调用Qt

文章目录 1.背景介绍2.修改makefile2.1.将编译器由c改成c2.2.使能opencv库2.3.使能Qt库 3.在代码中使用Qt库函数 1.背景介绍 建议先查看之前的文章【CodeSys中调用C语言写的动态库】,了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方…...

线性代数笔记18--行列式公式、代数余子式

1. 行列式公式推导 二阶行列式推导 [ a b c d ] [ a 0 c d ] [ 0 b c d ] [ a 0 0 d ] [ a 0 c 0 ] [ 0 b c 0 ] [ 0 b 0 d ] [ a 0 0 d ] − [ b 0 0 c ] a d − b c \begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}& \begin{bmatrix} a &…...

最新2024年项目基金撰写与技巧及GPT融合应用

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…...

Java八股文(Element Plus)

Java八股文のElement Plus Element Plus Element Plus 什么是Element UI 和 Element Plus? Element UI 和 Element Plus 是基于 Vue.js 的一套非常受欢迎的开源 UI 组件库,用于快速构建具有现代化设计和丰富交互效果的前端界面。 Element UI 和 Element…...

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop(常用)2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高(高可靠、高扩展、高效、高容错) Hadoop组成1.HDFS管理者:NameNode(n…...

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展,数据可视化已成为一项重要工具,有助于用户更好地理解数据和分析结果。其中,3D地图作为一种可视化工具,已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合,以更加直观…...

JavaScript 进阶(二)

一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 : 是一种特殊的函数,主要用来初始化对象。 使用场景: 常规的 {...} 语法允许创建一个对象。…...

基于ssm+layui的图书管理系统

基于ssmlayui的图书管理系统 账户类型分为:管理员,用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为:管理员,用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...

双指针算法_复写零

题目: 给一个固定长度的数组arr,将数组中出现的每一个0都复写一遍,并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素,在数组上直接修改 示例: 双数组模拟操作: 从示例来看,因为…...

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…...

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…...