(improvement)(chat) Modify getFilterExpression to support the datediff function. (#576)

This commit is contained in:
lexluo09
2023-12-27 21:20:05 +08:00
committed by GitHub
parent 6c8ebdfe1a
commit f788249b1a
3 changed files with 15 additions and 1 deletions

View File

@@ -144,7 +144,10 @@ public class FieldAndValueAcquireVisitor extends ExpressionVisitorAdapter {
private Column getColumn(Function leftExpressionFunction) { private Column getColumn(Function leftExpressionFunction) {
List<Expression> leftExpressions = leftExpressionFunction.getParameters().getExpressions(); List<Expression> leftExpressions = leftExpressionFunction.getParameters().getExpressions();
if (CollectionUtils.isEmpty(leftExpressions) || leftExpressions.size() < 1) { if (CollectionUtils.isEmpty(leftExpressions)) {
return null;
}
if (!(leftExpressions.get(0) instanceof Column)) {
return null; return null;
} }
return (Column) leftExpressions.get(0); return (Column) leftExpressions.get(0);

View File

@@ -34,6 +34,7 @@ import net.sf.jsqlparser.statement.select.SelectItem;
import net.sf.jsqlparser.statement.select.SelectVisitorAdapter; import net.sf.jsqlparser.statement.select.SelectVisitorAdapter;
import net.sf.jsqlparser.statement.select.SubSelect; import net.sf.jsqlparser.statement.select.SubSelect;
import net.sf.jsqlparser.statement.select.SetOperationList; import net.sf.jsqlparser.statement.select.SetOperationList;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -59,6 +60,9 @@ public class SqlParserSelectHelper {
having.accept(new FieldAndValueAcquireVisitor(result)); having.accept(new FieldAndValueAcquireVisitor(result));
} }
} }
result = result.stream()
.filter(fieldExpression -> StringUtils.isNotBlank(fieldExpression.getFieldName()))
.collect(Collectors.toSet());
return new ArrayList<>(result); return new ArrayList<>(result);
} }

View File

@@ -118,6 +118,13 @@ class SqlParserSelectHelperTest {
+ "WHERE MONTH(数据日期) = 9) FROM 营销月模型 WHERE 国家中文名 = '肯尼亚' AND MONTH(数据日期) = 9"); + "WHERE MONTH(数据日期) = 9) FROM 营销月模型 WHERE 国家中文名 = '肯尼亚' AND MONTH(数据日期) = 9");
System.out.println(fieldExpression); System.out.println(fieldExpression);
fieldExpression = SqlParserSelectHelper.getFilterExpression(
"select 等级, count(*) from 歌手 where 别名 = '港台' or 活跃区域 = '港台' and"
+ " datediff('day', 数据日期, '2023-12-24') <= 0 group by 等级");
System.out.println(fieldExpression);
} }
@Test @Test