Skip to content

Commit

Permalink
(feature)(chat) optimized code in GroupByCorrector (#226)
Browse files Browse the repository at this point in the history
  • Loading branch information
lexluo09 committed Oct 16, 2023
1 parent f90ab22 commit 86bf40c
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,22 @@ public class GroupByCorrector extends BaseSemanticCorrector {
public void correct(SemanticCorrectInfo semanticCorrectInfo) {

super.correct(semanticCorrectInfo);
Long modelId = semanticCorrectInfo.getParseInfo().getModel().getModel();
// if select not exit metric not add aggregate
List<String> selectFields = SqlParserSelectHelper.getSelectFields(semanticCorrectInfo.getSql());

Set<String> metrics = getMetricElements(modelId).stream()
.map(schemaElement -> schemaElement.getName())
.collect(Collectors.toSet());
addGroupByFields(semanticCorrectInfo);

if (!CollectionUtils.isEmpty(selectFields)
&& !CollectionUtils.isEmpty(metrics)
&& selectFields.stream().anyMatch(s -> metrics.contains(s))) {
//add aggregate to all metric
addAggregateToMetric(semanticCorrectInfo);
}
addAggregate(semanticCorrectInfo);
}

private void addGroupByFields(SemanticCorrectInfo semanticCorrectInfo) {
Long modelId = semanticCorrectInfo.getParseInfo().getModel().getModel();

//add dimension group by
String sql = semanticCorrectInfo.getSql();
SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema();

Set<String> dimensions = semanticSchema.getDimensions(modelId).stream()
.map(schemaElement -> schemaElement.getName()).collect(Collectors.toSet());
dimensions.add(DateUtils.DATE_FIELD);
selectFields = SqlParserSelectHelper.getSelectFields(sql);
List<String> selectFields = SqlParserSelectHelper.getSelectFields(sql);

if (CollectionUtils.isEmpty(selectFields) || CollectionUtils.isEmpty(dimensions)) {
return;
Expand All @@ -58,7 +51,13 @@ public void correct(SemanticCorrectInfo semanticCorrectInfo) {
})
.collect(Collectors.toSet());
semanticCorrectInfo.setSql(SqlParserAddHelper.addGroupBy(sql, groupByFields));
}

private void addAggregate(SemanticCorrectInfo semanticCorrectInfo) {
List<String> sqlGroupByFields = SqlParserSelectHelper.getGroupByFields(semanticCorrectInfo.getSql());
if (CollectionUtils.isEmpty(sqlGroupByFields)) {
return;
}
addAggregateToMetric(semanticCorrectInfo);
}
}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
<xk.time.version>3.2.4</xk.time.version>
<mockito-inline.version>4.5.1</mockito-inline.version>
<jsqlparser.version>4.5</jsqlparser.version>
<revision>0.7.5</revision>
<revision>0.7.5-SNAPSHOT</revision>
<!-- Do not bump spotless plugin version since 2.30.0 is the latest version supports Java 8-->
<maven.plugin.spotless.version>2.30.0</maven.plugin.spotless.version>
<spotless.python.includes></spotless.python.includes>
Expand Down

0 comments on commit 86bf40c

Please sign in to comment.