(improvement)(headless&chat)Execute against SemanticLayerService instead of ChatQueryService in chat-server and rename several classes by the way.

This commit is contained in:
jerryjzhang
2024-07-06 23:32:59 +08:00
parent 6db6aaf98d
commit e0e77a3b64
26 changed files with 185 additions and 176 deletions

View File

@@ -4,6 +4,7 @@ public enum WorkflowState {
MAPPING,
PARSING,
CORRECTING,
TRANSLATING,
PROCESSING,
FINISHED
}

View File

@@ -1,6 +1,9 @@
package com.tencent.supersonic.headless.api.pojo.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.commons.collections.CollectionUtils;
@@ -8,8 +11,13 @@ import java.util.Objects;
@Data
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class QuerySqlReq extends SemanticQueryReq {
private String sql;
private Integer limit = 1000;
@Override

View File

@@ -155,7 +155,7 @@ public class QueryStructReq extends SemanticQueryReq {
String sql = null;
try {
sql = buildSql(this, isBizName);
} catch (Exception e) {
} catch (JSQLParserException e) {
log.error("buildSql error", e);
}
@@ -164,7 +164,7 @@ public class QueryStructReq extends SemanticQueryReq {
result.setDataSetId(this.getDataSetId());
result.setModelIds(this.getModelIdSet());
result.setParams(new ArrayList<>());
result.setSqlInfo(this.getSqlInfo());
result.getSqlInfo().setCorrectS2SQL(sql);
return result;
}

View File

@@ -16,7 +16,7 @@ import java.util.List;
import java.util.Set;
@Data
public class QueryReq {
public class QueryTextReq {
private String queryText;
private Integer chatId;
private Set<Long> dataSetIds = Sets.newHashSet();

View File

@@ -12,7 +12,7 @@ import lombok.ToString;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ExplainSqlReq<T> {
public class TranslateSqlReq<T> {
private QueryMethod queryTypeEnum;

View File

@@ -13,7 +13,7 @@ import java.io.Serializable;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ExplainResp implements Serializable {
public class TranslateResp implements Serializable {
private String sql;

View File

@@ -1,6 +1,6 @@
package com.tencent.supersonic.headless.chat.parser.llm;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.chat.query.llm.s2sql.LLMReq;
import com.tencent.supersonic.headless.chat.query.llm.s2sql.LLMResp;
import lombok.AllArgsConstructor;
@@ -22,7 +22,7 @@ public class ParseResult {
private LLMResp llmResp;
private QueryReq request;
private QueryTextReq request;
private List<LLMReq.ElementValue> linkingValues;
}

View File

@@ -1,8 +1,7 @@
package com.tencent.supersonic.headless.server.facade.rest;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.headless.api.pojo.request.ExecuteQueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.api.pojo.response.MapResp;
import com.tencent.supersonic.headless.server.facade.service.ChatQueryService;
import com.tencent.supersonic.headless.server.facade.service.RetrieveService;
@@ -27,35 +26,27 @@ public class ChatQueryApiController {
private RetrieveService retrieveService;
@PostMapping("/chat/search")
public Object search(@RequestBody QueryReq queryReq,
public Object search(@RequestBody QueryTextReq queryTextReq,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
queryReq.setUser(UserHolder.findUser(request, response));
return retrieveService.retrieve(queryReq);
queryTextReq.setUser(UserHolder.findUser(request, response));
return retrieveService.retrieve(queryTextReq);
}
@PostMapping("/chat/map")
public MapResp map(@RequestBody QueryReq queryReq,
public MapResp map(@RequestBody QueryTextReq queryTextReq,
HttpServletRequest request,
HttpServletResponse response) {
queryReq.setUser(UserHolder.findUser(request, response));
return chatQueryService.performMapping(queryReq);
queryTextReq.setUser(UserHolder.findUser(request, response));
return chatQueryService.performMapping(queryTextReq);
}
@PostMapping("/chat/parse")
public Object parse(@RequestBody QueryReq queryReq,
public Object parse(@RequestBody QueryTextReq queryTextReq,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
queryReq.setUser(UserHolder.findUser(request, response));
return chatQueryService.performParsing(queryReq);
}
@PostMapping("/chat/execute")
public Object execute(@RequestBody ExecuteQueryReq executeQueryReq,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
executeQueryReq.setUser(UserHolder.findUser(request, response));
return chatQueryService.performExecution(executeQueryReq);
queryTextReq.setUser(UserHolder.findUser(request, response));
return chatQueryService.performParsing(queryTextReq);
}
}

View File

@@ -7,7 +7,7 @@ import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq;
import com.tencent.supersonic.headless.api.pojo.request.ExecuteQueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDataReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp;
import com.tencent.supersonic.headless.api.pojo.response.MapResp;
@@ -19,12 +19,13 @@ import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
*/
public interface ChatQueryService {
MapResp performMapping(QueryReq queryReq);
MapResp performMapping(QueryTextReq queryTextReq);
MapInfoResp map(QueryMapReq queryMapReq);
ParseResp performParsing(QueryReq queryReq);
ParseResp performParsing(QueryTextReq queryTextReq);
@Deprecated
QueryResult performExecution(ExecuteQueryReq queryReq) throws Exception;
SemanticParseInfo queryContext(Integer chatId);

View File

@@ -1,12 +1,12 @@
package com.tencent.supersonic.headless.server.facade.service;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.api.pojo.response.SearchResult;
import java.util.List;
public interface RetrieveService {
List<SearchResult> retrieve(QueryReq queryCtx);
List<SearchResult> retrieve(QueryTextReq queryCtx);
}

View File

@@ -4,10 +4,10 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.EntityInfo;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.TranslateSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.ExplainResp;
import com.tencent.supersonic.headless.api.pojo.response.TranslateResp;
import com.tencent.supersonic.headless.api.pojo.response.ItemResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
@@ -24,7 +24,7 @@ public interface SemanticLayerService {
SemanticQueryResp queryDimValue(QueryDimValueReq queryDimValueReq, User user);
<T> ExplainResp explain(ExplainSqlReq<T> explainSqlReq, User user) throws Exception;
<T> TranslateResp translate(TranslateSqlReq<T> translateSqlReq, User user) throws Exception;
EntityInfo getEntityInfo(SemanticParseInfo parseInfo, DataSetSchema dataSetSchema, User user);

View File

@@ -29,19 +29,19 @@ import com.tencent.supersonic.headless.api.pojo.enums.CostType;
import com.tencent.supersonic.headless.api.pojo.enums.QueryMethod;
import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq;
import com.tencent.supersonic.headless.api.pojo.request.ExecuteQueryReq;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.api.pojo.request.TranslateSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDataReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilters;
import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.DataSetMapInfo;
import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.ExplainResp;
import com.tencent.supersonic.headless.api.pojo.response.TranslateResp;
import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp;
import com.tencent.supersonic.headless.api.pojo.response.MapResp;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
@@ -63,13 +63,13 @@ import com.tencent.supersonic.headless.chat.query.SemanticQuery;
import com.tencent.supersonic.headless.chat.query.llm.s2sql.LLMSqlQuery;
import com.tencent.supersonic.headless.server.facade.service.ChatQueryService;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.utils.WorkflowEngine;
import com.tencent.supersonic.headless.server.persistence.dataobject.StatisticsDO;
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
import com.tencent.supersonic.headless.server.utils.ComponentFactory;
import com.tencent.supersonic.headless.server.web.service.ChatContextService;
import com.tencent.supersonic.headless.server.web.service.DataSetService;
import com.tencent.supersonic.headless.server.web.service.SchemaService;
import com.tencent.supersonic.headless.server.web.service.WorkflowService;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
@@ -115,45 +115,45 @@ public class ChatQueryServiceImpl implements ChatQueryService {
@Autowired
private DataSetService dataSetService;
@Autowired
private WorkflowService workflowService;
private WorkflowEngine workflowEngine;
@Override
public MapResp performMapping(QueryReq queryReq) {
public MapResp performMapping(QueryTextReq queryTextReq) {
MapResp mapResp = new MapResp();
QueryContext queryCtx = buildQueryContext(queryReq);
QueryContext queryCtx = buildQueryContext(queryTextReq);
ComponentFactory.getSchemaMappers().forEach(mapper -> {
mapper.map(queryCtx);
});
SchemaMapInfo mapInfo = queryCtx.getMapInfo();
mapResp.setMapInfo(mapInfo);
mapResp.setQueryText(queryReq.getQueryText());
mapResp.setQueryText(queryTextReq.getQueryText());
return mapResp;
}
@Override
public MapInfoResp map(QueryMapReq queryMapReq) {
QueryReq queryReq = new QueryReq();
BeanUtils.copyProperties(queryMapReq, queryReq);
QueryTextReq queryTextReq = new QueryTextReq();
BeanUtils.copyProperties(queryMapReq, queryTextReq);
List<DataSetResp> dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser());
Set<Long> dataSetIds = dataSets.stream().map(SchemaItem::getId).collect(Collectors.toSet());
queryReq.setDataSetIds(dataSetIds);
MapResp mapResp = performMapping(queryReq);
queryTextReq.setDataSetIds(dataSetIds);
MapResp mapResp = performMapping(queryTextReq);
dataSetIds.retainAll(mapResp.getMapInfo().getDataSetElementMatches().keySet());
return convert(mapResp, queryMapReq.getTopN(), dataSetIds);
}
@Override
public ParseResp performParsing(QueryReq queryReq) {
ParseResp parseResult = new ParseResp(queryReq.getChatId(), queryReq.getQueryText());
public ParseResp performParsing(QueryTextReq queryTextReq) {
ParseResp parseResult = new ParseResp(queryTextReq.getChatId(), queryTextReq.getQueryText());
// build queryContext and chatContext
QueryContext queryCtx = buildQueryContext(queryReq);
QueryContext queryCtx = buildQueryContext(queryTextReq);
// in order to support multi-turn conversation, chat context is needed
ChatContext chatCtx = chatContextService.getOrCreateContext(queryReq.getChatId());
ChatContext chatCtx = chatContextService.getOrCreateContext(queryTextReq.getChatId());
workflowService.startWorkflow(queryCtx, chatCtx, parseResult);
workflowEngine.startWorkflow(queryCtx, chatCtx, parseResult);
List<SemanticParseInfo> parseInfos = queryCtx.getCandidateQueries().stream()
.map(SemanticQuery::getParseInfo).collect(Collectors.toList());
@@ -161,25 +161,26 @@ public class ChatQueryServiceImpl implements ChatQueryService {
return parseResult;
}
public QueryContext buildQueryContext(QueryReq queryReq) {
public QueryContext buildQueryContext(QueryTextReq queryTextReq) {
SemanticSchema semanticSchema = schemaService.getSemanticSchema();
Map<Long, List<Long>> modelIdToDataSetIds = dataSetService.getModelIdToDataSetIds();
QueryContext queryCtx = QueryContext.builder()
.queryFilters(queryReq.getQueryFilters())
.queryFilters(queryTextReq.getQueryFilters())
.semanticSchema(semanticSchema)
.candidateQueries(new ArrayList<>())
.mapInfo(new SchemaMapInfo())
.modelIdToDataSetIds(modelIdToDataSetIds)
.text2SQLType(queryReq.getText2SQLType())
.mapModeEnum(queryReq.getMapModeEnum())
.dataSetIds(queryReq.getDataSetIds())
.text2SQLType(queryTextReq.getText2SQLType())
.mapModeEnum(queryTextReq.getMapModeEnum())
.dataSetIds(queryTextReq.getDataSetIds())
.build();
BeanUtils.copyProperties(queryReq, queryCtx);
BeanUtils.copyProperties(queryTextReq, queryCtx);
return queryCtx;
}
@Override
@Deprecated
public QueryResult performExecution(ExecuteQueryReq queryReq) throws Exception {
List<StatisticsDO> timeCostDOList = new ArrayList<>();
SemanticParseInfo parseInfo = queryReq.getParseInfo();
@@ -263,9 +264,9 @@ public class ChatQueryServiceImpl implements ChatQueryService {
parseInfo.getSqlInfo().setCorrectS2SQL(correctorSql);
semanticQuery.setParseInfo(parseInfo);
SemanticQueryReq semanticQueryReq = semanticQuery.buildSemanticQueryReq();
ExplainSqlReq<Object> explainSqlReq = ExplainSqlReq.builder().queryReq(semanticQueryReq)
TranslateSqlReq<Object> translateSqlReq = TranslateSqlReq.builder().queryReq(semanticQueryReq)
.queryTypeEnum(QueryMethod.SQL).build();
ExplainResp explain = semanticLayerService.explain(explainSqlReq, user);
TranslateResp explain = semanticLayerService.translate(translateSqlReq, user);
if (StringUtils.isNotBlank(explain.getSql())) {
parseInfo.getSqlInfo().setQuerySQL(explain.getSql());
parseInfo.getSqlInfo().setSourceId(explain.getSourceId());
@@ -277,9 +278,9 @@ public class ChatQueryServiceImpl implements ChatQueryService {
validFilter(semanticQuery.getParseInfo().getMetricFilters());
//init s2sql
semanticQuery.initS2Sql(semanticSchema, user);
QueryReq queryReq = new QueryReq();
queryReq.setQueryFilters(new QueryFilters());
queryReq.setUser(user);
QueryTextReq queryTextReq = new QueryTextReq();
queryTextReq.setQueryFilters(new QueryFilters());
queryTextReq.setUser(user);
}
SemanticQueryReq semanticQueryReq = semanticQuery.buildSemanticQueryReq();
QueryResult queryResult = doExecution(semanticQueryReq, semanticQuery.getParseInfo(), user);

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilters;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryTextReq;
import com.tencent.supersonic.headless.api.pojo.response.S2Term;
import com.tencent.supersonic.headless.api.pojo.response.SearchResult;
import com.tencent.supersonic.headless.chat.QueryContext;
@@ -64,9 +64,9 @@ public class RetrieveServiceImpl implements RetrieveService {
@Autowired
private SearchMatchStrategy searchMatchStrategy;
@Override
public List<SearchResult> retrieve(QueryReq queryReq) {
public List<SearchResult> retrieve(QueryTextReq queryTextReq) {
String queryText = queryReq.getQueryText();
String queryText = queryTextReq.getQueryText();
// 1.get meta info
SemanticSchema semanticSchemaDb = schemaService.getSemanticSchema();
List<SchemaElement> metricsDb = semanticSchemaDb.getMetrics();
@@ -76,10 +76,10 @@ public class RetrieveServiceImpl implements RetrieveService {
// 2.detect by segment
List<S2Term> originals = knowledgeBaseService.getTerms(queryText, modelIdToDataSetIds);
log.debug("hanlp parse result: {}", originals);
Set<Long> dataSetIds = queryReq.getDataSetIds();
Set<Long> dataSetIds = queryTextReq.getDataSetIds();
QueryContext queryContext = new QueryContext();
BeanUtils.copyProperties(queryReq, queryContext);
BeanUtils.copyProperties(queryTextReq, queryContext);
queryContext.setModelIdToDataSetIds(dataSetService.getModelIdToDataSetIds());
Map<MatchText, List<HanlpMapResult>> regTextMap =
@@ -100,12 +100,12 @@ public class RetrieveServiceImpl implements RetrieveService {
return Lists.newArrayList();
}
Map.Entry<MatchText, List<HanlpMapResult>> searchTextEntry = mostSimilarSearchResult.get();
log.debug("searchTextEntry:{},queryReq:{}", searchTextEntry, queryReq);
log.debug("searchTextEntry:{},queryTextReq:{}", searchTextEntry, queryTextReq);
Set<SearchResult> searchResults = new LinkedHashSet();
DataSetInfoStat dataSetInfoStat = NatureHelper.getDataSetStat(originals);
List<Long> possibleDataSets = getPossibleDataSets(queryReq, originals, dataSetInfoStat, dataSetIds);
List<Long> possibleDataSets = getPossibleDataSets(queryTextReq, originals, dataSetInfoStat, dataSetIds);
// 5.1 priority dimension metric
boolean existMetricAndDimension = searchMetricAndDimension(new HashSet<>(possibleDataSets), dataSetIdToName,
@@ -120,14 +120,14 @@ public class RetrieveServiceImpl implements RetrieveService {
Set<SearchResult> searchResultSet = searchDimensionValue(metricsDb, dataSetIdToName,
dataSetInfoStat.getMetricDataSetCount(), existMetricAndDimension,
matchText, natureToNameMap, natureToNameEntry, queryReq.getQueryFilters());
matchText, natureToNameMap, natureToNameEntry, queryTextReq.getQueryFilters());
searchResults.addAll(searchResultSet);
}
return searchResults.stream().limit(RESULT_SIZE).collect(Collectors.toList());
}
private List<Long> getPossibleDataSets(QueryReq queryCtx, List<S2Term> originals,
private List<Long> getPossibleDataSets(QueryTextReq queryCtx, List<S2Term> originals,
DataSetInfoStat dataSetInfoStat, Set<Long> dataSetIds) {
if (CollectionUtils.isNotEmpty(dataSetIds)) {
return new ArrayList<>(dataSetIds);

View File

@@ -19,7 +19,7 @@ import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.TagTypeDefaultConfig;
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.TranslateSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.request.QueryMultiStructReq;
@@ -28,7 +28,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.request.SchemaFilterReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.DimensionResp;
import com.tencent.supersonic.headless.api.pojo.response.ExplainResp;
import com.tencent.supersonic.headless.api.pojo.response.TranslateResp;
import com.tencent.supersonic.headless.api.pojo.response.ItemResp;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
@@ -125,7 +125,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
StatUtils.get().setUseResultCache(false);
//3 query
QueryStatement queryStatement = buildQueryStatement(queryReq, user);
SemanticQueryResp result = query(queryStatement);
SemanticQueryResp result = doQuery(queryStatement);
//4 reset cache and set stateInfo
Boolean setCacheSuccess = queryCache.put(cacheKey, result);
if (setCacheSuccess) {
@@ -228,8 +228,8 @@ public class S2SemanticLayerService implements SemanticLayerService {
}
@Override
public <T> ExplainResp explain(ExplainSqlReq<T> explainSqlReq, User user) throws Exception {
T queryReq = explainSqlReq.getQueryReq();
public <T> TranslateResp translate(TranslateSqlReq<T> translateSqlReq, User user) throws Exception {
T queryReq = translateSqlReq.getQueryReq();
QueryStatement queryStatement = buildQueryStatement((SemanticQueryReq) queryReq, user);
semanticTranslator.translate(queryStatement);
@@ -239,7 +239,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
sql = queryStatement.getSql();
sorceId = queryStatement.getSourceId();
}
return ExplainResp.builder().sql(sql).sourceId(sorceId).build();
return TranslateResp.builder().sql(sql).sourceId(sorceId).build();
}
public List<ItemResp> getDomainDataSetTree() {
@@ -268,7 +268,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
return querySqlReq;
}
private SemanticQueryResp query(QueryStatement queryStatement) {
private SemanticQueryResp doQuery(QueryStatement queryStatement) {
SemanticQueryResp semanticQueryResp = null;
try {
//1 translate

View File

@@ -4,9 +4,9 @@ import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.SqlInfo;
import com.tencent.supersonic.headless.api.pojo.enums.QueryMethod;
import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.TranslateSqlReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.ExplainResp;
import com.tencent.supersonic.headless.api.pojo.response.TranslateResp;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.chat.ChatContext;
import com.tencent.supersonic.headless.chat.QueryContext;
@@ -24,8 +24,8 @@ import java.util.Objects;
import java.util.stream.Collectors;
/**
* SqlInfoProcessor adds S2SQL to the parsing results so that
* technical users could verify SQL by themselves.
* SqlInfoProcessor adds intermediate S2SQL and final SQL to the parsing results
* so that technical users could verify SQL by themselves.
**/
@Slf4j
public class SqlInfoProcessor implements ResultProcessor {
@@ -66,9 +66,9 @@ public class SqlInfoProcessor implements ResultProcessor {
semanticQuery.setParseInfo(parseInfo);
SemanticQueryReq semanticQueryReq = semanticQuery.buildSemanticQueryReq();
SemanticLayerService queryService = ContextUtils.getBean(SemanticLayerService.class);
ExplainSqlReq<Object> explainSqlReq = ExplainSqlReq.builder().queryReq(semanticQueryReq)
TranslateSqlReq<Object> translateSqlReq = TranslateSqlReq.builder().queryReq(semanticQueryReq)
.queryTypeEnum(QueryMethod.SQL).build();
ExplainResp explain = queryService.explain(explainSqlReq, queryContext.getUser());
TranslateResp explain = queryService.translate(translateSqlReq, queryContext.getUser());
String querySql = explain.getSql();
if (StringUtils.isBlank(querySql)) {
return;

View File

@@ -1,4 +1,4 @@
package com.tencent.supersonic.headless.server.web.service.impl;
package com.tencent.supersonic.headless.server.utils;
import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.enums.WorkflowState;
@@ -11,8 +11,6 @@ import com.tencent.supersonic.headless.chat.parser.SemanticParser;
import com.tencent.supersonic.headless.chat.query.SemanticQuery;
import com.tencent.supersonic.headless.chat.query.rule.RuleSemanticQuery;
import com.tencent.supersonic.headless.server.processor.ResultProcessor;
import com.tencent.supersonic.headless.server.web.service.WorkflowService;
import com.tencent.supersonic.headless.server.utils.ComponentFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
@@ -23,7 +21,7 @@ import java.util.Objects;
@Service
@Slf4j
public class WorkflowServiceImpl implements WorkflowService {
public class WorkflowEngine {
private List<SchemaMapper> schemaMappers = ComponentFactory.getSchemaMappers();
private List<SemanticParser> semanticParsers = ComponentFactory.getSemanticParsers();
private List<SemanticCorrector> semanticCorrectors = ComponentFactory.getSemanticCorrectors();

View File

@@ -1,9 +0,0 @@
package com.tencent.supersonic.headless.server.web.service;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.chat.ChatContext;
import com.tencent.supersonic.headless.chat.QueryContext;
public interface WorkflowService {
void startWorkflow(QueryContext queryCtx, ChatContext chatCtx, ParseResp parseResult);
}

View File

@@ -22,9 +22,9 @@ import java.util.Arrays;
import java.util.List;
/**
* QueryReqBuilderTest
* QueryTextReqBuilderTest
*/
class QueryReqBuilderTest {
class QueryTextReqBuilderTest {
@Test
void buildS2SQLReq() {