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。

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

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

相关文章

php采集类snoopy2.0使用说明

我们经常采集一些网站数据时会被识别为机器人被网页被拒绝访问,类似这种: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden网宿云安全平台检测到您当前的访问行为存在异常,请稍后重试... 云安全平台检测到您当前的访问…

【Azure 架构师学习笔记】- Azure Service Endpoint

本文属于【Azure 架构师学习笔记】系列。 前言 在做Azure 架构时,经常会被问到Service Endpoint这个点,那么这篇文章来介绍一下Service Endpoint(SE)。 Azure Service Endpoint 首先它是一个专用通道,在Azure 资源之…

Kosmos-2: 在多模态大语言模型中引入基准和指代能力

Kosmos-2: 在多模态大语言模型中引入基准和指代能力 FesianXu 20240304 at Baidu Search Team 前言 之前笔者在博文中介绍过kosmos-1模型 [1],该模型脱胎于MetaLM采用『因果语言模型作为通用任务接口』的思想,采用了多种形式的多模态数据进行训练得到。…

GIS之深度学习07:CUDNN教程(CUDA12.1配套)

CUDNN(CUDA Deep Neural Network library)是NVIDIA专门针对深度学习应用开发的GPU加速库。它提供了一系列高效的深度学习算法的实现,包括卷积神经网络(CNN)、循环神经网络(RNN)等常用网络结构的…

flutter开发文档,靠着这份面试题跟答案

1、知道它是什么、有什么用 相信很多人在学习的时候,一开始都会在网上找一整套资料或者买一本书来学习,结果就是内容太多,学了记不住或者学到一半感觉很难,便放弃了,更别提写代码了,根本无从入手。 而更好…

echarts柱状图可鼠标左击出现自定义弹框,右击隐藏弹框并阻止默认右击事件

每项x轴数据对应有两条柱图和一条阴影效果是学习其它博客得到的效果,这个是学习的原文链接:echarts两个合并柱体(普通柱状图象形柱图)共享一个柱体阴影 因为这次情况比较特殊,不仅需要自定义弹框内容,而且…

day12_SpringCloud(Gateway,Nacos配置中心,Sentinel组件)

文章目录 1 Gateway组件1.1 Gateway简介1.2 Gateway入门1.3 网关路由流程图1.4 路由工厂1.5 过滤器1.5.1 过滤器简介1.5.2 内置过滤器1.5.3 路由过滤器1.5.4 默认过滤器1.5.5 全局过滤器1.5.6 过滤器执行顺序 2 Nacos配置中心2.1 统一配置管理2.2 Nacos入门2.2.1 Nacos中添加配…

【PowerMockito:编写单元测试过程中原方法没有注入的属性在跑单元测试时出现空指针】

出错场景 下面这一步报空指针,但是因为没有注入,在测试类中无法使用Mock 解决 在执行方法前,加入以下代码 MemberModifier.field(ResourceServiceImpl.class,"zero").set(resourceService,"0");

在Vue中搭建Three.js环境(超详细、保姆级),创建场景、相机、渲染器《一》

目录 Three.js简介创建vue项目引入Three.js实际操作环节文件目录创建初始化场景、相机 Three.js简介 Three.js 是一款基于 WebGL的 JavaScript 3D 库,它封装了 WebGL API,为开发者提供了简单易用的 API 来在 Web 浏览器中展示 3D 图形。Three.js 提供了…

【字符串】【括号匹配】【广度优先】301. 删除无效的括号

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 本文涉及知识点 字符串 括号匹配 广度优先 LeetCode301 删除无效的括号 给你一个由若干括号和字母组成的字符串 s ,删除最小数量的无效括号,使得输入的字符串有效。 返回所有可能的结果…

Linux Watchdog 机制是什么

当涉及到Linux操作系统的稳定性和可靠性时,Linux Watchdog机制是一个至关重要的议题。该机制旨在监控系统状态,确保在出现问题时采取适当的措施以维持系统的正常运行。本文将深入探讨Linux Watchdog机制的工作原理、应用范围以及如何配置和使用该机制来提…

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建 卷II 一. 拓扑图 二.有线网络配置 三.无线网络配置 四.出口网络配置 二、有线配置 S1.txt S1#show running-config Building configuration... Current configuration : 5008 bytes! version RGOS 10…

html标签之表格标签,想学web开发

html 1,浏览器存储的方式有哪些 2,如何解决跨域的? 3,浏览器 cookie 和 session 的认识。 4,输入URL发生什么? 5,浏览器渲染的步骤 6,页面渲染优化 7,强制缓存和协商缓存…

蓝桥杯刷题(一)

一、 import os import sys def dps(s):dp [0] * len(s)dp[0] ord(s[0]) - 96if len(s) 1:return dp[-1]dp[1] max(ord(s[0]) - 96, ord(s[1]) - 96)for i in range(2, len(s)):dp[i] max(dp[i - 1], dp[i - 2] (ord(s[i])) - 96)return dp[-1] s input() print(dps(s))…

App前端开发跨平台框架比较:React Native、Flutter、Xamarin等

引言 移动应用开发领域的跨平台框架正在不断演进,为开发者提供更多选择。在本文中,我们将比较几个流行的跨平台框架:React Native、Flutter和Xamarin等。讨论它们的优缺点、适用场景以及开发体验。 第一部分 React Native: 优缺点、适用场景…

gRPC-第二代rpc服务

在如今云原生技术的大环境下,rpc服务作为最重要的互联网技术,蓬勃发展,诞生了许多知名基于rpc协议的框架,其中就有本文的主角gRPC技术。 一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper,经过一段时间的学…

【Python】深度学习基础知识——梯度下降详解和示例

尽管梯度下降(gradient descent)很少直接用于深度学习,但它是随机梯度下降算法的基础,也是很多问题的来源,如由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。本文通过原理和…

【控制台警告】npm WARN EBADENGINE Unsupported engine

今天用webpack下载几个loader依赖,爆出了三个警告,大概的意思就是本地安装的node和npm的版本不是很匹配? 我的解决思路是: 先检查node和npm版本 然后去官网查找版本的对应 靠,官网404 Node.js (nodejs.org) 就找到…

第十二篇:学习python数据清洗

文章目录 一、啥是数据清洗二、将表格数据导入pandas中1. 准备工作2. 引入csv文件2.1 引入pandas库2.2 读取文件/修改名称3.2 快速浏览数据2.4 修改名字2.5 查找缺失值2.6 删除缺失值 3. 引入Excel文件3.1 引入pandas库3.2 读取Excel文件的人均GDP数据3.3 查看数据类型和non-nu…

【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)

一、介绍 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸…
最新文章