[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.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;
} }
} }

View File

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

View File

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

View File

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

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