(improvement)(chat) remove space before function in semantic parser (#175)

This commit is contained in:
lexluo09
2023-10-08 18:24:18 +08:00
committed by GitHub
parent e3b3e8861d
commit d9bab899fe
2 changed files with 11 additions and 16 deletions

View File

@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -123,7 +122,7 @@ public class CalculateAggConverter implements SemanticConverter {
@Override @Override
public void converter(Catalog catalog, QueryStructReq queryStructCmd, ParseSqlReq sqlCommend, public void converter(Catalog catalog, QueryStructReq queryStructCmd, ParseSqlReq sqlCommend,
MetricReq metricCommand) throws Exception { MetricReq metricCommand) throws Exception {
DatabaseResp databaseResp = catalog.getDatabaseByModelId(queryStructCmd.getModelId()); DatabaseResp databaseResp = catalog.getDatabaseByModelId(queryStructCmd.getModelId());
ParseSqlReq parseSqlReq = generateSqlCommend(queryStructCmd, ParseSqlReq parseSqlReq = generateSqlCommend(queryStructCmd,
EngineTypeEnum.valueOf(databaseResp.getType().toUpperCase()), databaseResp.getVersion()); EngineTypeEnum.valueOf(databaseResp.getType().toUpperCase()), databaseResp.getVersion());
@@ -150,7 +149,7 @@ public class CalculateAggConverter implements SemanticConverter {
} }
public ParseSqlReq generateRatioSqlCommand(QueryStructReq queryStructCmd, EngineTypeEnum engineTypeEnum, public ParseSqlReq generateRatioSqlCommand(QueryStructReq queryStructCmd, EngineTypeEnum engineTypeEnum,
String version) String version)
throws Exception { throws Exception {
check(queryStructCmd); check(queryStructCmd);
ParseSqlReq sqlCommand = new ParseSqlReq(); ParseSqlReq sqlCommand = new ParseSqlReq();
@@ -384,7 +383,7 @@ public class CalculateAggConverter implements SemanticConverter {
} }
private static String getAllJoinSelect(QueryStructReq queryStructCmd, String alias) { private String getAllJoinSelect(QueryStructReq queryStructCmd, String alias) {
String aggStr = queryStructCmd.getAggregators().stream() String aggStr = queryStructCmd.getAggregators().stream()
.map(f -> getSelectField(f, alias) + " as " + getSelectField(f, "") .map(f -> getSelectField(f, alias) + " as " + getSelectField(f, "")
+ "_roll") + "_roll")
@@ -418,23 +417,18 @@ public class CalculateAggConverter implements SemanticConverter {
} }
private static String getAllSelect(QueryStructReq queryStructCmd, String alias) { private String getAllSelect(QueryStructReq queryStructCmd, String alias) {
String aggStr = queryStructCmd.getAggregators().stream().map(f -> getSelectField(f, alias)) String aggStr = queryStructCmd.getAggregators().stream().map(f -> getSelectField(f, alias))
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
return CollectionUtils.isEmpty(queryStructCmd.getGroups()) ? aggStr return CollectionUtils.isEmpty(queryStructCmd.getGroups()) ? aggStr
: alias + String.join("," + alias, queryStructCmd.getGroups()) + "," + aggStr; : alias + String.join("," + alias, queryStructCmd.getGroups()) + "," + aggStr;
} }
private static String getSelectField(final Aggregator agg, String alias) { private String getSelectField(final Aggregator agg, String alias) {
if (agg.getFunc().equals(AggOperatorEnum.RATIO_OVER) || agg.getFunc().equals(AggOperatorEnum.RATIO_ROLL)) { if (agg.getFunc().equals(AggOperatorEnum.RATIO_OVER) || agg.getFunc().equals(AggOperatorEnum.RATIO_ROLL)) {
return alias + agg.getColumn(); return alias + agg.getColumn();
} }
if (CollectionUtils.isEmpty(agg.getArgs())) { return sqlGenerateUtils.getSelectField(agg);
return agg.getFunc() + "( " + alias + agg.getColumn() + " ) AS " + agg.getColumn() + " ";
}
return agg.getFunc() + "( " + agg.getArgs().stream().map(arg ->
arg.equals(agg.getColumn()) ? arg : (StringUtils.isNumeric(arg) ? arg : ("'" + arg + "'"))
).collect(Collectors.joining(",")) + " ) AS " + agg.getColumn() + " ";
} }
private String getGroupBy(QueryStructReq queryStructCmd) { private String getGroupBy(QueryStructReq queryStructCmd) {

View File

@@ -1,14 +1,15 @@
package com.tencent.supersonic.semantic.query.utils; package com.tencent.supersonic.semantic.query.utils;
import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE;
import com.tencent.supersonic.common.pojo.Aggregator;
import com.tencent.supersonic.semantic.api.model.enums.TimeDimensionEnum; import com.tencent.supersonic.semantic.api.model.enums.TimeDimensionEnum;
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq; import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
import com.tencent.supersonic.common.pojo.Aggregator;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE;
@Component @Component
@Slf4j @Slf4j
@@ -54,9 +55,9 @@ public class SqlGenerateUtils {
public String getSelectField(final Aggregator agg) { public String getSelectField(final Aggregator agg) {
if (CollectionUtils.isEmpty(agg.getArgs())) { if (CollectionUtils.isEmpty(agg.getArgs())) {
return agg.getFunc() + " ( " + agg.getColumn() + " ) AS " + agg.getColumn() + " "; return agg.getFunc() + "( " + agg.getColumn() + " ) AS " + agg.getColumn() + " ";
} }
return agg.getFunc() + " ( " + agg.getArgs().stream().map(arg -> return agg.getFunc() + "( " + agg.getArgs().stream().map(arg ->
arg.equals(agg.getColumn()) ? arg : (StringUtils.isNumeric(arg) ? arg : ("'" + arg + "'")) arg.equals(agg.getColumn()) ? arg : (StringUtils.isNumeric(arg) ? arg : ("'" + arg + "'"))
).collect(Collectors.joining(",")) + " ) AS " + agg.getColumn() + " "; ).collect(Collectors.joining(",")) + " ) AS " + agg.getColumn() + " ";
} }