mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
[fix][headless] fix struct parse error (#633)
This commit is contained in:
@@ -23,6 +23,12 @@ import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
|||||||
import com.tencent.supersonic.headless.server.service.DownloadService;
|
import com.tencent.supersonic.headless.server.service.DownloadService;
|
||||||
import com.tencent.supersonic.headless.server.service.HeadlessQueryEngine;
|
import com.tencent.supersonic.headless.server.service.HeadlessQueryEngine;
|
||||||
import com.tencent.supersonic.headless.server.service.QueryService;
|
import com.tencent.supersonic.headless.server.service.QueryService;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -31,11 +37,6 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.validation.Valid;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/semantic/query")
|
@RequestMapping("/api/semantic/query")
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@@ -69,22 +70,22 @@ public class QueryController {
|
|||||||
|
|
||||||
@PostMapping("/queryMetricDataById")
|
@PostMapping("/queryMetricDataById")
|
||||||
public ItemQueryResultResp queryMetricDataById(@Valid @RequestBody QueryItemReq queryApiReq,
|
public ItemQueryResultResp queryMetricDataById(@Valid @RequestBody QueryItemReq queryApiReq,
|
||||||
HttpServletRequest request) throws Exception {
|
HttpServletRequest request) throws Exception {
|
||||||
return queryService.queryMetricDataById(queryApiReq, request);
|
return queryService.queryMetricDataById(queryApiReq, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/download/struct")
|
@PostMapping("/download/struct")
|
||||||
public void downloadByStruct(@RequestBody DownloadStructReq downloadStructReq,
|
public void downloadByStruct(@RequestBody DownloadStructReq downloadStructReq,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response) throws Exception {
|
HttpServletResponse response) throws Exception {
|
||||||
User user = UserHolder.findUser(request, response);
|
User user = UserHolder.findUser(request, response);
|
||||||
downloadService.downloadByStruct(downloadStructReq, user, response);
|
downloadService.downloadByStruct(downloadStructReq, user, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/download/batch")
|
@PostMapping("/download/batch")
|
||||||
public void downloadBatch(@RequestBody BatchDownloadReq batchDownloadReq,
|
public void downloadBatch(@RequestBody BatchDownloadReq batchDownloadReq,
|
||||||
HttpServletRequest request,
|
HttpServletRequest request,
|
||||||
HttpServletResponse response) throws Exception {
|
HttpServletResponse response) throws Exception {
|
||||||
User user = UserHolder.findUser(request, response);
|
User user = UserHolder.findUser(request, response);
|
||||||
downloadService.batchDownload(batchDownloadReq, user, response);
|
downloadService.batchDownload(batchDownloadReq, user, response);
|
||||||
}
|
}
|
||||||
@@ -97,6 +98,9 @@ public class QueryController {
|
|||||||
@PostMapping("/struct/parse")
|
@PostMapping("/struct/parse")
|
||||||
public SqlParserResp parseByStruct(@RequestBody ParseSqlReq parseSqlReq) throws Exception {
|
public SqlParserResp parseByStruct(@RequestBody ParseSqlReq parseSqlReq) throws Exception {
|
||||||
QueryStructReq queryStructCmd = new QueryStructReq();
|
QueryStructReq queryStructCmd = new QueryStructReq();
|
||||||
|
Set<Long> models = new HashSet<>();
|
||||||
|
models.add(Long.valueOf(parseSqlReq.getRootPath()));
|
||||||
|
queryStructCmd.setModelIds(models);
|
||||||
QueryStatement queryStatement = headlessQueryEngine.physicalSql(queryStructCmd, parseSqlReq);
|
QueryStatement queryStatement = headlessQueryEngine.physicalSql(queryStructCmd, parseSqlReq);
|
||||||
SqlParserResp sqlParserResp = new SqlParserResp();
|
SqlParserResp sqlParserResp = new SqlParserResp();
|
||||||
BeanUtils.copyProperties(queryStatement, sqlParserResp);
|
BeanUtils.copyProperties(queryStatement, sqlParserResp);
|
||||||
|
|||||||
@@ -6,21 +6,21 @@ import com.tencent.supersonic.headless.api.request.ParseSqlReq;
|
|||||||
import com.tencent.supersonic.headless.api.request.QueryStructReq;
|
import com.tencent.supersonic.headless.api.request.QueryStructReq;
|
||||||
import com.tencent.supersonic.headless.api.response.ModelSchemaResp;
|
import com.tencent.supersonic.headless.api.response.ModelSchemaResp;
|
||||||
import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp;
|
import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp;
|
||||||
|
import com.tencent.supersonic.headless.core.executor.QueryExecutor;
|
||||||
import com.tencent.supersonic.headless.core.optimizer.QueryOptimizer;
|
import com.tencent.supersonic.headless.core.optimizer.QueryOptimizer;
|
||||||
import com.tencent.supersonic.headless.core.parser.QueryParser;
|
import com.tencent.supersonic.headless.core.parser.QueryParser;
|
||||||
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.HeadlessModel;
|
import com.tencent.supersonic.headless.core.parser.calcite.s2sql.HeadlessModel;
|
||||||
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
import com.tencent.supersonic.headless.core.pojo.QueryStatement;
|
||||||
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
import com.tencent.supersonic.headless.core.utils.ComponentFactory;
|
||||||
import com.tencent.supersonic.headless.core.executor.QueryExecutor;
|
|
||||||
import com.tencent.supersonic.headless.server.manager.HeadlessSchemaManager;
|
import com.tencent.supersonic.headless.server.manager.HeadlessSchemaManager;
|
||||||
import com.tencent.supersonic.headless.server.service.Catalog;
|
import com.tencent.supersonic.headless.server.service.Catalog;
|
||||||
import com.tencent.supersonic.headless.server.service.HeadlessQueryEngine;
|
import com.tencent.supersonic.headless.server.service.HeadlessQueryEngine;
|
||||||
import com.tencent.supersonic.headless.server.utils.QueryStructUtils;
|
import com.tencent.supersonic.headless.server.utils.QueryStructUtils;
|
||||||
import com.tencent.supersonic.headless.server.utils.QueryUtils;
|
import com.tencent.supersonic.headless.server.utils.QueryUtils;
|
||||||
|
import java.util.List;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@@ -33,8 +33,8 @@ public class HeadlessQueryEngineImpl implements HeadlessQueryEngine {
|
|||||||
private final HeadlessSchemaManager headlessSchemaManager;
|
private final HeadlessSchemaManager headlessSchemaManager;
|
||||||
|
|
||||||
public HeadlessQueryEngineImpl(QueryParser queryParser, Catalog catalog,
|
public HeadlessQueryEngineImpl(QueryParser queryParser, Catalog catalog,
|
||||||
QueryUtils queryUtils, HeadlessSchemaManager headlessSchemaManager,
|
QueryUtils queryUtils, HeadlessSchemaManager headlessSchemaManager,
|
||||||
QueryStructUtils queryStructUtils) {
|
QueryStructUtils queryStructUtils) {
|
||||||
this.queryParser = queryParser;
|
this.queryParser = queryParser;
|
||||||
this.catalog = catalog;
|
this.catalog = catalog;
|
||||||
this.queryUtils = queryUtils;
|
this.queryUtils = queryUtils;
|
||||||
@@ -82,19 +82,22 @@ public class HeadlessQueryEngineImpl implements HeadlessQueryEngine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QueryStatement physicalSql(QueryStructReq queryStructCmd, ParseSqlReq sqlCommend) {
|
public QueryStatement physicalSql(QueryStructReq queryStructCmd, ParseSqlReq sqlCommend) throws Exception {
|
||||||
QueryStatement queryStatement = new QueryStatement();
|
QueryStatement queryStatement = new QueryStatement();
|
||||||
|
queryStatement.setSql(sqlCommend.getSql());
|
||||||
queryStatement.setQueryStructReq(queryStructCmd);
|
queryStatement.setQueryStructReq(queryStructCmd);
|
||||||
queryStatement.setParseSqlReq(sqlCommend);
|
queryStatement.setParseSqlReq(sqlCommend);
|
||||||
queryStatement.setIsS2SQL(true);
|
queryStatement.setIsS2SQL(true);
|
||||||
|
queryStatement.setHeadlessModel(getHeadLessModel(queryStatement));
|
||||||
return optimize(queryStructCmd, queryParser.parser(sqlCommend, queryStatement));
|
return optimize(queryStructCmd, queryParser.parser(sqlCommend, queryStatement));
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueryStatement physicalSql(QueryStructReq queryStructCmd, MetricQueryReq metricCommand) {
|
public QueryStatement physicalSql(QueryStructReq queryStructCmd, MetricQueryReq metricCommand) throws Exception {
|
||||||
QueryStatement queryStatement = new QueryStatement();
|
QueryStatement queryStatement = new QueryStatement();
|
||||||
queryStatement.setQueryStructReq(queryStructCmd);
|
queryStatement.setQueryStructReq(queryStructCmd);
|
||||||
queryStatement.setMetricReq(metricCommand);
|
queryStatement.setMetricReq(metricCommand);
|
||||||
queryStatement.setIsS2SQL(false);
|
queryStatement.setIsS2SQL(false);
|
||||||
|
queryStatement.setHeadlessModel(getHeadLessModel(queryStatement));
|
||||||
return queryParser.parser(queryStatement);
|
return queryParser.parser(queryStatement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user