[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

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