(improvement)(chat) two display modes are supported in dsl: group by and details (#74)

This commit is contained in:
lexluo09
2023-09-12 13:21:23 +08:00
committed by GitHub
parent 8aedfbb6a0
commit 7fce9bacc2
4 changed files with 86 additions and 63 deletions

View File

@@ -8,7 +8,6 @@ import java.util.Set;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
@@ -46,27 +45,17 @@ public class SqlParserSelectHelper {
return new ArrayList<>();
}
Set<String> result = new HashSet<>();
getWhereFields(plainSelect, result);
return new ArrayList<>(result);
}
private static void getWhereFields(PlainSelect plainSelect, Set<String> result) {
Expression where = plainSelect.getWhere();
if (Objects.nonNull(where)) {
where.accept(new FieldAcquireVisitor(result));
}
return new ArrayList<>(result);
}
public static List<String> getOrderByFields(String sql) {
PlainSelect plainSelect = getPlainSelect(sql);
if (Objects.isNull(plainSelect)) {
return new ArrayList<>();
}
Set<String> result = new HashSet<>();
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
if (!CollectionUtils.isEmpty(orderByElements)) {
for (OrderByElement orderByElement : orderByElements) {
orderByElement.accept(new OrderByAcquireVisitor(result));
}
}
return new ArrayList<>(result);
}
public static List<String> getSelectFields(String sql) {
PlainSelect plainSelect = getPlainSelect(sql);
@@ -122,6 +111,45 @@ public class SqlParserSelectHelper {
}
Set<String> result = getSelectFields(plainSelect);
getGroupByFields(plainSelect, result);
getOrderByFields(plainSelect, result);
getWhereFields(plainSelect, result);
return new ArrayList<>(result);
}
public static List<String> getOrderByFields(String sql) {
PlainSelect plainSelect = getPlainSelect(sql);
if (Objects.isNull(plainSelect)) {
return new ArrayList<>();
}
Set<String> result = new HashSet<>();
getOrderByFields(plainSelect, result);
return new ArrayList<>(result);
}
private static void getOrderByFields(PlainSelect plainSelect, Set<String> result) {
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
if (!CollectionUtils.isEmpty(orderByElements)) {
for (OrderByElement orderByElement : orderByElements) {
orderByElement.accept(new OrderByAcquireVisitor(result));
}
}
}
public static List<String> getGroupByFields(String sql) {
PlainSelect plainSelect = getPlainSelect(sql);
if (Objects.isNull(plainSelect)) {
return new ArrayList<>();
}
HashSet<String> result = new HashSet<>();
getGroupByFields(plainSelect, result);
return new ArrayList<>(result);
}
private static void getGroupByFields(PlainSelect plainSelect, Set<String> result) {
GroupByElement groupBy = plainSelect.getGroupBy();
if (groupBy != null) {
List<Expression> groupByExpressions = groupBy.getGroupByExpressions();
@@ -132,24 +160,6 @@ public class SqlParserSelectHelper {
}
}
}
List<OrderByElement> orderByElements = plainSelect.getOrderByElements();
if (!CollectionUtils.isEmpty(orderByElements)) {
for (OrderByElement orderByElement : orderByElements) {
orderByElement.accept(new OrderByAcquireVisitor(result));
}
}
Expression where = plainSelect.getWhere();
if (where != null) {
where.accept(new ExpressionVisitorAdapter() {
@Override
public void visit(Column column) {
result.add(column.getColumnName());
}
});
}
return new ArrayList<>(result);
}
public static String getTableName(String sql) {
@@ -190,6 +200,5 @@ public class SqlParserSelectHelper {
}
return false;
}
}