mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:38:13 +00:00
@@ -79,23 +79,20 @@ public class SqlExecutor implements ChatQueryExecutor {
|
||||
queryResult.setChatContext(parseInfo);
|
||||
queryResult.setQueryMode(parseInfo.getQueryMode());
|
||||
queryResult.setQueryTimeCost(System.currentTimeMillis() - startTime);
|
||||
try {
|
||||
SemanticQueryResp queryResp =
|
||||
semanticLayer.queryByReq(sqlReq, executeContext.getUser());
|
||||
if (queryResp != null) {
|
||||
queryResult.setQueryAuthorization(queryResp.getQueryAuthorization());
|
||||
queryResult.setQuerySql(queryResp.getSql());
|
||||
queryResult.setQueryResults(queryResp.getResultList());
|
||||
queryResult.setQueryColumns(queryResp.getColumns());
|
||||
queryResult.setQueryState(QueryState.SUCCESS);
|
||||
chatCtx.setParseInfo(parseInfo);
|
||||
chatContextService.updateContext(chatCtx);
|
||||
} else {
|
||||
queryResult.setQueryState(QueryState.INVALID);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
queryResult.setErrorMsg(e.getMessage());
|
||||
SemanticQueryResp queryResp = semanticLayer.queryByReq(sqlReq, executeContext.getUser());
|
||||
if (queryResp != null) {
|
||||
queryResult.setQueryAuthorization(queryResp.getQueryAuthorization());
|
||||
queryResult.setQuerySql(queryResp.getSql());
|
||||
queryResult.setQueryResults(queryResp.getResultList());
|
||||
queryResult.setQueryColumns(queryResp.getColumns());
|
||||
queryResult.setQueryState(QueryState.SUCCESS);
|
||||
queryResult.setErrorMsg(queryResp.getErrorMsg());
|
||||
chatCtx.setParseInfo(parseInfo);
|
||||
chatContextService.updateContext(chatCtx);
|
||||
} else {
|
||||
queryResult.setQueryState(QueryState.INVALID);
|
||||
}
|
||||
|
||||
return queryResult;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,21 @@ public class StringUtil {
|
||||
}
|
||||
return sql.replaceAll("`", "");
|
||||
}
|
||||
|
||||
public static String append(String old, String add) {
|
||||
return append(old, add, "\n");
|
||||
}
|
||||
|
||||
public static String append(String old, String add, String split) {
|
||||
if (StringUtils.isNotBlank(old)) {
|
||||
if (StringUtils.isNotBlank(add)) {
|
||||
return String.format("%s%s%s", old, split, add);
|
||||
}
|
||||
return old;
|
||||
}
|
||||
if (StringUtils.isNotBlank(add)) {
|
||||
return add;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.api.pojo.response;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.common.pojo.QueryAuthorization;
|
||||
import com.tencent.supersonic.common.pojo.QueryColumn;
|
||||
import com.tencent.supersonic.common.util.StringUtil;
|
||||
import com.tencent.supersonic.headless.api.pojo.QueryResult;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.SemanticType;
|
||||
import lombok.Data;
|
||||
@@ -20,6 +21,7 @@ public class SemanticQueryResp extends QueryResult<Map<String, Object>> {
|
||||
String sql;
|
||||
QueryAuthorization queryAuthorization;
|
||||
boolean useCache;
|
||||
private String errorMsg;
|
||||
|
||||
public List<QueryColumn> getMetricColumns() {
|
||||
return columns.stream()
|
||||
@@ -32,4 +34,8 @@ public class SemanticQueryResp extends QueryResult<Map<String, Object>> {
|
||||
queryColumn -> !SemanticType.NUMBER.name().equals(queryColumn.getShowType()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public void appendErrorMsg(String msg) {
|
||||
errorMsg = StringUtil.append(errorMsg, msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,9 +40,14 @@ public class JdbcExecutor implements QueryExecutor {
|
||||
log.info("executing SQL: {}", sql);
|
||||
Database database = queryStatement.getSemanticModel().getDatabase();
|
||||
SemanticQueryResp queryResultWithColumns = new SemanticQueryResp();
|
||||
SqlUtils sqlUtil = sqlUtils.init(database);
|
||||
sqlUtil.queryInternal(queryStatement.getSql(), queryResultWithColumns);
|
||||
queryResultWithColumns.setSql(sql);
|
||||
try {
|
||||
SqlUtils sqlUtil = sqlUtils.init(database);
|
||||
sqlUtil.queryInternal(queryStatement.getSql(), queryResultWithColumns);
|
||||
queryResultWithColumns.setSql(sql);
|
||||
} catch (Exception e) {
|
||||
log.error("queryInternal error [{}]", e);
|
||||
queryResultWithColumns.setErrorMsg(e.getMessage());
|
||||
}
|
||||
return queryResultWithColumns;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum;
|
||||
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
|
||||
import com.tencent.supersonic.common.util.StringUtil;
|
||||
import com.tencent.supersonic.headless.api.pojo.*;
|
||||
import com.tencent.supersonic.headless.api.pojo.DetailTypeDefaultConfig;
|
||||
import com.tencent.supersonic.headless.api.pojo.enums.SemanticType;
|
||||
@@ -165,6 +166,8 @@ public class S2SemanticLayerService implements SemanticLayerService {
|
||||
}
|
||||
if (Objects.isNull(queryResp)) {
|
||||
state = TaskStatusEnum.ERROR;
|
||||
} else {
|
||||
queryResp.appendErrorMsg(queryStatement.getErrMsg());
|
||||
}
|
||||
|
||||
return queryResp;
|
||||
|
||||
Reference in New Issue
Block a user