(improvement)(chat) suppoprt show having filter and sum(metirc) filter (#176)

This commit is contained in:
lexluo09
2023-10-08 21:46:49 +08:00
committed by GitHub
parent 4bbd2c7446
commit 8487966888
5 changed files with 38 additions and 16 deletions

View File

@@ -91,27 +91,39 @@ public class FieldAndValueAcquireVisitor extends ExpressionVisitorAdapter {
}
if (leftExpression instanceof Function) {
Function leftExpressionFunction = (Function) leftExpression;
String dateFunction = leftExpressionFunction.getName().toUpperCase();
Column field = getColumn(leftExpressionFunction);
if (Objects.isNull(field)) {
return filterExpression;
}
String functionName = leftExpressionFunction.getName().toUpperCase();
filterExpression.setFieldName(field.getColumnName());
filterExpression.setFunction(functionName);
filterExpression.setOperator(expr.getStringExpression());
//deal with DAY/WEEK function
List<DatePeriodEnum> collect = Arrays.stream(DatePeriodEnum.values()).collect(Collectors.toList());
DatePeriodEnum periodEnum = DatePeriodEnum.get(dateFunction);
DatePeriodEnum periodEnum = DatePeriodEnum.get(functionName);
if (Objects.nonNull(periodEnum) && collect.contains(periodEnum)) {
List<Expression> leftExpressions = leftExpressionFunction.getParameters().getExpressions();
if (CollectionUtils.isEmpty(leftExpressions) || leftExpressions.size() < 1) {
return filterExpression;
}
Column field = (Column) leftExpressions.get(0);
filterExpression.setFieldName(field.getColumnName());
filterExpression.setFieldValue(getFieldValue(rightExpression) + periodEnum.getChName());
filterExpression.setOperator(expr.getStringExpression());
return filterExpression;
} else {
//deal with aggregate function
filterExpression.setFieldValue(getFieldValue(rightExpression));
return filterExpression;
}
}
filterExpression.setFieldValue(getFieldValue(rightExpression));
filterExpression.setOperator(expr.getStringExpression());
return filterExpression;
}
private Column getColumn(Function leftExpressionFunction) {
List<Expression> leftExpressions = leftExpressionFunction.getParameters().getExpressions();
if (CollectionUtils.isEmpty(leftExpressions) || leftExpressions.size() < 1) {
return null;
}
return (Column) leftExpressions.get(0);
}
private Object getFieldValue(Expression rightExpression) {
if (rightExpression instanceof StringValue) {
StringValue stringValue = (StringValue) rightExpression;

View File

@@ -11,4 +11,6 @@ public class FilterExpression {
private Object fieldValue;
private String function;
}

View File

@@ -38,6 +38,10 @@ public class SqlParserSelectHelper {
if (Objects.nonNull(where)) {
where.accept(new FieldAndValueAcquireVisitor(result));
}
Expression having = plainSelect.getHaving();
if (Objects.nonNull(having)) {
having.accept(new FieldAndValueAcquireVisitor(result));
}
return new ArrayList<>(result);
}