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