当前使用版本(必填,否则不予处理)

[v3.5.2] 2022.06.01

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用多租户插件,他会通过拦截sql进行sql解析,然后重新改造sql,在对sql解析的时候出问题了。由于使用了jsqlparser组件,内置是4.4版本的。在执行Statement statement = CCJSqlParserUtil.parse(sql);将sql解析成statement的时候,如果sql是关联插叙的情况,并且给表起别名是rr,则会出现解析sql失败的时候。这个bug是4.4版本的jsqlparser导致的。换成4.5版本则没有此问题。但是4.5的升级已经不兼容低版本了,废弃了某系类,合并到一个里面。导致在执行租户拦截的时候,出现强制转换的错误问题。

建议:升级4.5版本,并针对这个版本进行代码改造。兼容4.5版本的jsqlparser

重现步骤(如果有就写完整)

select rr.* from a a inner join role rr on rr.id = a.role_id 例如此sql则会出现解析sql的错误 因为里面出现表的别名rr,就会出现错误。

报错信息

Exception in thread "main" net.sf.jsqlparser.JSQLParserException: Encountered unexpected token: "rr"

Comment From: huayanYu

建议提交PR

Comment From: b1251003701

PR是pull request吗

Comment From: huayanYu

en

Comment From: miemieYaho

你可以自己手动降级到4.3

Comment From: b1251003701

4.3和4.4是可以兼容的是吧。