当前使用版本(必填,否则不予处理)
3.5.3.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
从3.5.2升级到3.5.3.1后引发。
@Test
public void orderByField() {
QueryWrapper<SomeOrder> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("field(status,'SUCCESS','FAILED','CLOSED')");
queryWrapper.last("limit 10");
System.out.println(queryWrapper.getCustomSqlSegment());
}
output: ORDER BY field(status,SUCCESS,FAILED,CLOSED) ASC limit 10 expect: ORDER BY field(status,'SUCCESS','FAILED','CLOSED') ASC limit 10
报错信息
执行查询时,最终将应该为字符串的值识别为列名而报错
Comment From: timnick-snow
原因时 StringUtils.sqlInjectionReplaceBlank 中去除了单引号。
REPLACE_BLANK 正则在某次提交中变化了导致的
Comment From: Bin1993
根本原因是SqlInjectionUtils错误地判断了order by的字段里有/*注释字符,我修改了正则表达式,已提PR
Comment From: Bin1993
@qmdx 苗子哥看下