[improvement][headless] Fix permission exception loss (#1764) (#1782)

This commit is contained in:
jipeli
2024-10-11 12:00:41 +08:00
committed by GitHub
parent c477031a0c
commit 50b0036d0f
5 changed files with 47 additions and 19 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;