周末两天我写了一个 MySQLParser 写这个东西的目的是: 公司的一个项目中需要对数据打版本号 (每个表的每条记录要有一个版本号字段, 这个字段需要由框架自动打上去, 而不是由程序员来做)
所以, 我写的这个程序是有专门的场景的, 并非为通用情况而编写 (也就是说: 有些东西并不影响工具对 sql 加字段的, 我在编写的过程中故意的忽略了比如: 系统中只用到 CRUD 操作, 所以我在写 SQL 时就没能支持 DDL 语句)
我已经测试了项目系统中的所有 SQL, 都是可以处理的, 同时我也自己写了一些比较复杂的 SQL, 也可以正常处理
但: 因为我对 MySQL 的一些生僻语法不熟悉, 在实现时参考 MySQL 源码中的 sql_yacc.yy 文件中的语法定义, 发现有很多不懂的语法, 虽然可以实现, 但因为不懂, 所以我也直接忽略掉了 (如果有人用了这些语法就会直接报错)
在这里面我很难定义什么是常规 SQL 语法, 什么是生僻 SQL 语法, 所以我目前的实现只是按我自己的理解来实现的, 至少目前我所用到的所有 MySQL 的 insert/delete/update/select 语句的语法都是可以正确解析, 并正确添加数据版本号字段的
如果大家对这个东西有兴趣 (如果同时又有需要, 那就更好), 就请大家到这里 https://github.com/naturemickey/MySQLParserclone 这个工具的代码试一下
代码说明:
1.clone 出来之后的目录就是一个 eclipse 工程, 直接导入即可
2.src/test 目录中是所有的测试用例, 可以直接运行 (测试代码中真正使用工具在 sql 中加字段的地方只有一行代码, 非常简单)
3. 代码用 java8 编写
麻烦大家:
1. 如果发现大家平时用到的 SQL 这里无法解析或解析错误, 那么麻烦大家在 github 上把您的测试用例 pull request 给我
2. 如果您平时不用 github, 那么麻烦您直接把您的测试 SQL 在本文章后面留言 (https://github.com/naturemickey/MySQLParser 这个地址也可以直接用 SVN checkout)
来源: http://www.cnblogs.com/naturemickey/p/5774918.html