alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
28.01k stars 8.59k forks source link

parseStatements 不支持解析SQLServer的 while语法和pivot语法 #4772

Open HarryReidx opened 2 years ago

HarryReidx commented 2 years ago

SQLUtils.parseStatements 解析SQLServer 的 while语法和pivot语法 报错

HarryReidx commented 2 years ago

请问这两个语法是否可以支持解析呢

HarryReidx commented 2 years ago

或者有没有其他的解析工具推荐呢,更或者怎么样自己重写一下实现解析也可,有没有大佬提供一下思路,

capitalR commented 2 years ago

或者有没有其他的解析工具推荐呢,更或者怎么样自己重写一下实现解析也可,有没有大佬提供一下思路,

java还有一个是Jsqlparser解析器,但是Jsqlparser初步调研感觉还没druid parser靠谱.还有一个收费的gsqlparser,这是收费闭源,但是感觉语法支持应该是3个中最好的,毕竟收费而且是专门做sqlparser的.这些是java现成能用的parser,然后还有一条路线是antrl,自己编写语法文件,antrl自动帮你生成ast.最后的路线就是像温少一样,自己编码手撸一个parser了.总结就是:现成的有3->自己编语法文件->完全自己动手,丰衣足食.3条线感觉难度渐次上升,但是对解析器的掌控也是越来越强.

HarryReidx commented 2 years ago

确实是这样,generalSqlParser贵的离谱没勾一个数据库的支持就多加将近9w,他有90天试用,跑了一下确实是很强,然鹅没钱,当然有钱也不会买哈哈哈哈😅(不知道有没有大佬破解),真的是不想花费时间在sql解析上,我的sql解析的场景并不多,觉得自己动手时间成本太高,两难 目前想着没有好的办法就绕过不支持的语法特殊处理好了

capitalR commented 2 years ago

确实是这样,generalSqlParser贵的离谱没勾一个数据库的支持就多加将近9w,他有90天试用,跑了一下确实是很强,然鹅没钱,当然有钱也不会买哈哈哈哈😅(不知道有没有大佬破解),真的是不想花费时间在sql解析上,我的sql解析的场景并不多,觉得自己动手时间成本太高,两难 目前想着没有好的办法就绕过不支持的语法特殊处理好了

你选的是最贵的那种协议吧,我记得如果你选single developer的话,一个数据库1w不到

HarryReidx commented 2 years ago

确实是这样,generalSqlParser贵的离谱没勾一个数据库的支持就多加将近9w,他有90天试用,跑了一下确实是很强,然鹅没钱,当然有钱也不会买哈哈哈哈😅(不知道有没有大佬破解),真的是不想花费时间在sql解析上,我的sql解析的场景并不多,觉得自己动手时间成本太高,两难 目前想着没有好的办法就绕过不支持的语法特殊处理好了

你选的是最贵的那种协议吧,我记得如果你选single developer的话,一个数据库1w不到

是没错 single便宜,但是我们的应用(产品)得部署多个项目上,项目组决定并不想因为一个解析器有额外支出

capitalR commented 2 years ago

确实是这样,generalSqlParser贵的离谱没勾一个数据库的支持就多加将近9w,他有90天试用,跑了一下确实是很强,然鹅没钱,当然有钱也不会买哈哈哈哈😅(不知道有没有大佬破解),真的是不想花费时间在sql解析上,我的sql解析的场景并不多,觉得自己动手时间成本太高,两难 目前想着没有好的办法就绕过不支持的语法特殊处理好了

你选的是最贵的那种协议吧,我记得如果你选single developer的话,一个数据库1w不到

是没错 single便宜,但是我们的应用(产品)得部署多个项目上,项目组决定并不想因为一个解析器有额外支出

那老哥你们现在准备走什么技术路线呢?我们项目对sql parser的要求还挺高,算是项目的核心了,也是很纠结怎么搞.你要gsqlparser的资源?留个邮箱吧.我发给你.

HarryReidx commented 2 years ago

那真是万分感激,我们目前对一些基础的sql解析都是用druid去做,事实上我们有个类似于plsql的功能,不同的是我们耦合进去了业务参数,用户的sql脚本可以保存并用于跑批预警出报告等,解析sql目前主要是为了鉴权,我们有对数据表级别的权限控制,另外业务库和数仓是分开的,所以还需要解析出表去替换真实表名再执行等等吧。 附上邮箱:activehx@163.com 再次感谢老哥