diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TranslateResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TranslateResp.java index fc658c728..ffda70269 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TranslateResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TranslateResp.java @@ -16,8 +16,7 @@ import java.io.Serializable; public class TranslateResp implements Serializable { private String sql; - - private String sourceId; - + private boolean isOk; + private String errMsg; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java index a9f40dfa5..bc7a7c70e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java @@ -34,10 +34,6 @@ public class JdbcExecutor implements QueryExecutor { } SqlUtils sqlUtils = ContextUtils.getBean(SqlUtils.class); - if (StringUtils.isEmpty(queryStatement.getSourceId())) { - log.warn("data base id is empty"); - return null; - } log.info("executing SQL: {}", StringUtils.normalizeSpace(queryStatement.getSql())); Database database = queryStatement.getSemanticModel().getDatabase(); SemanticQueryResp queryResultWithColumns = new SemanticQueryResp(); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java index d8b737882..28e0c3c8d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java @@ -4,6 +4,7 @@ import com.tencent.supersonic.headless.api.pojo.QueryParam; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; import lombok.Data; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Triple; @@ -14,10 +15,8 @@ public class QueryStatement { private Long dataSetId; private List modelIds; - private String sql = ""; - private String sourceId = ""; - private String errMsg = ""; - private Boolean ok; + private String sql; + private String errMsg; private QueryParam queryParam; private MetricQueryParam metricQueryParam; private DataSetQueryParam dataSetQueryParam; @@ -26,20 +25,17 @@ public class QueryStatement { private List> timeRanges; private Boolean enableOptimize = true; private Triple minMaxTime; - private String dataSetSql = ""; - private String dataSetAlias = ""; - private String dataSetSimplifySql = ""; + private String dataSetSql; + private String dataSetAlias; + private String dataSetSimplifySql; private Boolean enableLimitWrapper = false; - private SemanticModel semanticModel; - private SemanticSchemaResp semanticSchemaResp; private Integer limit = 1000; private Boolean isTranslated = false; public boolean isOk() { - this.ok = "".equals(errMsg) && !"".equals(sql); - return ok; + return StringUtils.isBlank(errMsg) && StringUtils.isNotBlank(sql); } public boolean isTranslated() { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java index a8a04f503..bb8579e30 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java @@ -28,9 +28,8 @@ public class DefaultSemanticTranslator implements SemanticTranslator { try { parse(queryStatement); optimize(queryStatement); - queryStatement.setOk(true); } catch (Exception e) { - queryStatement.setOk(false); + queryStatement.setErrMsg(e.getMessage()); } } @@ -63,8 +62,7 @@ public class DefaultSemanticTranslator implements SemanticTranslator { queryStatement.getMetricQueryParam().setNativeQuery(queryParam.getQueryType().isNativeAggQuery()); doParse(queryStatement); } - if (StringUtils.isEmpty(queryStatement.getSql()) - || StringUtils.isEmpty(queryStatement.getSourceId())) { + if (StringUtils.isEmpty(queryStatement.getSql())) { throw new RuntimeException("parse Exception: " + queryStatement.getErrMsg()); } if (StringUtils.isNotBlank(queryStatement.getSql()) @@ -156,7 +154,6 @@ public class DefaultSemanticTranslator implements SemanticTranslator { throw new Exception(String.format("parser table [%s] error [%s]", metricTable.getAlias(), tableSql.getErrMsg())); } - queryStatement.setSourceId(tableSql.getSourceId()); return tableSql; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java index 4ad5edce7..54245adf0 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java @@ -35,7 +35,6 @@ public class CalciteQueryParser implements QueryParser { aggBuilder.explain(queryStatement, isAgg); EngineType engineType = EngineType.fromString(semanticSchema.getSemanticModel().getDatabase().getType()); queryStatement.setSql(aggBuilder.getSql(engineType)); - queryStatement.setSourceId(aggBuilder.getSourceId()); if (Objects.nonNull(queryStatement.getEnableOptimize()) && queryStatement.getEnableOptimize() && Objects.nonNull(queryStatement.getDataSetAlias()) && !queryStatement.getDataSetAlias().isEmpty()) { // simplify model sql with query sql diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/ChatQueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/ChatQueryServiceImpl.java index 94a21b8cf..8f561f6ea 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/ChatQueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/ChatQueryServiceImpl.java @@ -266,10 +266,7 @@ public class ChatQueryServiceImpl implements ChatQueryService { TranslateSqlReq translateSqlReq = TranslateSqlReq.builder().queryReq(semanticQueryReq) .queryTypeEnum(QueryMethod.SQL).build(); TranslateResp explain = semanticLayerService.translate(translateSqlReq, user); - if (StringUtils.isNotBlank(explain.getSql())) { - parseInfo.getSqlInfo().setQuerySQL(explain.getSql()); - parseInfo.getSqlInfo().setSourceId(explain.getSourceId()); - } + parseInfo.getSqlInfo().setQuerySQL(explain.getSql()); } else { log.info("rule begin replace metrics and revise filters!"); //remove unvalid filters diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java index e8c690b17..fb8c60114 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/facade/service/impl/S2SemanticLayerService.java @@ -175,7 +175,6 @@ public class S2SemanticLayerService implements SemanticLayerService { if (Objects.nonNull(queryStatement) && Objects.nonNull(semanticQueryReq.getSqlInfo()) && StringUtils.isNotBlank( semanticQueryReq.getSqlInfo().getQuerySQL())) { queryStatement.setSql(semanticQueryReq.getSqlInfo().getQuerySQL()); - queryStatement.setSourceId(semanticQueryReq.getSqlInfo().getSourceId()); queryStatement.setDataSetId(semanticQueryReq.getDataSetId()); queryStatement.setIsTranslated(true); } @@ -233,14 +232,11 @@ public class S2SemanticLayerService implements SemanticLayerService { T queryReq = translateSqlReq.getQueryReq(); QueryStatement queryStatement = buildQueryStatement((SemanticQueryReq) queryReq, user); semanticTranslator.translate(queryStatement); - - String sql = ""; - String sorceId = ""; - if (Objects.nonNull(queryStatement)) { - sql = queryStatement.getSql(); - sorceId = queryStatement.getSourceId(); - } - return TranslateResp.builder().sql(sql).sourceId(sorceId).build(); + return TranslateResp.builder() + .sql(queryStatement.getSql()) + .isOk(queryStatement.isOk()) + .errMsg(queryStatement.getErrMsg()) + .build(); } public List getDomainDataSetTree() { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java index b052fc435..dbb80cbd1 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ChatWorkflowEngine.java @@ -3,7 +3,6 @@ package com.tencent.supersonic.headless.server.utils; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.headless.api.pojo.SqlInfo; import com.tencent.supersonic.headless.api.pojo.enums.ChatWorkflowState; import com.tencent.supersonic.headless.api.pojo.enums.QueryMethod; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; @@ -127,19 +126,13 @@ public class ChatWorkflowEngine { TranslateSqlReq translateSqlReq = TranslateSqlReq.builder().queryReq(semanticQueryReq) .queryTypeEnum(QueryMethod.SQL).build(); TranslateResp explain = queryService.translate(translateSqlReq, chatQueryContext.getUser()); - String querySql = explain.getSql(); - if (StringUtils.isBlank(querySql)) { - return; - } - SqlInfo sqlInfo = parseInfo.getSqlInfo(); - sqlInfo.setQuerySQL(querySql); - sqlInfo.setSourceId(explain.getSourceId()); + parseInfo.getSqlInfo().setQuerySQL(explain.getSql()); keyPipelineLog.info("SqlInfoProcessor results:\n" + "Parsed S2SQL: {}\nCorrected S2SQL: {}\nQuery SQL: {}", - StringUtils.normalizeSpace(sqlInfo.getS2SQL()), - StringUtils.normalizeSpace(sqlInfo.getCorrectS2SQL()), - StringUtils.normalizeSpace(querySql)); + StringUtils.normalizeSpace(parseInfo.getSqlInfo().getS2SQL()), + StringUtils.normalizeSpace(parseInfo.getSqlInfo().getCorrectS2SQL()), + StringUtils.normalizeSpace(parseInfo.getSqlInfo().getQuerySQL())); } catch (Exception e) { log.warn("get sql info failed:{}", parseInfo, e); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java index 7e8ce5ead..4c6ae5fea 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java @@ -157,7 +157,6 @@ public class QueryUtils { } String unionSql = unionSqlBuilder.substring(0, unionSqlBuilder.length() - Constants.UNIONALL.length()); sqlParser.setSql(unionSql); - sqlParser.setSourceId(sqlParsers.get(0).getSourceId()); log.info("union sql parser:{}", sqlParser); return sqlParser; }