为什么会想做这个开源作品呢?
想法源于之前公司想把项目中 Oracle 数据库换成 Mysql 数据库,那么在整体换完语法以后,怎么确定所有的 Sql 能够正常执行呢?所以就有这样一个想法。想写一个小工具能够自动测试项目中的 Sql 语法是否正确,并且格式化输出错误信息。
1
levelworm 2020-03-24 00:51:24 +08:00 via Android
直接扔开发数据库看返回错误。。。
|
2
xfriday 2020-03-24 01:00:09 +08:00
可以看看 rust 的 sqlx 库
|
3
miaoever 2020-03-24 01:28:39 +08:00 1
这类系统最难的是不仅仅要保证语法的正确性, 而且要保证语义的正确性. 前者很简单, 用支持 Mysql SQL 的 parser 去解析转换后的 SQL 看是否符合语法. 但是后者-语义检测很难.
|
4
msg7086 2020-03-24 04:19:50 +08:00
可能只对不用 ORM 的项目有用?
|
6
Chabuduo001 OP @ebingtel 目前想法只针对使用 Mybatis 框架的,想在应用层面进行拦截,执行,捕获异常、截取错误信息
|
7
aguesuka 2020-03-24 12:16:49 +08:00 via Android
idea 配置数据库后,在 java 代码里,sql 字符串的前一句加上注释 // language=sql
|
8
aguesuka 2020-03-24 12:18:03 +08:00 via Android
mybatis 的 xml 里就更简单了,idea 里配置好数据库有问题就会报错
|
9
littlewing 2020-03-24 12:19:49 +08:00 via iPhone
inception
|
10
vanityfairn 2020-03-24 14:14:10 +08:00
我还想过,该怎么去自动检测慢 sql 。
|
11
huamiao 2020-03-24 16:02:00 +08:00
应该有一套自动化测试去测试产品,而且不是测试 SQL 的语法。(通常在把 SQL 写进代码前开发总是会自己在 DB 工具里试一下的吧,根本轮不到使用这样一个工具去排错)更何况如果遇到使用 command parameter 的情况,会造成工具的逻辑更加复杂。
|
12
Chabuduo001 OP @huamiao 正常开发肯定是开发在写 sql 的时候就已经自己测过了,但是我的想法源于是在我们公司项目从 Oracle 迁移到 Mysql,所以第一步肯定先改语法,但是改完以后由于 Sql 特别多,所以就想开发层面搞一个工具自己测一下,看从 Oracle 语法改到 Mysql 语法对不对,总不可能自己一个一个 sql 跑吧。
|
13
qwerthhusn 2020-03-24 17:10:47 +08:00
方言问题很麻烦
而且对于 group by 有那种 only_full_group_by 限制等等细节问题 |
14
huamiao 2020-03-24 17:14:30 +08:00
@Chabuduo001 正常做法是项目应该有自己的自动化测试,迁移完跑一遍自动化测试就结了。
回到问题本身,如果你解决了 sql 提取规整的问题,大约向服务区发送 EXPLAIN 请求可以来进行验证吧。(完全是猜测,未在代码层面验证过) |
15
xcstream 2020-03-24 17:14:44 +08:00
感觉比较难还是要人肉功能测试
|
16
JoshuaJin 2020-03-24 18:44:10 +08:00
如果单纯迁移的是 sql 可能还好些,我们现在迁移的是 Oracle 的存储过程,也没有很好的办法~~
|
17
Chabuduo001 OP @JoshuaJin 哈哈,我们还没到存储过程这一步,因为刚把语法改过来,这个项目就黄了。 但是一直有这个想法。
|
18
xyjincan 2020-03-24 21:32:06 +08:00
定义一个不兼容的关键字集合
|
19
aitaii 2020-03-24 21:36:03 +08:00
迁移存储过程和触发器的逻辑才是头大,我司去年下半年花了 1 个月的时间由 Oracle 迁移到 Mysql 了,对应的性能也需要额外的优化。
|
20
wangxiyu191 2020-03-24 21:37:33 +08:00
这个说起来某云有两整套产品干这个。。基本思路是流量镜像然后对比。
|
21
purensong 2020-03-25 10:30:11 +08:00
小米有 soar 这个平台可以检测 SQL,我最近也有个想法就是去给这项目贡献,添加一些常用 SQL 错误的改写,提供修复变形 SQL 功能
|