diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java index 2801623e0..9c58995f6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java @@ -331,12 +331,6 @@ public class QueryServiceImpl implements QueryService { QueryReq queryReq = new QueryReq(); queryReq.setQueryFilters(new QueryFilters()); queryReq.setUser(user); - //correct s2sql - semanticCorrectors.stream().forEach(correction -> { - correction.correct(queryReq, semanticQuery.getParseInfo()); - }); - //update parserInfo - parseInfoService.updateParseInfo(semanticQuery.getParseInfo()); } QueryResult queryResult = semanticQuery.execute(user); queryResult.setChatContext(semanticQuery.getParseInfo()); diff --git a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelper.java b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelper.java index 49501b2b7..03aade580 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelper.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/jsqlparser/SqlParserReplaceHelper.java @@ -5,26 +5,28 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.expression.Alias; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.conditional.OrExpression; -import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; -import net.sf.jsqlparser.expression.operators.relational.GreaterThan; -import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals; -import net.sf.jsqlparser.expression.operators.relational.MinorThan; -import net.sf.jsqlparser.expression.operators.relational.EqualsTo; -import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo; import net.sf.jsqlparser.expression.operators.relational.ComparisonOperator; +import net.sf.jsqlparser.expression.operators.relational.EqualsTo; +import net.sf.jsqlparser.expression.operators.relational.GreaterThan; +import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; +import net.sf.jsqlparser.expression.operators.relational.MinorThan; +import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals; +import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo; import net.sf.jsqlparser.statement.select.GroupByElement; +import net.sf.jsqlparser.statement.select.Join; import net.sf.jsqlparser.statement.select.OrderByElement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; -import net.sf.jsqlparser.statement.select.SubSelect; -import net.sf.jsqlparser.statement.select.Join; import net.sf.jsqlparser.statement.select.SelectBody; +import net.sf.jsqlparser.statement.select.SelectExpressionItem; import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectVisitorAdapter; +import net.sf.jsqlparser.statement.select.SubSelect; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -102,6 +104,7 @@ public class SqlParserReplaceHelper { //2. replace select fields for (SelectItem selectItem : plainSelect.getSelectItems()) { selectItem.accept(visitor); + replaceAsName(fieldNameMap, selectItem); } //3. replace oder by fields @@ -134,6 +137,21 @@ public class SqlParserReplaceHelper { } } + private static void replaceAsName(Map fieldNameMap, SelectItem selectItem) { + if (selectItem instanceof SelectExpressionItem) { + SelectExpressionItem expressionItem = (SelectExpressionItem) selectItem; + Alias alias = expressionItem.getAlias(); + if (Objects.isNull(alias)) { + return; + } + String aliasName = alias.getName(); + String replaceFieldName = fieldNameMap.get(aliasName); + if (StringUtils.isNotBlank(replaceFieldName)) { + alias.setName(replaceFieldName); + } + } + } + public static String replaceFunction(String sql, Map functionMap) { Select selectStatement = SqlParserSelectHelper.getSelect(sql); SelectBody selectBody = selectStatement.getSelectBody(); @@ -236,7 +254,7 @@ public class SqlParserReplaceHelper { } private static void replaceOrderByFunction(Map functionMap, - List orderByElementList) { + List orderByElementList) { if (Objects.isNull(orderByElementList)) { return; } diff --git a/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/query/request/QueryStructReq.java b/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/query/request/QueryStructReq.java index 2b286dd73..71047e1d9 100644 --- a/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/query/request/QueryStructReq.java +++ b/semantic/api/src/main/java/com/tencent/supersonic/semantic/api/query/request/QueryStructReq.java @@ -21,6 +21,7 @@ import java.util.stream.Collectors; import lombok.Data; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Alias; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; import net.sf.jsqlparser.expression.LongValue; @@ -200,8 +201,9 @@ public class QueryStructReq { List aggregators = queryStructReq.getAggregators(); if (!CollectionUtils.isEmpty(aggregators)) { for (Aggregator aggregator : aggregators) { + String columnName = aggregator.getColumn(); if (queryStructReq.getNativeQuery()) { - selectItems.add(new SelectExpressionItem(new Column(aggregator.getColumn()))); + selectItems.add(new SelectExpressionItem(new Column(columnName))); } else { Function sumFunction = new Function(); AggOperatorEnum func = aggregator.getFunc(); @@ -213,8 +215,10 @@ public class QueryStructReq { sumFunction.setName("count"); sumFunction.setDistinct(true); } - sumFunction.setParameters(new ExpressionList(new Column(aggregator.getColumn()))); - selectItems.add(new SelectExpressionItem(sumFunction)); + sumFunction.setParameters(new ExpressionList(new Column(columnName))); + SelectExpressionItem selectExpressionItem = new SelectExpressionItem(sumFunction); + selectExpressionItem.setAlias(new Alias(columnName)); + selectItems.add(selectExpressionItem); } } }