mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-15 06:27:21 +00:00
[improvement][chat]Refactor code logic in rule-based parsing.
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user