[improvement][chat]Refactor code logic in rule-based parsing.

This commit is contained in:
Jun Zhang
2024-11-09 15:00:08 +08:00
committed by jerryjzhang
parent d4a9d5a7e6
commit e0e167fd40
18 changed files with 154 additions and 233 deletions

View File

@@ -24,6 +24,10 @@ public class DataSetSchema implements Serializable {
private Set<SchemaElement> terms = new HashSet<>();
private QueryConfig queryConfig;
public Long getDataSetId() {
return dataSet.getDataSetId();
}
public SchemaElement getElement(SchemaElementType elementType, long elementID) {
Optional<SchemaElement> element = Optional.empty();

View File

@@ -119,22 +119,26 @@ public class SemanticSchema implements Serializable {
return getElementsById(dataSetId, dataSets).orElse(null);
}
public QueryConfig getQueryConfig(Long dataSetId) {
DataSetSchema first = dataSetSchemaList.stream().filter(
dataSetSchema -> dataSetId.equals(dataSetSchema.getDataSet().getDataSetId()))
.findFirst().orElse(null);
if (Objects.nonNull(first)) {
return first.getQueryConfig();
}
return null;
}
public List<SchemaElement> getDataSets() {
List<SchemaElement> dataSets = new ArrayList<>();
dataSetSchemaList.forEach(d -> dataSets.add(d.getDataSet()));
return dataSets;
}
public DataSetSchema getDataSetSchema(Long dataSetId) {
return dataSetSchemaList.stream()
.filter(dataSetSchema -> dataSetId.equals(dataSetSchema.getDataSetId())).findFirst()
.orElse(null);
}
public QueryConfig getQueryConfig(Long dataSetId) {
DataSetSchema dataSetSchema = getDataSetSchema(dataSetId);
if (Objects.nonNull(dataSetSchema)) {
return dataSetSchema.getQueryConfig();
}
return null;
}
public Map<Long, DataSetSchema> getDataSetSchemaMap() {
if (CollectionUtils.isEmpty(dataSetSchemaList)) {
return new HashMap<>();

View File

@@ -188,36 +188,31 @@ public class QueryStructReq extends SemanticQueryReq {
List<Aggregator> aggregators = queryStructReq.getAggregators();
if (!CollectionUtils.isEmpty(aggregators)) {
for (Aggregator aggregator : aggregators) {
selectItems.add(buildAggregatorSelectItem(aggregator, queryStructReq));
selectItems.add(buildAggregatorSelectItem(aggregator));
}
}
return selectItems;
}
private SelectItem buildAggregatorSelectItem(Aggregator aggregator,
QueryStructReq queryStructReq) {
private SelectItem buildAggregatorSelectItem(Aggregator aggregator) {
String columnName = aggregator.getColumn();
if (queryStructReq.getQueryType().isNativeAggQuery()) {
return new SelectItem(new Column(columnName));
} else {
Function function = new Function();
AggOperatorEnum func = aggregator.getFunc();
if (AggOperatorEnum.UNKNOWN.equals(func)) {
func = AggOperatorEnum.SUM;
}
function.setName(func.getOperator());
if (AggOperatorEnum.COUNT_DISTINCT.equals(func)) {
function.setName("count");
function.setDistinct(true);
}
function.setParameters(new ExpressionList(new Column(columnName)));
SelectItem selectExpressionItem = new SelectItem(function);
String alias = StringUtils.isNotBlank(aggregator.getAlias()) ? aggregator.getAlias()
: columnName;
selectExpressionItem.setAlias(new Alias(alias));
return selectExpressionItem;
Function function = new Function();
AggOperatorEnum func = aggregator.getFunc();
if (AggOperatorEnum.UNKNOWN.equals(func)) {
func = AggOperatorEnum.SUM;
}
function.setName(func.getOperator());
if (AggOperatorEnum.COUNT_DISTINCT.equals(func)) {
function.setName("count");
function.setDistinct(true);
}
function.setParameters(new ExpressionList(new Column(columnName)));
SelectItem selectExpressionItem = new SelectItem(function);
String alias =
StringUtils.isNotBlank(aggregator.getAlias()) ? aggregator.getAlias() : columnName;
selectExpressionItem.setAlias(new Alias(alias));
return selectExpressionItem;
}
private List<OrderByElement> buildOrderByElements(QueryStructReq queryStructReq) {
@@ -241,7 +236,7 @@ public class QueryStructReq extends SemanticQueryReq {
private GroupByElement buildGroupByElement(QueryStructReq queryStructReq) {
List<String> groups = queryStructReq.getGroups();
if (!CollectionUtils.isEmpty(groups) && !queryStructReq.getQueryType().isNativeAggQuery()) {
if (!CollectionUtils.isEmpty(groups) && !queryStructReq.getAggregators().isEmpty()) {
GroupByElement groupByElement = new GroupByElement();
for (String group : groups) {
groupByElement.addGroupByExpression(new Column(group));