Again, you can call `CCJSqlParserUtil.sanitizeSingleSql( sqlStr)` to clean your statements properly.

Details see here: https://github.com/JSQLParser/JSqlParser/issues/1988#issuecomment-2063941501

Originally posted by @manticore-projects in https://github.com/baomidou/mybatis-plus/issues/5345#issuecomment-2119707344

Comment From: lujiamingzZ

为何不是官方在BoundSql的统一生成处使用CCJSqlParserUtil.sanitizeSingleSql来处理呢?直接从源头处理掉是不是会更好;像DataPermissionInterceptor中beforeQuery、beforePrepare的方法中会调用parserSingle和parserMulti方法,这里面会走校验,那在调用之前先CCJSqlParserUtil.sanitizeSingleSql处理一下或者在更早的地方处理应该更好一些吧? @nieqiurong

Comment From: nieqiurong

统计3.5.3.2后面版本框架提供的方法出现情况.

Comment From: rowstop

Caused by: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: SELECT
xxxx
         WHERE deleted=0




                AND coupon.shop_id != 0 
        ORDER BY coupon.create_time DESC
        at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:39)
        at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:51)
        at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.beforeQuery(TenantLineInnerInterceptor.java:70)
        at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78)
        at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
        at jdk.proxy2/jdk.proxy2.$Proxy431.query(Unknown Source)
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)
        ... 203 common frames omitted
Caused by: java.util.concurrent.ExecutionException: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "AND" "AND"
    at line 30, column 17.

Was expecting:

    <EOF>

        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:205)
        at net.sf.jsqlparser.parser.CCJSqlParserUtil.parseStatement(CCJSqlParserUtil.java:343)
        at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:123)
        at com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal.lambda$static$1(JsqlParserGlobal.java:58)
        at com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal.parse(JsqlParserGlobal.java:68)
        at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:48)
        ... 208 common frames omitted
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "AND" "AND"
    at line 30, column 17.

Was expecting:

    <EOF>

        at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:39603)
        at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:39427)
        at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:317)
        at net.sf.jsqlparser.parser.CCJSqlParserUtil$1.call(CCJSqlParserUtil.java:339)
        at net.sf.jsqlparser.parser.CCJSqlParserUtil$1.call(CCJSqlParserUtil.java:336)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        ... 1 common frames omitted

Comment From: laihaibing

jsqlparser4.9版本 没有找到这个方法 :CCJSqlParserUtil.sanitizeSingleSql

Comment From: oddity123

在使用DataPermissionInterceptor后就出现了这个问题。