重大改变

  1. 自4.9开始连续的换行会认为是结束语句会抛出Encountered unexpected token。 如果你项目中含有连续换行语句,可以按如下方法进行统一处理连续换行语句。 ```java static { JsqlParserGlobal.setParserMultiFunc((sql)-> { String formatSql = CCJSqlParserUtil.sanitizeSingleSql(sql); return CCJSqlParserUtil.parseStatements(formatSql, JsqlParserGlobal.getExecutorService(), null); }); JsqlParserGlobal.setParserSingleFunc((sql)-> { String formatSql = CCJSqlParserUtil.sanitizeSingleSql(sql); return CCJSqlParserUtil.parse(formatSql, JsqlParserGlobal.getExecutorService(), null); }); }

// 如果jsqlParser低于5.0,请把如下方法复制到自己工程里,代码来源JsqlParser5.0版本。 public static String sanitizeSingleSql(String sqlStr) { Pattern SQL_DELIMITER_SPLIT = Pattern.compile("((?:'[^']+'|[^\n])+)"); StringBuilder builder = new StringBuilder(); Matcher matcher = SQL_DELIMITER_SPLIT.matcher(sqlStr); while(matcher.find()) { for(int i = 1; i <= matcher.groupCount(); ++i) { if (!matcher.group(i).isEmpty()) { builder.append("\n").append(matcher.group(i)); } } } return builder.toString(); } ```

  1. 新版本增加关键字导致解析出错。

请检查对应的表名或者字段(含别名)是否在 CCJSqlParserConstants#tokenImage 之中,如果在里面请将表名或者字段进行数据库字段转义,例如Mysql下表名可以增加 `sample` 进行处理,请规避好相关关键字。