diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRatioProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRatioProcessor.java index 676b3330e..f9bf61579 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRatioProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRatioProcessor.java @@ -30,7 +30,7 @@ import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.core.config.AggregatorConfig; import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import java.text.DecimalFormat; import java.time.DayOfWeek; import java.time.LocalDate; @@ -48,6 +48,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; + import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; @@ -133,7 +134,7 @@ public class MetricRatioProcessor implements ExecuteResultProcessor { queryStructReq.setGroups(new ArrayList<>(Arrays.asList(dateField))); queryStructReq.setDateInfo(getRatioDateConf(aggOperatorEnum, semanticParseInfo, queryResult)); queryStructReq.setConvertToSql(false); - QueryService queryService = ContextUtils.getBean(QueryService.class); + SemanticLayerService queryService = ContextUtils.getBean(SemanticLayerService.class); SemanticQueryResp queryResp = queryService.queryByReq(queryStructReq, user); MetricInfo metricInfo = new MetricInfo(); metricInfo.setStatistics(new HashMap<>()); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/AbstractAccelerator.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/AbstractAccelerator.java similarity index 95% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/AbstractAccelerator.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/AbstractAccelerator.java index f19f5e6e6..a6840ac1f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/AbstractAccelerator.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/AbstractAccelerator.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.core.executor.accelerator; +package com.tencent.supersonic.headless.core.executor; import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper; -import com.tencent.supersonic.headless.core.parser.calcite.Configuration; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.TimeRange; -import com.tencent.supersonic.headless.core.parser.calcite.schema.DataSourceTable; -import com.tencent.supersonic.headless.core.parser.calcite.schema.DataSourceTable.Builder; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; +import com.tencent.supersonic.headless.core.translator.calcite.Configuration; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.TimeRange; +import com.tencent.supersonic.headless.core.translator.calcite.schema.DataSourceTable; +import com.tencent.supersonic.headless.core.translator.calcite.schema.DataSourceTable.Builder; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SchemaBuilder; import com.tencent.supersonic.headless.core.pojo.Materialization; import java.util.Arrays; import java.util.HashSet; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java index 4519643d5..ca9ccb13d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java @@ -4,11 +4,14 @@ import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.core.pojo.Database; import com.tencent.supersonic.headless.core.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.utils.ComponentFactory; import com.tencent.supersonic.headless.core.utils.SqlUtils; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; import org.springframework.stereotype.Component; +import java.util.Objects; + @Component("JdbcExecutor") @Slf4j public class JdbcExecutor implements QueryExecutor { @@ -19,6 +22,17 @@ public class JdbcExecutor implements QueryExecutor { @Override public SemanticQueryResp execute(QueryStatement queryStatement) { + // accelerate query if possible + for (QueryAccelerator queryAccelerator : ComponentFactory.getQueryAccelerators()) { + if (queryAccelerator.check(queryStatement)) { + SemanticQueryResp semanticQueryResp = queryAccelerator.query(queryStatement); + if (Objects.nonNull(semanticQueryResp) && !semanticQueryResp.getResultList().isEmpty()) { + log.info("query by Accelerator {}", queryAccelerator.getClass().getSimpleName()); + return semanticQueryResp; + } + } + } + SqlUtils sqlUtils = ContextUtils.getBean(SqlUtils.class); if (Strings.isEmpty(queryStatement.getSourceId())) { log.warn("data base id is empty"); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/QueryAccelerator.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryAccelerator.java similarity index 88% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/QueryAccelerator.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryAccelerator.java index 4ce357332..9556445dc 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/accelerator/QueryAccelerator.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryAccelerator.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.executor.accelerator; +package com.tencent.supersonic.headless.core.executor; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.core.pojo.QueryStatement; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java index c8bf7ad83..23b326922 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java @@ -4,7 +4,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.core.pojo.QueryStatement; /** - * Query data or execute sql from a query engine + * QueryExecutor submits SQL to the database engine and performs acceleration if necessary. */ public interface QueryExecutor { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java deleted file mode 100644 index 993fd4cda..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tencent.supersonic.headless.core.parser; - -import com.tencent.supersonic.headless.core.pojo.QueryStatement; - -/** - * A query parser takes semantic query request and generates SQL to be executed. - */ -public interface QueryParser { - - void parse(QueryStatement queryStatement) throws Exception; - -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/SqlParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/SqlParser.java deleted file mode 100644 index 0f2075d2a..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/SqlParser.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.tencent.supersonic.headless.core.parser; - -import com.tencent.supersonic.headless.api.pojo.enums.AggOption; -import com.tencent.supersonic.headless.core.pojo.QueryStatement; - -public interface SqlParser { - - QueryStatement explain(QueryStatement queryStatement, AggOption aggOption) throws Exception; -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticItem.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticItem.java deleted file mode 100644 index f9aeb2dd0..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticItem.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; - -public interface SemanticItem { - - public String getName(); -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Optimization.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Optimization.java deleted file mode 100644 index a811d6034..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Optimization.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql; - - -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; - - -public interface Optimization { - - public void visit(SemanticSchema semanticSchema); -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DefaultQueryPlanner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DefaultQueryPlanner.java deleted file mode 100644 index 1dafe6126..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DefaultQueryPlanner.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.tencent.supersonic.headless.core.planner; - -import com.tencent.supersonic.headless.core.executor.QueryExecutor; -import com.tencent.supersonic.headless.core.executor.accelerator.QueryAccelerator; -import com.tencent.supersonic.headless.core.pojo.QueryStatement; -import com.tencent.supersonic.headless.core.utils.ComponentFactory; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -public class DefaultQueryPlanner implements QueryPlanner { - - public QueryExecutor plan(QueryStatement queryStatement) { - optimize(queryStatement); - return route(queryStatement); - } - - private void optimize(QueryStatement queryStatement) { - for (QueryOptimizer queryOptimizer : ComponentFactory.getQueryOptimizers()) { - queryOptimizer.rewrite(queryStatement); - } - } - - public QueryExecutor route(QueryStatement queryStatement) { - for (QueryExecutor queryExecutor : ComponentFactory.getQueryExecutors()) { - if (queryExecutor.accept(queryStatement)) { - return queryExecutor; - } - } - return null; - } - - @Override - public QueryAccelerator accelerate(QueryStatement queryStatement) { - for (QueryAccelerator queryAccelerator : ComponentFactory.getQueryAccelerators()) { - if (queryAccelerator.check(queryStatement)) { - return queryAccelerator; - } - } - return null; - } -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryOptimizer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryOptimizer.java deleted file mode 100644 index d8a4ceab3..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryOptimizer.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.tencent.supersonic.headless.core.planner; - -import com.tencent.supersonic.headless.core.pojo.QueryStatement; - -/** - * A query optimizer rewrites QueryStatement with a set of optimization rules - */ -public interface QueryOptimizer { - void rewrite(QueryStatement queryStatement); -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryPlanner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryPlanner.java deleted file mode 100644 index edb28077e..000000000 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/QueryPlanner.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.tencent.supersonic.headless.core.planner; - -import com.tencent.supersonic.headless.core.executor.QueryExecutor; -import com.tencent.supersonic.headless.core.executor.accelerator.QueryAccelerator; -import com.tencent.supersonic.headless.core.pojo.QueryStatement; - -/** - * A query planner takes parsed QueryStatement and generates an optimized execution plan. - * It interacts with the optimizer to determine the most efficient way to execute the query. - */ -public interface QueryPlanner { - QueryExecutor plan(QueryStatement queryStatement); - - QueryExecutor route(QueryStatement queryStatement); - - QueryAccelerator accelerate(QueryStatement queryStatement); -} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java index 491a44bc6..913e09e10 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/pojo/QueryStatement.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.headless.core.pojo; import com.tencent.supersonic.headless.api.pojo.QueryParam; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; import lombok.Data; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Triple; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/DefaultQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java similarity index 78% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/DefaultQueryParser.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java index d90a6c66e..1fe500b77 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/DefaultQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DefaultSemanticTranslator.java @@ -1,19 +1,18 @@ -package com.tencent.supersonic.headless.core.parser; +package com.tencent.supersonic.headless.core.translator; import com.google.common.base.Strings; -import com.tencent.supersonic.common.util.StringUtil; import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper; +import com.tencent.supersonic.common.util.StringUtil; import com.tencent.supersonic.headless.api.pojo.MetricTable; import com.tencent.supersonic.headless.api.pojo.QueryParam; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; -import com.tencent.supersonic.headless.core.parser.converter.HeadlessConverter; import com.tencent.supersonic.headless.core.pojo.DataSetQueryParam; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import com.tencent.supersonic.headless.core.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.translator.converter.QueryConverter; import com.tencent.supersonic.headless.core.utils.ComponentFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -24,8 +23,23 @@ import java.util.stream.Collectors; @Component @Slf4j -@Primary -public class DefaultQueryParser implements QueryParser { +public class DefaultSemanticTranslator implements SemanticTranslator { + + public void translate(QueryStatement queryStatement) { + try { + parse(queryStatement); + optimize(queryStatement); + queryStatement.setOk(true); + } catch (Exception e) { + queryStatement.setOk(false); + } + } + + public void optimize(QueryStatement queryStatement) { + for (QueryOptimizer queryOptimizer : ComponentFactory.getQueryOptimizers()) { + queryOptimizer.rewrite(queryStatement); + } + } public void parse(QueryStatement queryStatement) throws Exception { QueryParam queryParam = queryStatement.getQueryParam(); @@ -36,7 +50,7 @@ public class DefaultQueryParser implements QueryParser { queryStatement.setMetricQueryParam(new MetricQueryParam()); } log.debug("SemanticConverter before [{}]", queryParam); - for (HeadlessConverter headlessConverter : ComponentFactory.getSemanticConverters()) { + for (QueryConverter headlessConverter : ComponentFactory.getQueryConverters()) { if (headlessConverter.accept(queryStatement)) { log.info("SemanticConverter accept [{}]", headlessConverter.getClass().getName()); headlessConverter.convert(queryStatement); @@ -45,10 +59,10 @@ public class DefaultQueryParser implements QueryParser { log.debug("SemanticConverter after {} {} {}", queryParam, queryStatement.getDataSetQueryParam(), queryStatement.getMetricQueryParam()); if (!queryStatement.getDataSetQueryParam().getSql().isEmpty()) { - queryStatement = parser(queryStatement.getDataSetQueryParam(), queryStatement); + doParse(queryStatement.getDataSetQueryParam(), queryStatement); } else { queryStatement.getMetricQueryParam().setNativeQuery(queryParam.getQueryType().isNativeAggQuery()); - queryStatement = parser(queryStatement); + doParse(queryStatement); } if (Strings.isNullOrEmpty(queryStatement.getSql()) || Strings.isNullOrEmpty(queryStatement.getSourceId())) { @@ -61,14 +75,15 @@ public class DefaultQueryParser implements QueryParser { } } - public QueryStatement parser(DataSetQueryParam dataSetQueryParam, QueryStatement queryStatement) { + public QueryStatement doParse(DataSetQueryParam dataSetQueryParam, QueryStatement queryStatement) { log.info("parser MetricReq [{}] ", dataSetQueryParam); try { if (!CollectionUtils.isEmpty(dataSetQueryParam.getTables())) { List tables = new ArrayList<>(); boolean isSingleTable = dataSetQueryParam.getTables().size() == 1; for (MetricTable metricTable : dataSetQueryParam.getTables()) { - QueryStatement tableSql = parserSql(metricTable, isSingleTable, dataSetQueryParam, queryStatement); + QueryStatement tableSql = parserSql(metricTable, isSingleTable, + dataSetQueryParam, queryStatement); if (isSingleTable && Objects.nonNull(tableSql.getDataSetQueryParam()) && !tableSql.getDataSetSimplifySql().isEmpty()) { queryStatement.setSql(tableSql.getDataSetSimplifySql()); @@ -101,15 +116,16 @@ public class DefaultQueryParser implements QueryParser { return queryStatement; } - public QueryStatement parser(QueryStatement queryStatement) { - return parser(queryStatement, AggOption.getAggregation(queryStatement.getMetricQueryParam().isNativeQuery())); + public QueryStatement doParse(QueryStatement queryStatement) { + return doParse(queryStatement, AggOption.getAggregation( + queryStatement.getMetricQueryParam().isNativeQuery())); } - public QueryStatement parser(QueryStatement queryStatement, AggOption isAgg) { + public QueryStatement doParse(QueryStatement queryStatement, AggOption isAgg) { MetricQueryParam metricQueryParam = queryStatement.getMetricQueryParam(); log.info("parser metricQueryReq [{}] isAgg [{}]", metricQueryParam, isAgg); try { - return ComponentFactory.getSqlParser().explain(queryStatement, isAgg); + ComponentFactory.getQueryParser().parse(queryStatement, isAgg); } catch (Exception e) { queryStatement.setErrMsg(e.getMessage()); log.error("parser error metricQueryReq[{}] error [{}]", metricQueryParam, e); @@ -118,8 +134,8 @@ public class DefaultQueryParser implements QueryParser { } private QueryStatement parserSql(MetricTable metricTable, Boolean isSingleMetricTable, - DataSetQueryParam dataSetQueryParam, - QueryStatement queryStatement) throws Exception { + DataSetQueryParam dataSetQueryParam, + QueryStatement queryStatement) throws Exception { MetricQueryParam metricReq = new MetricQueryParam(); metricReq.setMetrics(metricTable.getMetrics()); metricReq.setDimensions(metricTable.getDimensions()); @@ -136,7 +152,7 @@ public class DefaultQueryParser implements QueryParser { tableSql.setDataSetSql(dataSetQueryParam.getSql()); tableSql.setDataSetAlias(metricTable.getAlias()); } - tableSql = parser(tableSql, metricTable.getAggOption()); + tableSql = doParse(tableSql, metricTable.getAggOption()); if (!tableSql.isOk()) { throw new Exception(String.format("parser table [%s] error [%s]", metricTable.getAlias(), tableSql.getErrMsg())); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DetailQueryOptimizer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DetailQueryOptimizer.java similarity index 96% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DetailQueryOptimizer.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DetailQueryOptimizer.java index 987481190..0eeef09ce 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/planner/DetailQueryOptimizer.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/DetailQueryOptimizer.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.planner; +package com.tencent.supersonic.headless.core.translator; import com.google.common.base.Strings; import com.tencent.supersonic.headless.api.pojo.QueryParam; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryOptimizer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryOptimizer.java new file mode 100644 index 000000000..970104d3b --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryOptimizer.java @@ -0,0 +1,11 @@ +package com.tencent.supersonic.headless.core.translator; + +import com.tencent.supersonic.headless.core.pojo.QueryStatement; + +/** + * A query optimizer rewrites physical SQL by following a set of + * optimization rules, trying to derive the most efficient query. + */ +public interface QueryOptimizer { + void rewrite(QueryStatement queryStatement); +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryParser.java new file mode 100644 index 000000000..d4ecef5be --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/QueryParser.java @@ -0,0 +1,11 @@ +package com.tencent.supersonic.headless.core.translator; + +import com.tencent.supersonic.headless.api.pojo.enums.AggOption; +import com.tencent.supersonic.headless.core.pojo.QueryStatement; + +/** + * A query parser generates physical SQL for the QueryStatement. + */ +public interface QueryParser { + void parse(QueryStatement queryStatement, AggOption aggOption) throws Exception; +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/SemanticTranslator.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/SemanticTranslator.java new file mode 100644 index 000000000..4e1c03510 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/SemanticTranslator.java @@ -0,0 +1,13 @@ +package com.tencent.supersonic.headless.core.translator; + +import com.tencent.supersonic.headless.core.pojo.QueryStatement; + +/** + * SemanticTranslator converts semantic query statement into SQL statement that + * can be executed against physical data models. + */ +public interface SemanticTranslator { + + void translate(QueryStatement queryStatement); + +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java similarity index 80% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java index e70c9dbac..4ad5edce7 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/CalciteQueryParser.java @@ -1,13 +1,13 @@ -package com.tencent.supersonic.headless.core.parser.calcite; +package com.tencent.supersonic.headless.core.translator.calcite; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; -import com.tencent.supersonic.headless.core.parser.SqlParser; -import com.tencent.supersonic.headless.core.parser.calcite.planner.AggPlanner; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel; -import com.tencent.supersonic.headless.core.parser.calcite.schema.RuntimeOptions; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.QueryParser; +import com.tencent.supersonic.headless.core.translator.calcite.planner.AggPlanner; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; +import com.tencent.supersonic.headless.core.translator.calcite.schema.RuntimeOptions; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -17,17 +17,17 @@ import java.util.Objects; /** * the calcite parse implements */ -@Component("CalciteSqlParser") +@Component("CalciteQueryParser") @Slf4j -public class CalciteSqlParser implements SqlParser { +public class CalciteQueryParser implements QueryParser { @Override - public QueryStatement explain(QueryStatement queryStatement, AggOption isAgg) throws Exception { + public void parse(QueryStatement queryStatement, AggOption isAgg) throws Exception { MetricQueryParam metricReq = queryStatement.getMetricQueryParam(); SemanticModel semanticModel = queryStatement.getSemanticModel(); if (semanticModel == null) { queryStatement.setErrMsg("semanticSchema not found"); - return queryStatement; + return; } queryStatement.setMetricQueryParam(metricReq); SemanticSchema semanticSchema = getSemanticSchema(semanticModel, queryStatement); @@ -47,7 +47,6 @@ public class CalciteSqlParser implements SqlParser { queryStatement.setDataSetSimplifySql(simplifySql); } } - return queryStatement; } private SemanticSchema getSemanticSchema(SemanticModel semanticModel, QueryStatement queryStatement) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/Configuration.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/Configuration.java index 755efbbb2..84d7ef998 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/Configuration.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.headless.core.parser.calcite; +package com.tencent.supersonic.headless.core.translator.calcite; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSqlDialect; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSqlTypeFactoryImpl; -import com.tencent.supersonic.headless.core.parser.calcite.schema.ViewExpanderImpl; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSqlDialect; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSqlTypeFactoryImpl; +import com.tencent.supersonic.headless.core.translator.calcite.schema.ViewExpanderImpl; import com.tencent.supersonic.headless.core.utils.SqlDialectFactory; import java.util.ArrayList; import java.util.Collections; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/AggPlanner.java similarity index 83% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/AggPlanner.java index 53067b4da..a093abdb1 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/AggPlanner.java @@ -1,20 +1,20 @@ -package com.tencent.supersonic.headless.core.parser.calcite.planner; +package com.tencent.supersonic.headless.core.translator.calcite.planner; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.Configuration; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.core.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.render.FilterRender; -import com.tencent.supersonic.headless.core.parser.calcite.sql.render.OutputRender; -import com.tencent.supersonic.headless.core.parser.calcite.sql.render.SourceRender; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SchemaBuilder; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.render.FilterRender; +import com.tencent.supersonic.headless.core.translator.calcite.sql.render.OutputRender; +import com.tencent.supersonic.headless.core.translator.calcite.sql.render.SourceRender; +import com.tencent.supersonic.headless.core.translator.calcite.Configuration; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.sql.Renderer; +import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataSourceNode; import com.tencent.supersonic.headless.core.pojo.Database; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import com.tencent.supersonic.headless.core.pojo.QueryStatement; @@ -24,6 +24,7 @@ import java.util.List; import java.util.ListIterator; import java.util.Objects; import java.util.Stack; + import lombok.extern.slf4j.Slf4j; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.parser.SqlParser; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/Planner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/Planner.java similarity index 87% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/Planner.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/Planner.java index 09a069c80..01fc88a37 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/Planner.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/planner/Planner.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.planner; +package com.tencent.supersonic.headless.core.translator.calcite.planner; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Constants.java similarity index 93% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Constants.java index 61988330e..001145806 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Constants.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; public class Constants { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataSource.java similarity index 87% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataSource.java index 5d0ea7e70..8f4e917ab 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataSource.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import lombok.Builder; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataType.java similarity index 92% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataType.java index 9e3ad3671..36a06eaed 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DataType.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import java.util.Arrays; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Dimension.java similarity index 77% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Dimension.java index d3c6ec8ef..bb565f7b1 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Dimension.java @@ -1,9 +1,11 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticItem; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticItem; + import java.util.List; import java.util.Map; + import lombok.Builder; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DimensionTimeTypeParams.java similarity index 66% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DimensionTimeTypeParams.java index 3770aa1ef..249b1e1e7 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/DimensionTimeTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Identify.java similarity index 80% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Identify.java index b6ef58da0..277fc3eae 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Identify.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/JoinRelation.java similarity index 82% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/JoinRelation.java index 762bdf54c..7eddd0555 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/JoinRelation.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import java.util.List; import lombok.Builder; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Materialization.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Materialization.java index 9fb8a2bcc..a82fa2f89 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Materialization.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import java.util.ArrayList; import java.util.List; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MaterializationElement.java similarity index 72% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MaterializationElement.java index 7f3d14af8..3371f740e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MaterializationElement.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import java.util.List; import lombok.Builder; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Measure.java similarity index 84% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Measure.java index 3d2ae3cb5..aad2572ed 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Measure.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Metric.java similarity index 66% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Metric.java index 78534f845..114280024 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/Metric.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticItem; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticItem; import java.util.List; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MetricTypeParams.java similarity index 78% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MetricTypeParams.java index 4197dbd99..fa5288f7c 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/MetricTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import java.util.List; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/SemanticModel.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/SemanticModel.java similarity index 93% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/SemanticModel.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/SemanticModel.java index 61cb164c6..6c8bf66ce 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/SemanticModel.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/SemanticModel.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import com.tencent.supersonic.headless.core.pojo.Database; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/TimeRange.java similarity index 65% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/TimeRange.java index c633684e2..70e759035 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/s2sql/TimeRange.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.translator.calcite.s2sql; import lombok.Builder; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/DataSourceTable.java similarity index 98% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/DataSourceTable.java index b35755064..c4093105b 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/DataSourceTable.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import java.util.ArrayList; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/RuntimeOptions.java similarity index 76% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/RuntimeOptions.java index fd18ccab4..09a5833f4 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/RuntimeOptions.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import lombok.Builder; import lombok.Data; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SchemaBuilder.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SchemaBuilder.java index 4a09e4ed1..52c84ac5e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SchemaBuilder.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.Configuration; -import com.tencent.supersonic.headless.core.parser.calcite.sql.S2SQLSqlValidatorImpl; +import com.tencent.supersonic.headless.core.translator.calcite.Configuration; +import com.tencent.supersonic.headless.core.translator.calcite.sql.S2SQLSqlValidatorImpl; import org.apache.calcite.jdbc.CalciteSchema; import org.apache.calcite.prepare.CalciteCatalogReader; import org.apache.calcite.prepare.Prepare; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticItem.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticItem.java new file mode 100644 index 000000000..8d03edf65 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticItem.java @@ -0,0 +1,6 @@ +package com.tencent.supersonic.headless.core.translator.calcite.schema; + +public interface SemanticItem { + + public String getName(); +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSchema.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSchema.java similarity index 85% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSchema.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSchema.java index 2b60cac6e..78ac58ad9 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSchema.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSchema.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Materialization; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation; import org.apache.calcite.schema.Schema; import org.apache.calcite.schema.SchemaVersion; import org.apache.calcite.schema.Table; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlConformance.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlConformance.java similarity index 98% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlConformance.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlConformance.java index 91f4cbcd8..6f82ea2a7 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlConformance.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlConformance.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import org.apache.calcite.sql.fun.SqlLibrary; import org.apache.calcite.sql.validate.SqlConformance; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlDialect.java similarity index 97% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlDialect.java index 27269090f..af087914a 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlDialect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import com.google.common.base.Preconditions; import org.apache.calcite.sql.SqlDialect; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlTypeFactoryImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlTypeFactoryImpl.java similarity index 86% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlTypeFactoryImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlTypeFactoryImpl.java index d86073564..ec47e6ed8 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlTypeFactoryImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/SemanticSqlTypeFactoryImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import java.nio.charset.Charset; import org.apache.calcite.rel.type.RelDataTypeSystem; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/ViewExpanderImpl.java similarity index 86% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/ViewExpanderImpl.java index a1f7fe1fb..d122beead 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/schema/ViewExpanderImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.schema; +package com.tencent.supersonic.headless.core.translator.calcite.schema; import org.apache.calcite.plan.RelOptTable; import org.apache.calcite.rel.RelRoot; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Optimization.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Optimization.java new file mode 100644 index 000000000..6b415b15a --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Optimization.java @@ -0,0 +1,10 @@ +package com.tencent.supersonic.headless.core.translator.calcite.sql; + + +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; + + +public interface Optimization { + + public void visit(SemanticSchema semanticSchema); +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Renderer.java similarity index 83% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Renderer.java index 14dabf09f..cea66ff4f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/Renderer.java @@ -1,22 +1,23 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql; +package com.tencent.supersonic.headless.core.translator.calcite.sql; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MeasureNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MeasureNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; + import lombok.Data; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; @@ -48,7 +49,7 @@ public abstract class Renderer { } public static MetricNode buildMetricNode(String metric, DataSource datasource, SqlValidatorScope scope, - SemanticSchema schema, boolean nonAgg, String alias) throws Exception { + SemanticSchema schema, boolean nonAgg, String alias) throws Exception { Optional metricOpt = getMetricByName(metric, schema); MetricNode metricNode = new MetricNode(); EngineType engineType = EngineType.fromString(datasource.getType()); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/S2SQLSqlValidatorImpl.java similarity index 89% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/S2SQLSqlValidatorImpl.java index c1a8aa383..985120b1c 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/S2SQLSqlValidatorImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql; +package com.tencent.supersonic.headless.core.translator.calcite.sql; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.sql.SqlOperatorTable; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/TableView.java similarity index 91% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/TableView.java index 9b2fdedb1..f1d509f34 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/TableView.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql; +package com.tencent.supersonic.headless.core.translator.calcite.sql; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/AggFunctionNode.java similarity index 92% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/AggFunctionNode.java index e59fbded9..ff6b1639e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/AggFunctionNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import java.util.Objects; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DataSourceNode.java similarity index 95% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DataSourceNode.java index 7dc4ccac7..73efd35f9 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DataSourceNode.java @@ -1,18 +1,18 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.google.common.collect.Lists; import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.Configuration; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.extend.LateralViewExplodeNode; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SchemaBuilder; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.extend.LateralViewExplodeNode; +import com.tencent.supersonic.headless.core.translator.calcite.Configuration; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import java.util.ArrayList; import java.util.Arrays; @@ -25,6 +25,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.apache.calcite.sql.SqlBasicCall; import org.apache.calcite.sql.SqlDataTypeSpec; @@ -148,7 +149,7 @@ public class DataSourceNode extends SemanticNode { } public static void getQueryDimensionMeasure(SemanticSchema schema, MetricQueryParam metricCommand, - Set queryDimension, List measures) { + Set queryDimension, List measures) { queryDimension.addAll(metricCommand.getDimensions().stream() .map(d -> d.contains(Constants.DIMENSION_IDENTIFY) ? d.split(Constants.DIMENSION_IDENTIFY)[1] : d) .collect(Collectors.toSet())); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DimensionNode.java similarity index 90% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DimensionNode.java index bee6a3411..a7df9ba42 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/DimensionNode.java @@ -1,11 +1,13 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; + import java.util.List; import java.util.Objects; + import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/ExtendNode.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/ExtendNode.java index 0db7e931a..70b83b47f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/ExtendNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import org.apache.calcite.sql.SqlCall; import org.apache.calcite.sql.SqlInternalOperator; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/FilterNode.java similarity index 91% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/FilterNode.java index 89b4a4c6b..d84b78827 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/FilterNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import java.util.Set; import org.apache.calcite.sql.SqlBasicCall; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/IdentifyNode.java similarity index 77% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/IdentifyNode.java index 5253405b7..b100b525f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/IdentifyNode.java @@ -1,12 +1,13 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify.Type; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; + import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; + import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; @@ -26,7 +27,7 @@ public class IdentifyNode extends SemanticNode { Optional identify = identifies.stream().filter(i -> i.getName().equalsIgnoreCase(name)) .findFirst(); if (identify.isPresent()) { - return Type.FOREIGN.name().equalsIgnoreCase(identify.get().getType()); + return Identify.Type.FOREIGN.name().equalsIgnoreCase(identify.get().getType()); } return false; } @@ -35,7 +36,7 @@ public class IdentifyNode extends SemanticNode { Optional identify = identifies.stream().filter(i -> i.getName().equalsIgnoreCase(name)) .findFirst(); if (identify.isPresent()) { - return Type.PRIMARY.name().equalsIgnoreCase(identify.get().getType()); + return Identify.Type.PRIMARY.name().equalsIgnoreCase(identify.get().getType()); } return false; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/JoinNode.java similarity index 74% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/JoinNode.java index 97b47d3a3..2819942a8 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/JoinNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import lombok.Data; import org.apache.calcite.sql.SqlNode; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MeasureNode.java similarity index 89% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MeasureNode.java index 82a76f3de..356a0fb5b 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MeasureNode.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MetricNode.java similarity index 86% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MetricNode.java index dc7ecc548..dbd9133d8 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/MetricNode.java @@ -1,12 +1,14 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; + import java.util.HashMap; import java.util.Map; import java.util.Optional; + import lombok.Data; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/SemanticNode.java similarity index 97% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/SemanticNode.java index e2016e6fb..802ad358c 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/SemanticNode.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.Configuration; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSqlDialect; -import com.tencent.supersonic.headless.core.parser.calcite.sql.optimizer.FilterToGroupScanRule; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.sql.optimizer.FilterToGroupScanRule; +import com.tencent.supersonic.headless.core.translator.calcite.Configuration; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSqlDialect; import com.tencent.supersonic.headless.core.utils.SqlDialectFactory; import lombok.extern.slf4j.Slf4j; import org.apache.calcite.plan.RelOptPlanner; @@ -407,7 +407,7 @@ public abstract class SemanticNode { } public static SqlNode optimize(SqlValidatorScope scope, SemanticSchema schema, SqlNode sqlNode, - EngineType engineType) { + EngineType engineType) { try { HepProgramBuilder hepProgramBuilder = new HepProgramBuilder(); SemanticSqlDialect sqlDialect = SqlDialectFactory.getSqlDialect(engineType); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/extend/LateralViewExplodeNode.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/extend/LateralViewExplodeNode.java index 4cf1206d0..35b13655f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/node/extend/LateralViewExplodeNode.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.node.extend; +package com.tencent.supersonic.headless.core.translator.calcite.sql.node.extend; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.ExtendNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.ExtendNode; import java.util.Iterator; import java.util.Map; import java.util.Objects; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/optimizer/FilterToGroupScanRule.java similarity index 96% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/optimizer/FilterToGroupScanRule.java index c598aa289..272b3ba4a 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/optimizer/FilterToGroupScanRule.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.optimizer; +package com.tencent.supersonic.headless.core.translator.calcite.sql.optimizer; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; import java.util.ArrayList; import java.util.Iterator; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/FilterRender.java similarity index 77% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/FilterRender.java index f007f30ae..62becb7fa 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/FilterRender.java @@ -1,23 +1,24 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.translator.calcite.sql.render; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.core.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.sql.Renderer; +import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; + import org.apache.calcite.sql.SqlIdentifier; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.parser.SqlParserPos; @@ -30,7 +31,7 @@ public class FilterRender extends Renderer { @Override public void render(MetricQueryParam metricCommand, List dataSources, SqlValidatorScope scope, - SemanticSchema schema, boolean nonAgg) throws Exception { + SemanticSchema schema, boolean nonAgg) throws Exception { TableView tableView = super.tableView; SqlNode filterNode = null; List queryMetrics = new ArrayList<>(metricCommand.getMetrics()); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/JoinRender.java similarity index 94% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/JoinRender.java index c07d23b2c..df132c2e9 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/JoinRender.java @@ -1,23 +1,23 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.translator.calcite.sql.render; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Materialization; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.core.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.AggFunctionNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.IdentifyNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation; +import com.tencent.supersonic.headless.core.translator.calcite.sql.Renderer; +import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.AggFunctionNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataSourceNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.IdentifyNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; import lombok.extern.slf4j.Slf4j; import org.apache.calcite.sql.JoinConditionType; import org.apache.calcite.sql.SqlBasicCall; @@ -50,7 +50,7 @@ public class JoinRender extends Renderer { @Override public void render(MetricQueryParam metricCommand, List dataSources, SqlValidatorScope scope, - SemanticSchema schema, boolean nonAgg) throws Exception { + SemanticSchema schema, boolean nonAgg) throws Exception { String queryWhere = metricCommand.getWhere(); EngineType engineType = EngineType.fromString(schema.getSemanticModel().getDatabase().getType()); Set whereFields = new HashSet<>(); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/OutputRender.java similarity index 78% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/OutputRender.java index e13800417..9a49e95d7 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/OutputRender.java @@ -1,17 +1,18 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.translator.calcite.sql.render; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import com.tencent.supersonic.common.pojo.ColumnOrder; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.core.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.sql.Renderer; +import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; import java.util.ArrayList; import java.util.List; + import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.SqlNodeList; import org.apache.calcite.sql.fun.SqlStdOperatorTable; @@ -26,7 +27,7 @@ public class OutputRender extends Renderer { @Override public void render(MetricQueryParam metricCommand, List dataSources, SqlValidatorScope scope, - SemanticSchema schema, boolean nonAgg) throws Exception { + SemanticSchema schema, boolean nonAgg) throws Exception { TableView selectDataSet = super.tableView; EngineType engineType = EngineType.fromString(schema.getSemanticModel().getDatabase().getType()); for (String dimension : metricCommand.getDimensions()) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/SourceRender.java similarity index 89% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/SourceRender.java index a0785881a..b2646c33e 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/calcite/sql/render/SourceRender.java @@ -1,25 +1,25 @@ -package com.tencent.supersonic.headless.core.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.translator.calcite.sql.render; -import static com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants.DIMENSION_DELIMITER; +import static com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants.DIMENSION_DELIMITER; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Materialization; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; -import com.tencent.supersonic.headless.core.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.core.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.DimensionNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.IdentifyNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.core.parser.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.sql.Renderer; +import com.tencent.supersonic.headless.core.translator.calcite.sql.TableView; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DataSourceNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.DimensionNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.FilterNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.IdentifyNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.MetricNode; +import com.tencent.supersonic.headless.core.translator.calcite.sql.node.SemanticNode; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import java.util.ArrayList; import java.util.HashMap; @@ -32,6 +32,7 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; @@ -44,9 +45,9 @@ import org.springframework.util.CollectionUtils; public class SourceRender extends Renderer { public static TableView renderOne(String alias, List fieldWheres, - List reqMetrics, List reqDimensions, - String queryWhere, DataSource datasource, SqlValidatorScope scope, - SemanticSchema schema, boolean nonAgg) throws Exception { + List reqMetrics, List reqDimensions, + String queryWhere, DataSource datasource, SqlValidatorScope scope, + SemanticSchema schema, boolean nonAgg) throws Exception { TableView dataSet = new TableView(); TableView output = new TableView(); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/CalculateAggConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/CalculateAggConverter.java similarity index 98% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/CalculateAggConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/CalculateAggConverter.java index 5d90e6422..cad030f2f 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/CalculateAggConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/CalculateAggConverter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.core.parser.converter; +package com.tencent.supersonic.headless.core.translator.converter; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Constants; @@ -27,7 +27,7 @@ import org.springframework.util.CollectionUtils; */ @Component("CalculateAggConverter") @Slf4j -public class CalculateAggConverter implements HeadlessConverter { +public class CalculateAggConverter implements QueryConverter { public interface EngineSql { @@ -100,13 +100,10 @@ public class CalculateAggConverter implements HeadlessConverter { @Override public void convert(QueryStatement queryStatement) throws Exception { - DataSetQueryParam sqlCommend = queryStatement.getDataSetQueryParam(); Database database = queryStatement.getSemanticModel().getDatabase(); DataSetQueryParam dataSetQueryParam = generateSqlCommend(queryStatement, EngineType.fromString(database.getType().toUpperCase()), database.getVersion()); - sqlCommend.setSql(dataSetQueryParam.getSql()); - sqlCommend.setTables(dataSetQueryParam.getTables()); - sqlCommend.setSupportWith(dataSetQueryParam.isSupportWith()); + queryStatement.setDataSetQueryParam(dataSetQueryParam); } /** diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/DefaultDimValueConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/DefaultDimValueConverter.java similarity index 93% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/DefaultDimValueConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/DefaultDimValueConverter.java index a300a164e..26307786b 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/DefaultDimValueConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/DefaultDimValueConverter.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.core.parser.converter; +package com.tencent.supersonic.headless.core.translator.converter; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.jsqlparser.SqlAddHelper; import com.tencent.supersonic.common.jsqlparser.SqlSelectHelper; import com.tencent.supersonic.headless.api.pojo.MetricTable; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.expression.Expression; @@ -23,7 +23,7 @@ import java.util.stream.Collectors; @Slf4j @Component("DefaultDimValueConverter") -public class DefaultDimValueConverter implements HeadlessConverter { +public class DefaultDimValueConverter implements QueryConverter { @Override public boolean accept(QueryStatement queryStatement) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/ParserDefaultConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/ParserDefaultConverter.java similarity index 92% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/ParserDefaultConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/ParserDefaultConverter.java index 85bea7b19..e6a6fdef9 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/ParserDefaultConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/ParserDefaultConverter.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.core.parser.converter; +package com.tencent.supersonic.headless.core.translator.converter; import com.tencent.supersonic.common.pojo.ColumnOrder; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.headless.api.pojo.QueryParam; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils; @@ -16,11 +16,11 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; /** - * HeadlessConverter default implement + * QueryConverter default implement */ @Component("ParserDefaultConverter") @Slf4j -public class ParserDefaultConverter implements HeadlessConverter { +public class ParserDefaultConverter implements QueryConverter { @Override public boolean accept(QueryStatement queryStatement) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/HeadlessConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/QueryConverter.java similarity index 70% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/HeadlessConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/QueryConverter.java index b9371ddd7..abb4a2b15 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/HeadlessConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/QueryConverter.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.core.parser.converter; +package com.tencent.supersonic.headless.core.translator.converter; import com.tencent.supersonic.headless.core.pojo.QueryStatement; /** * to supplement,translate the request Body */ -public interface HeadlessConverter { +public interface QueryConverter { boolean accept(QueryStatement queryStatement); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/SqlVariableParseConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlVariableParseConverter.java similarity index 89% rename from headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/SqlVariableParseConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlVariableParseConverter.java index fff8e79ac..39ccbadd7 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/converter/SqlVariableParseConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/converter/SqlVariableParseConverter.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.core.parser.converter; +package com.tencent.supersonic.headless.core.translator.converter; import com.tencent.supersonic.headless.api.pojo.enums.ModelDefineType; import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import com.tencent.supersonic.headless.core.utils.SqlVariableParseUtils; import lombok.extern.slf4j.Slf4j; @@ -15,7 +15,7 @@ import java.util.Objects; @Slf4j @Component("SqlVariableParseConverter") -public class SqlVariableParseConverter implements HeadlessConverter { +public class SqlVariableParseConverter implements QueryConverter { @Override public boolean accept(QueryStatement queryStatement) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java index 04afd24f9..38cecd467 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java @@ -3,42 +3,46 @@ package com.tencent.supersonic.headless.core.utils; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.headless.core.cache.QueryCache; import com.tencent.supersonic.headless.core.executor.QueryExecutor; -import com.tencent.supersonic.headless.core.executor.accelerator.QueryAccelerator; -import com.tencent.supersonic.headless.core.parser.SqlParser; -import com.tencent.supersonic.headless.core.parser.converter.HeadlessConverter; -import com.tencent.supersonic.headless.core.planner.QueryOptimizer; +import com.tencent.supersonic.headless.core.executor.QueryAccelerator; +import com.tencent.supersonic.headless.core.translator.QueryParser; +import com.tencent.supersonic.headless.core.translator.converter.QueryConverter; +import com.tencent.supersonic.headless.core.translator.QueryOptimizer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; + import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.support.SpringFactoriesLoader; /** - * HeadlessConverter QueryOptimizer QueryExecutor object factory + * QueryConverter QueryOptimizer QueryExecutor object factory */ @Slf4j public class ComponentFactory { - private static List headlessConverters = new ArrayList<>(); + private static List queryConverters = new ArrayList<>(); private static Map queryOptimizers = new HashMap<>(); private static List queryExecutors = new ArrayList<>(); private static List queryAccelerators = new ArrayList<>(); - private static SqlParser sqlParser; + private static QueryParser queryParser; private static QueryCache queryCache; static { - initSemanticConverter(); + initQueryConverter(); initQueryOptimizer(); initQueryExecutors(); + initQueryAccelerators(); + initQueryParser(); + initQueryCache(); } - public static List getSemanticConverters() { - if (headlessConverters.isEmpty()) { - initSemanticConverter(); + public static List getQueryConverters() { + if (queryConverters.isEmpty()) { + initQueryConverter(); } - return headlessConverters; + return queryConverters; } public static List getQueryOptimizers() { @@ -62,11 +66,11 @@ public class ComponentFactory { return queryAccelerators; } - public static SqlParser getSqlParser() { - if (sqlParser == null) { + public static QueryParser getQueryParser() { + if (queryParser == null) { initQueryParser(); } - return sqlParser; + return queryParser; } public static QueryCache getQueryCache() { @@ -98,12 +102,12 @@ public class ComponentFactory { init(QueryAccelerator.class, queryAccelerators); } - private static void initSemanticConverter() { - init(HeadlessConverter.class, headlessConverters); + private static void initQueryConverter() { + init(QueryConverter.class, queryConverters); } private static void initQueryParser() { - sqlParser = init(SqlParser.class); + queryParser = init(QueryParser.class); } private static void initQueryCache() { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlDialectFactory.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlDialectFactory.java index 118bb4cb1..c33886601 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlDialectFactory.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlDialectFactory.java @@ -1,7 +1,7 @@ package com.tencent.supersonic.headless.core.utils; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSqlDialect; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSqlDialect; import java.util.HashMap; import java.util.Map; import java.util.Objects; diff --git a/headless/core/src/test/java/com/tencent/supersonic/chat/core/parser/aggregate/CalciteSqlParserTest.java b/headless/core/src/test/java/com/tencent/supersonic/chat/core/parser/aggregate/CalciteSqlParserTest.java index 3016531a2..0e9d372a6 100644 --- a/headless/core/src/test/java/com/tencent/supersonic/chat/core/parser/aggregate/CalciteSqlParserTest.java +++ b/headless/core/src/test/java/com/tencent/supersonic/chat/core/parser/aggregate/CalciteSqlParserTest.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.core.parser.aggregate; import com.alibaba.fastjson.JSON; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; -import com.tencent.supersonic.headless.core.parser.calcite.CalciteSqlParser; +import com.tencent.supersonic.headless.core.translator.calcite.CalciteQueryParser; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import org.junit.jupiter.api.Test; import org.testng.Assert; @@ -459,9 +459,9 @@ public class CalciteSqlParserTest { + " }\n" + "}"; QueryStatement queryStatement = JSON.parseObject(json, QueryStatement.class); - CalciteSqlParser calciteSqlParser = new CalciteSqlParser(); - QueryStatement explain = calciteSqlParser.explain(queryStatement, AggOption.DEFAULT); - Assert.assertEquals(explain.getSql().trim().replaceAll("\\s+", ""), + CalciteQueryParser calciteSqlParser = new CalciteQueryParser(); + calciteSqlParser.parse(queryStatement, AggOption.DEFAULT); + Assert.assertEquals(queryStatement.getSql().trim().replaceAll("\\s+", ""), "SELECT`imp_date`AS`sys_imp_date`,SUM(1)AS`pv`" + "FROM" + "`s2_pv_uv_statis`" diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java index 25170a091..888654b94 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/DimValueAspect.java @@ -46,7 +46,7 @@ public class DimValueAspect { @Autowired private DimensionService dimensionService; - @Around("execution(* com.tencent.supersonic.headless.server.service.QueryService.queryByReq(..))") + @Around("execution(* com.tencent.supersonic.headless.server.service.SemanticLayerService.queryByReq(..))") public Object handleDimValue(ProceedingJoinPoint joinPoint) throws Throwable { if (!dimensionValueMapEnable) { log.debug("dimensionValueMapEnable is false, skip dimensionValueMap"); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownChecker.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownChecker.java index a551718bf..4dced9928 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownChecker.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownChecker.java @@ -33,7 +33,7 @@ public class MetricDrillDownChecker { @Autowired private MetricService metricService; - @Around("execution(* com.tencent.supersonic.headless.core.parser.QueryParser.parse(..))") + @Around("execution(* com.tencent.supersonic.headless.core.translator.DefaultSemanticTranslator.parse(..))") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { Object[] objects = joinPoint.getArgs(); QueryStatement queryStatement = (QueryStatement) objects[0]; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/SemanticSchemaManager.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/SemanticSchemaManager.java index a993e54bd..8ea3e868a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/SemanticSchemaManager.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/manager/SemanticSchemaManager.java @@ -7,19 +7,19 @@ import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType; import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DimensionTimeTypeParams; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Materialization.TimePartType; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.MetricTypeParams; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DataType; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.DimensionTimeTypeParams; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.JoinRelation; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Materialization.TimePartType; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.MetricTypeParams; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; import com.tencent.supersonic.headless.server.pojo.yaml.DataModelYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.DimensionTimeTypeParamsTpl; import com.tencent.supersonic.headless.server.pojo.yaml.DimensionYamlTpl; @@ -29,7 +29,7 @@ import com.tencent.supersonic.headless.server.pojo.yaml.MeasureYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.MetricParamYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.MetricTypeParamsYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl; -import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.service.CatalogService; import com.tencent.supersonic.headless.server.utils.DatabaseConverter; import java.util.ArrayList; import java.util.HashMap; @@ -51,9 +51,9 @@ import org.springframework.util.CollectionUtils; @Service public class SemanticSchemaManager { - private final Catalog catalog; + private final CatalogService catalog; - public SemanticSchemaManager(Catalog catalog) { + public SemanticSchemaManager(CatalogService catalog) { this.catalog = catalog; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java index bcc420d1f..0be3087e2 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/processor/SqlInfoProcessor.java @@ -13,7 +13,7 @@ import com.tencent.supersonic.headless.chat.QueryContext; import com.tencent.supersonic.headless.chat.query.QueryManager; import com.tencent.supersonic.headless.chat.query.SemanticQuery; import com.tencent.supersonic.headless.chat.query.llm.s2sql.LLMSqlQuery; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -65,7 +65,7 @@ public class SqlInfoProcessor implements ResultProcessor { } semanticQuery.setParseInfo(parseInfo); SemanticQueryReq semanticQueryReq = semanticQuery.buildSemanticQueryReq(); - QueryService queryService = ContextUtils.getBean(QueryService.class); + SemanticLayerService queryService = ContextUtils.getBean(SemanticLayerService.class); ExplainSqlReq explainSqlReq = ExplainSqlReq.builder().queryReq(semanticQueryReq) .queryTypeEnum(QueryMethod.SQL).build(); ExplainResp explain = queryService.explain(explainSqlReq, queryContext.getUser()); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DimensionController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DimensionController.java index b5b4b7822..46c35f755 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DimensionController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DimensionController.java @@ -15,7 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.server.pojo.DimensionFilter; import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.service.DimensionService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -38,7 +38,7 @@ public class DimensionController { private DimensionService dimensionService; @Autowired - private QueryService queryService; + private SemanticLayerService queryService; /** diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/DataSetQueryApiController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/DataSetQueryApiController.java index 4f856c5b4..2df9703c7 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/DataSetQueryApiController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/DataSetQueryApiController.java @@ -5,7 +5,7 @@ import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.request.QueryDataSetReq; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; import com.tencent.supersonic.headless.server.service.DataSetService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -24,7 +24,7 @@ public class DataSetQueryApiController { @Autowired private DataSetService dataSetService; @Autowired - private QueryService queryService; + private SemanticLayerService queryService; @PostMapping("/dataSet") public Object queryByDataSet(@RequestBody QueryDataSetReq queryDataSetReq, diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/MetricQueryApiController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/MetricQueryApiController.java index beff50abf..26cf32c3b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/MetricQueryApiController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/MetricQueryApiController.java @@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryMetricReq; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; import com.tencent.supersonic.headless.server.service.DownloadService; import com.tencent.supersonic.headless.server.service.MetricService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -25,7 +25,7 @@ import javax.servlet.http.HttpServletResponse; public class MetricQueryApiController { @Autowired - private QueryService queryService; + private SemanticLayerService queryService; @Autowired private MetricService metricService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/SqlQueryApiController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/SqlQueryApiController.java index f0ff4ff91..a68f31cc2 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/SqlQueryApiController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/SqlQueryApiController.java @@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QuerySqlsReq; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.server.service.ChatQueryService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +30,7 @@ import java.util.stream.Collectors; public class SqlQueryApiController { @Autowired - private QueryService queryService; + private SemanticLayerService queryService; @Autowired private ChatQueryService chatQueryService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/TagQueryApiController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/TagQueryApiController.java index 8e943edb1..c7f685993 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/TagQueryApiController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/TagQueryApiController.java @@ -3,9 +3,10 @@ package com.tencent.supersonic.headless.server.rest.api; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -19,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController; public class TagQueryApiController { @Autowired - private QueryService queryService; + private SemanticLayerService queryService; @PostMapping("/tag") public Object queryByTag(@RequestBody QueryStructReq queryStructReq, diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/Catalog.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CatalogService.java similarity index 98% rename from headless/server/src/main/java/com/tencent/supersonic/headless/server/service/Catalog.java rename to headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CatalogService.java index 104b887b0..0dccbe1a6 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/Catalog.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/CatalogService.java @@ -18,7 +18,7 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; -public interface Catalog { +public interface CatalogService { DimensionResp getDimension(String bizName, Long modelId); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ChatQueryService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ChatQueryService.java index 7a4d3823a..78922784f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ChatQueryService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/ChatQueryService.java @@ -14,7 +14,7 @@ import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.QueryResult; /*** - * QueryService for query and search + * SemanticLayerService for query and search */ public interface ChatQueryService { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/QueryService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SemanticLayerService.java similarity index 80% rename from headless/server/src/main/java/com/tencent/supersonic/headless/server/service/QueryService.java rename to headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SemanticLayerService.java index dd51107df..d5b9c3d86 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/QueryService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/SemanticLayerService.java @@ -1,6 +1,8 @@ package com.tencent.supersonic.headless.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.headless.api.pojo.DataSetSchema; +import com.tencent.supersonic.headless.api.pojo.SemanticSchema; import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq; import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq; import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq; @@ -11,7 +13,12 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import java.util.List; -public interface QueryService { +public interface SemanticLayerService { + + SemanticSchema getSemanticSchema(); + + DataSetSchema getDataSetSchema(Long id); + SemanticQueryResp queryByReq(SemanticQueryReq queryReq, User user) throws Exception; //List queryByReqs(List queryReqs, User user) throws Exception; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CatalogImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CatalogImpl.java index 21a6d4e60..6a6149ffc 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CatalogImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/CatalogImpl.java @@ -18,7 +18,7 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.pojo.yaml.DataModelYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.DimensionYamlTpl; import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl; -import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.service.CatalogService; import com.tencent.supersonic.headless.server.service.DatabaseService; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; @@ -38,7 +38,7 @@ import java.util.stream.Collectors; @Slf4j @Component -public class CatalogImpl implements Catalog { +public class CatalogImpl implements CatalogService { private final DatabaseService databaseService; private final ModelService modelService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ChatQueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ChatQueryServiceImpl.java index 3f20ceb53..a92843cda 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ChatQueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ChatQueryServiceImpl.java @@ -56,7 +56,7 @@ import com.tencent.supersonic.headless.server.persistence.dataobject.StatisticsD import com.tencent.supersonic.headless.server.service.ChatContextService; import com.tencent.supersonic.headless.server.service.ChatQueryService; import com.tencent.supersonic.headless.server.service.DataSetService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.service.WorkflowService; import com.tencent.supersonic.headless.server.utils.ComponentFactory; import lombok.extern.slf4j.Slf4j; @@ -99,7 +99,7 @@ public class ChatQueryServiceImpl implements ChatQueryService { @Autowired private KnowledgeBaseService knowledgeBaseService; @Autowired - private QueryService queryService; + private SemanticLayerService queryService; @Autowired private DataSetService dataSetService; @Autowired diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DownloadServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DownloadServiceImpl.java index 7755f3104..a8c297c5a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DownloadServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DownloadServiceImpl.java @@ -28,7 +28,7 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.DownloadService; import com.tencent.supersonic.headless.server.service.MetricService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; @@ -64,10 +64,10 @@ public class DownloadServiceImpl implements DownloadService { private DimensionService dimensionService; - private QueryService queryService; + private SemanticLayerService queryService; public DownloadServiceImpl(MetricService metricService, - DimensionService dimensionService, QueryService queryService) { + DimensionService dimensionService, SemanticLayerService queryService) { this.metricService = metricService; this.dimensionService = dimensionService; this.queryService = queryService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/FlightServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/FlightServiceImpl.java index 1c055a9d9..86658839a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/FlightServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/FlightServiceImpl.java @@ -21,7 +21,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.server.service.FlightService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.utils.FlightUtils; import java.nio.charset.StandardCharsets; import java.sql.ResultSet; @@ -84,13 +84,13 @@ public class FlightServiceImpl extends BasicFlightSqlProducer implements FlightS private final String nameHeaderKey = "name"; private final String passwordHeaderKey = "password"; private final Calendar defaultCalendar = JdbcToArrowUtils.getUtcCalendar(); - private final QueryService queryService; + private final SemanticLayerService queryService; private final AuthenticationConfig authenticationConfig; private final UserService userService; - public FlightServiceImpl(QueryService queryService, - AuthenticationConfig authenticationConfig, - UserService userService) { + public FlightServiceImpl(SemanticLayerService queryService, + AuthenticationConfig authenticationConfig, + UserService userService) { this.queryService = queryService; this.authenticationConfig = authenticationConfig; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/QueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticLayerServiceImpl.java similarity index 81% rename from headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/QueryServiceImpl.java rename to headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticLayerServiceImpl.java index 8051f94cf..286c1cdbd 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/QueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticLayerServiceImpl.java @@ -5,8 +5,10 @@ import com.google.common.collect.Sets; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; +import com.tencent.supersonic.headless.api.pojo.DataSetSchema; import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.QueryParam; +import com.tencent.supersonic.headless.api.pojo.SemanticSchema; import com.tencent.supersonic.headless.api.pojo.request.ExplainSqlReq; import com.tencent.supersonic.headless.api.pojo.request.ItemUseReq; import com.tencent.supersonic.headless.api.pojo.request.QueryDimValueReq; @@ -23,19 +25,16 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.core.cache.QueryCache; import com.tencent.supersonic.headless.core.executor.QueryExecutor; -import com.tencent.supersonic.headless.core.executor.accelerator.QueryAccelerator; -import com.tencent.supersonic.headless.core.parser.DefaultQueryParser; -import com.tencent.supersonic.headless.core.parser.QueryParser; -import com.tencent.supersonic.headless.core.parser.calcite.s2sql.SemanticModel; -import com.tencent.supersonic.headless.core.planner.QueryPlanner; +import com.tencent.supersonic.headless.core.translator.SemanticTranslator; +import com.tencent.supersonic.headless.core.translator.calcite.s2sql.SemanticModel; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import com.tencent.supersonic.headless.core.utils.ComponentFactory; import com.tencent.supersonic.headless.server.annotation.S2DataPermission; import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager; -import com.tencent.supersonic.headless.server.service.AppService; -import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.service.CatalogService; import com.tencent.supersonic.headless.server.service.DataSetService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SchemaService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.utils.QueryReqConverter; import com.tencent.supersonic.headless.server.utils.QueryUtils; import com.tencent.supersonic.headless.server.utils.StatUtils; @@ -51,37 +50,42 @@ import java.util.Objects; @Service @Slf4j -public class QueryServiceImpl implements QueryService { +public class SemanticLayerServiceImpl implements SemanticLayerService { private StatUtils statUtils; private final QueryUtils queryUtils; private final QueryReqConverter queryReqConverter; - private final Catalog catalog; - private final AppService appService; + private final CatalogService catalog; private final SemanticSchemaManager semanticSchemaManager; - private final QueryParser queryParser; - private final QueryPlanner queryPlanner; private final DataSetService dataSetService; + private final SchemaService schemaService; + private final SemanticTranslator semanticTranslator; - public QueryServiceImpl( + public SemanticLayerServiceImpl( StatUtils statUtils, QueryUtils queryUtils, QueryReqConverter queryReqConverter, - Catalog catalog, - AppService appService, + CatalogService catalog, SemanticSchemaManager semanticSchemaManager, - DefaultQueryParser queryParser, - QueryPlanner queryPlanner, - DataSetService dataSetService) { + DataSetService dataSetService, + SchemaService schemaService, + SemanticTranslator semanticTranslator) { this.statUtils = statUtils; this.queryUtils = queryUtils; this.queryReqConverter = queryReqConverter; this.catalog = catalog; - this.appService = appService; this.semanticSchemaManager = semanticSchemaManager; - this.queryParser = queryParser; - this.queryPlanner = queryPlanner; this.dataSetService = dataSetService; + this.schemaService = schemaService; + this.semanticTranslator = semanticTranslator; + } + + public SemanticSchema getSemanticSchema() { + return new SemanticSchema(schemaService.getDataSetSchema()); + } + + public DataSetSchema getDataSetSchema(Long id) { + return schemaService.getDataSetSchema(id); } @Override @@ -179,7 +183,7 @@ public class QueryServiceImpl implements QueryService { queryStatement.setModelIds(queryStructReq.getModelIds()); queryStatement.setSemanticModel(semanticModel); queryStatement.setEnableOptimize(queryUtils.enableOptimize()); - queryStatement = plan(queryStatement); + semanticTranslator.translate(queryStatement); sqlParsers.add(queryStatement); } log.info("multi sqlParser:{}", sqlParsers); @@ -210,11 +214,8 @@ public class QueryServiceImpl implements QueryService { public ExplainResp explain(ExplainSqlReq explainSqlReq, User user) throws Exception { T queryReq = explainSqlReq.getQueryReq(); QueryStatement queryStatement = buildQueryStatement((SemanticQueryReq) queryReq, user); - queryStatement = plan(queryStatement); - return getExplainResp(queryStatement); - } + semanticTranslator.translate(queryStatement); - private ExplainResp getExplainResp(QueryStatement queryStatement) { String sql = ""; if (Objects.nonNull(queryStatement)) { sql = queryStatement.getSql(); @@ -240,33 +241,20 @@ public class QueryServiceImpl implements QueryService { return querySqlReq; } - private QueryStatement plan(QueryStatement queryStatement) throws Exception { - queryParser.parse(queryStatement); - queryPlanner.plan(queryStatement); - return queryStatement; - } - private SemanticQueryResp query(QueryStatement queryStatement) throws Exception { SemanticQueryResp semanticQueryResp = null; try { - //1 parse - queryParser.parse(queryStatement); - //2 plan - QueryExecutor queryExecutor = queryPlanner.plan(queryStatement); - //3 accelerate - QueryAccelerator queryAccelerator = queryPlanner.accelerate(queryStatement); - if (queryAccelerator != null) { - semanticQueryResp = queryAccelerator.query(queryStatement); - if (Objects.nonNull(semanticQueryResp) && !semanticQueryResp.getResultList().isEmpty()) { - log.info("query by Accelerator {}", queryAccelerator.getClass().getSimpleName()); - return semanticQueryResp; + //1 translate + semanticTranslator.translate(queryStatement); + + //2 execute + for (QueryExecutor queryExecutor : ComponentFactory.getQueryExecutors()) { + if (queryExecutor.accept(queryStatement)) { + semanticQueryResp = queryExecutor.execute(queryStatement); + queryUtils.fillItemNameInfo(semanticQueryResp, queryStatement.getSemanticSchemaResp()); } } - //4 execute - if (queryExecutor != null) { - semanticQueryResp = queryExecutor.execute(queryStatement); - queryUtils.fillItemNameInfo(semanticQueryResp, queryStatement.getSemanticSchemaResp()); - } + return semanticQueryResp; } catch (Exception e) { log.error("exception in query, e: ", e); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticService.java index 2c6484f09..0f0ea636e 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SemanticService.java @@ -19,7 +19,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryFilter; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.service.SchemaService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -44,7 +44,7 @@ public class SemanticService { private SchemaService schemaService; @Autowired - private QueryService queryService; + private SemanticLayerService queryService; public SemanticSchema getSemanticSchema() { return new SemanticSchema(schemaService.getDataSetSchema()); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java index f9c71e64b..2bf653ff7 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java @@ -15,7 +15,7 @@ import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils; import com.tencent.supersonic.headless.server.service.ModelService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagQueryService; import lombok.extern.slf4j.Slf4j; @@ -42,11 +42,11 @@ public class TagQueryServiceImpl implements TagQueryService { private final String tagValueAlias = "internalTagCount"; private final String maxDateAlias = "internalMaxDate"; private final TagMetaService tagMetaService; - private final QueryService queryService; + private final SemanticLayerService queryService; private final ModelService modelService; private final SqlGenerateUtils sqlGenerateUtils; - public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService, + public TagQueryServiceImpl(TagMetaService tagMetaService, SemanticLayerService queryService, ModelService modelService, SqlGenerateUtils sqlGenerateUtils) { this.tagMetaService = tagMetaService; this.queryService = queryService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ComponentFactory.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ComponentFactory.java index 4d1d111ec..4a6451ef3 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ComponentFactory.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ComponentFactory.java @@ -13,7 +13,7 @@ import java.util.ArrayList; import java.util.List; /** - * HeadlessConverter QueryOptimizer QueryExecutor object factory + * QueryConverter QueryOptimizer QueryExecutor object factory */ @Slf4j public class ComponentFactory { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java index b01950abd..b05f4d78f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java @@ -38,7 +38,7 @@ import com.tencent.supersonic.headless.server.persistence.dataobject.DictTaskDO; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.ModelService; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.headless.server.service.TagMetaService; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -81,13 +81,13 @@ public class DictUtils { private final DimensionService dimensionService; private final MetricService metricService; - private final QueryService queryService; + private final SemanticLayerService queryService; private final ModelService modelService; private final TagMetaService tagMetaService; public DictUtils(DimensionService dimensionService, MetricService metricService, - QueryService queryService, + SemanticLayerService queryService, ModelService modelService, @Lazy TagMetaService tagMetaService) { this.dimensionService = dimensionService; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryStructUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryStructUtils.java index e698e7364..142fa9eb5 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryStructUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryStructUtils.java @@ -19,7 +19,7 @@ import com.tencent.supersonic.headless.api.pojo.response.MetricResp; import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.server.pojo.MetaFilter; -import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.service.CatalogService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Triple; @@ -62,12 +62,12 @@ public class QueryStructUtils { private final DateModeUtils dateModeUtils; private final SqlFilterUtils sqlFilterUtils; - private final Catalog catalog; + private final CatalogService catalog; private String variablePrefix = "'${"; public QueryStructUtils( DateModeUtils dateModeUtils, - SqlFilterUtils sqlFilterUtils, @Lazy Catalog catalog) { + SqlFilterUtils sqlFilterUtils, @Lazy CatalogService catalog) { this.dateModeUtils = dateModeUtils; this.sqlFilterUtils = sqlFilterUtils; diff --git a/headless/server/src/test/java/com/tencent/supersonic/headless/server/calcite/HeadlessParserServiceTest.java b/headless/server/src/test/java/com/tencent/supersonic/headless/server/calcite/HeadlessParserServiceTest.java index 07a0940dd..42576cec9 100644 --- a/headless/server/src/test/java/com/tencent/supersonic/headless/server/calcite/HeadlessParserServiceTest.java +++ b/headless/server/src/test/java/com/tencent/supersonic/headless/server/calcite/HeadlessParserServiceTest.java @@ -4,8 +4,8 @@ import com.tencent.supersonic.common.pojo.ColumnOrder; import com.tencent.supersonic.headless.api.pojo.enums.AggOption; import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.api.pojo.response.SqlParserResp; -import com.tencent.supersonic.headless.core.parser.calcite.planner.AggPlanner; -import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSchema; +import com.tencent.supersonic.headless.core.translator.calcite.planner.AggPlanner; +import com.tencent.supersonic.headless.core.translator.calcite.schema.SemanticSchema; import com.tencent.supersonic.headless.core.pojo.MetricQueryParam; import com.tencent.supersonic.headless.core.pojo.QueryStatement; import com.tencent.supersonic.headless.server.manager.SemanticSchemaManager; diff --git a/launchers/standalone/src/main/resources/META-INF/spring.factories b/launchers/standalone/src/main/resources/META-INF/spring.factories index 8d5f155a4..50c2bd0dd 100644 --- a/launchers/standalone/src/main/resources/META-INF/spring.factories +++ b/launchers/standalone/src/main/resources/META-INF/spring.factories @@ -25,21 +25,21 @@ com.tencent.supersonic.headless.chat.parser.llm.DataSetResolver=\ ### headless-core SPIs -com.tencent.supersonic.headless.core.parser.converter.HeadlessConverter=\ - com.tencent.supersonic.headless.core.parser.converter.DefaultDimValueConverter,\ - com.tencent.supersonic.headless.core.parser.converter.SqlVariableParseConverter,\ - com.tencent.supersonic.headless.core.parser.converter.CalculateAggConverter,\ - com.tencent.supersonic.headless.core.parser.converter.ParserDefaultConverter +com.tencent.supersonic.headless.core.translator.converter.QueryConverter=\ + com.tencent.supersonic.headless.core.translator.converter.DefaultDimValueConverter,\ + com.tencent.supersonic.headless.core.translator.converter.SqlVariableParseConverter,\ + com.tencent.supersonic.headless.core.translator.converter.CalculateAggConverter,\ + com.tencent.supersonic.headless.core.translator.converter.ParserDefaultConverter -com.tencent.supersonic.headless.core.planner.QueryOptimizer=\ - com.tencent.supersonic.headless.core.planner.DetailQueryOptimizer +com.tencent.supersonic.headless.core.translator.QueryOptimizer=\ + com.tencent.supersonic.headless.core.translator.DetailQueryOptimizer + +com.tencent.supersonic.headless.core.translator.QueryParser=\ + com.tencent.supersonic.headless.core.translator.calcite.CalciteQueryParser com.tencent.supersonic.headless.core.executor.QueryExecutor=\ com.tencent.supersonic.headless.core.executor.JdbcExecutor -com.tencent.supersonic.headless.core.parser.SqlParser=\ - com.tencent.supersonic.headless.core.parser.calcite.CalciteSqlParser - com.tencent.supersonic.headless.core.cache.QueryCache=\ com.tencent.supersonic.headless.core.cache.DefaultQueryCache diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/evaluation/Text2SQLEval.java b/launchers/standalone/src/test/java/com/tencent/supersonic/evaluation/Text2SQLEval.java index 2f28323e0..baf8c7c00 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/evaluation/Text2SQLEval.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/evaluation/Text2SQLEval.java @@ -84,7 +84,7 @@ public class Text2SQLEval extends BaseTest { AgentConfig agentConfig = new AgentConfig(); agentConfig.getTools().add(getLLMQueryTool()); agent.setAgentConfig(JSONObject.toJSONString(agentConfig)); - agent.setLlmConfig(getLLMConfig(LLMType.GPT)); + agent.setLlmConfig(getLLMConfig(LLMType.DEEPSEEK)); MultiTurnConfig multiTurnConfig = new MultiTurnConfig(); multiTurnConfig.setEnableMultiTurn(enableMultiturn); agent.setMultiTurnConfig(multiTurnConfig); @@ -146,4 +146,5 @@ public class Text2SQLEval extends BaseTest { return new LLMConfig("open_ai", baseUrl, apiKey, modelName, temperature); } + } diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/BaseTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/BaseTest.java index d15865405..8d3b13347 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/BaseTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/BaseTest.java @@ -12,7 +12,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; -import com.tencent.supersonic.headless.server.service.QueryService; +import com.tencent.supersonic.headless.server.service.SemanticLayerService; import com.tencent.supersonic.util.DataUtils; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -26,14 +26,14 @@ import static java.time.LocalDate.now; public class BaseTest extends BaseApplication { @Autowired - protected QueryService queryService; + protected SemanticLayerService semanticLayerService; protected SemanticQueryResp queryBySql(String sql) throws Exception { return queryBySql(sql, User.getFakeUser()); } protected SemanticQueryResp queryBySql(String sql, User user) throws Exception { - return queryService.queryByReq(buildQuerySqlReq(sql), user); + return semanticLayerService.queryByReq(buildQuerySqlReq(sql), user); } protected SemanticQueryReq buildQuerySqlReq(String sql) { diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/ExplainTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/ExplainTest.java index ed662eab3..1df37ea72 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/ExplainTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/ExplainTest.java @@ -25,7 +25,7 @@ public class ExplainTest extends BaseTest { .queryTypeEnum(QueryMethod.SQL) .queryReq(QueryReqBuilder.buildS2SQLReq(sql, DataUtils.getMetricAgentView())) .build(); - ExplainResp explain = queryService.explain(explainSqlReq, User.getFakeUser()); + ExplainResp explain = semanticLayerService.explain(explainSqlReq, User.getFakeUser()); assertNotNull(explain); assertNotNull(explain.getSql()); assertTrue(explain.getSql().contains("department")); @@ -39,7 +39,7 @@ public class ExplainTest extends BaseTest { .queryTypeEnum(QueryMethod.STRUCT) .queryReq(queryStructReq) .build(); - ExplainResp explain = queryService.explain(explainSqlReq, User.getFakeUser()); + ExplainResp explain = semanticLayerService.explain(explainSqlReq, User.getFakeUser()); assertNotNull(explain); assertNotNull(explain.getSql()); assertTrue(explain.getSql().contains("department")); diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java index 6968e1af9..4a8a55836 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByMetricTest.java @@ -68,6 +68,6 @@ public class QueryByMetricTest extends BaseTest { private SemanticQueryResp queryByMetric(QueryMetricReq queryMetricReq, User user) throws Exception { QueryStructReq convert = metricService.convert(queryMetricReq); - return queryService.queryByReq(convert.convert(), user); + return semanticLayerService.queryByReq(convert.convert(), user); } } diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByStructTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByStructTest.java index a450b351d..3e917ff78 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByStructTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryByStructTest.java @@ -46,7 +46,7 @@ public class QueryByStructTest extends BaseTest { public void testDetailQuery() throws Exception { QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("user_name", "department"), QueryType.DETAIL); - SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, User.getFakeUser()); + SemanticQueryResp semanticQueryResp = semanticLayerService.queryByReq(queryStructReq, User.getFakeUser()); assertEquals(3, semanticQueryResp.getColumns().size()); QueryColumn firstColumn = semanticQueryResp.getColumns().get(0); assertEquals("用户", firstColumn.getName()); @@ -60,7 +60,7 @@ public class QueryByStructTest extends BaseTest { @Test public void testSumQuery() throws Exception { QueryStructReq queryStructReq = buildQueryStructReq(null); - SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq, User.getFakeUser()); + SemanticQueryResp semanticQueryResp = semanticLayerService.queryByReq(queryStructReq, User.getFakeUser()); assertEquals(1, semanticQueryResp.getColumns().size()); QueryColumn queryColumn = semanticQueryResp.getColumns().get(0); assertEquals("访问次数", queryColumn.getName()); @@ -70,7 +70,7 @@ public class QueryByStructTest extends BaseTest { @Test public void testGroupByQuery() throws Exception { QueryStructReq queryStructReq = buildQueryStructReq(Arrays.asList("department")); - SemanticQueryResp result = queryService.queryByReq(queryStructReq, User.getFakeUser()); + SemanticQueryResp result = semanticLayerService.queryByReq(queryStructReq, User.getFakeUser()); assertEquals(2, result.getColumns().size()); QueryColumn firstColumn = result.getColumns().get(0); QueryColumn secondColumn = result.getColumns().get(1); @@ -91,7 +91,7 @@ public class QueryByStructTest extends BaseTest { dimensionFilters.add(filter); queryStructReq.setDimensionFilters(dimensionFilters); - SemanticQueryResp result = queryService.queryByReq(queryStructReq, User.getFakeUser()); + SemanticQueryResp result = semanticLayerService.queryByReq(queryStructReq, User.getFakeUser()); assertEquals(2, result.getColumns().size()); QueryColumn firstColumn = result.getColumns().get(0); QueryColumn secondColumn = result.getColumns().get(1); @@ -106,7 +106,7 @@ public class QueryByStructTest extends BaseTest { User alice = new User(2L, "alice", "alice", "alice@email", 0); QueryStructReq queryStructReq1 = buildQueryStructReq(Arrays.asList("department")); assertThrows(InvalidPermissionException.class, - () -> queryService.queryByReq(queryStructReq1, alice)); + () -> semanticLayerService.queryByReq(queryStructReq1, alice)); } @Test @@ -116,7 +116,7 @@ public class QueryByStructTest extends BaseTest { aggregator.setFunc(AggOperatorEnum.SUM); aggregator.setColumn("stay_hours"); QueryStructReq queryStructReq1 = buildQueryStructReq(Arrays.asList("department"), aggregator); - SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq1, tom); + SemanticQueryResp semanticQueryResp = semanticLayerService.queryByReq(queryStructReq1, tom); Assertions.assertEquals(false, semanticQueryResp.getColumns().get(1).getAuthorized()); Assertions.assertEquals("******", semanticQueryResp.getResultList().get(0).get("stay_hours")); } @@ -128,7 +128,7 @@ public class QueryByStructTest extends BaseTest { aggregator.setFunc(AggOperatorEnum.SUM); aggregator.setColumn("stay_hours"); QueryStructReq queryStructReq1 = buildQueryStructReq(Arrays.asList("department"), aggregator); - SemanticQueryResp semanticQueryResp = queryService.queryByReq(queryStructReq1, tom); + SemanticQueryResp semanticQueryResp = semanticLayerService.queryByReq(queryStructReq1, tom); Assertions.assertNotNull(semanticQueryResp.getQueryAuthorization().getMessage()); Assertions.assertTrue(semanticQueryResp.getSql().contains("`user_name` = 'tom'")); } diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryDimensionTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryDimensionTest.java index a9511ada6..5b2909fae 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryDimensionTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/QueryDimensionTest.java @@ -14,7 +14,7 @@ public class QueryDimensionTest extends BaseTest { queryDimValueReq.setModelId(1L); queryDimValueReq.setDimensionBizName("department"); - SemanticQueryResp queryResp = queryService.queryDimValue(queryDimValueReq, User.getFakeUser()); + SemanticQueryResp queryResp = semanticLayerService.queryDimValue(queryDimValueReq, User.getFakeUser()); Assert.assertNotNull(queryResp.getResultList()); Assert.assertEquals(4, queryResp.getResultList().size()); } diff --git a/launchers/standalone/src/test/resources/META-INF/spring.factories b/launchers/standalone/src/test/resources/META-INF/spring.factories deleted file mode 100644 index 70e918881..000000000 --- a/launchers/standalone/src/test/resources/META-INF/spring.factories +++ /dev/null @@ -1,90 +0,0 @@ -### headless-chat SPIs - -com.tencent.supersonic.headless.chat.mapper.SchemaMapper=\ - com.tencent.supersonic.headless.chat.mapper.EmbeddingMapper, \ - com.tencent.supersonic.headless.chat.mapper.KeywordMapper, \ - com.tencent.supersonic.headless.chat.mapper.QueryFilterMapper, \ - com.tencent.supersonic.headless.chat.mapper.EntityMapper - -com.tencent.supersonic.headless.chat.parser.SemanticParser=\ - com.tencent.supersonic.headless.chat.parser.rule.RuleSqlParser, \ - com.tencent.supersonic.headless.chat.parser.llm.LLMSqlParser, \ - com.tencent.supersonic.headless.chat.parser.QueryTypeParser - -com.tencent.supersonic.headless.chat.corrector.SemanticCorrector=\ - com.tencent.supersonic.headless.chat.corrector.SchemaCorrector, \ - com.tencent.supersonic.headless.chat.corrector.TimeCorrector, \ - com.tencent.supersonic.headless.chat.corrector.GrammarCorrector - -com.tencent.supersonic.headless.chat.knowledge.file.FileHandler=\ - com.tencent.supersonic.headless.chat.knowledge.file.FileHandlerImpl - -com.tencent.supersonic.headless.chat.parser.llm.DataSetResolver=\ - com.tencent.supersonic.headless.chat.parser.llm.HeuristicDataSetResolver - - -### headless-core SPIs - -com.tencent.supersonic.headless.core.parser.converter.HeadlessConverter=\ - com.tencent.supersonic.headless.core.parser.converter.DefaultDimValueConverter,\ - com.tencent.supersonic.headless.core.parser.converter.SqlVariableParseConverter,\ - com.tencent.supersonic.headless.core.parser.converter.CalculateAggConverter,\ - com.tencent.supersonic.headless.core.parser.converter.ParserDefaultConverter - -com.tencent.supersonic.headless.core.planner.QueryOptimizer=\ - com.tencent.supersonic.headless.core.planner.DetailQueryOptimizer - -com.tencent.supersonic.headless.core.executor.QueryExecutor=\ - com.tencent.supersonic.headless.core.executor.JdbcExecutor - -com.tencent.supersonic.headless.core.parser.SqlParser=\ - com.tencent.supersonic.headless.core.parser.calcite.CalciteSqlParser - -com.tencent.supersonic.headless.core.cache.QueryCache=\ - com.tencent.supersonic.headless.core.cache.DefaultQueryCache - - -### headless-server SPIs - -com.tencent.supersonic.headless.server.processor.ResultProcessor=\ - com.tencent.supersonic.headless.server.processor.ParseInfoProcessor, \ - com.tencent.supersonic.headless.server.processor.SqlInfoProcessor - - -### chat-server SPIs - -com.tencent.supersonic.chat.server.parser.ChatParser=\ - com.tencent.supersonic.chat.server.parser.NL2PluginParser, \ - com.tencent.supersonic.chat.server.parser.MultiTurnParser,\ - com.tencent.supersonic.chat.server.parser.NL2SQLParser - -com.tencent.supersonic.chat.server.executor.ChatExecutor=\ - com.tencent.supersonic.chat.server.executor.PluginExecutor, \ - com.tencent.supersonic.chat.server.executor.SqlExecutor - -com.tencent.supersonic.chat.server.plugin.recognize.PluginRecognizer=\ - com.tencent.supersonic.chat.server.plugin.recognize.embedding.EmbeddingRecallRecognizer - -com.tencent.supersonic.chat.server.processor.parse.ParseResultProcessor=\ - com.tencent.supersonic.chat.server.processor.parse.QueryRecommendProcessor,\ - com.tencent.supersonic.chat.server.processor.parse.EntityInfoProcessor,\ - com.tencent.supersonic.chat.server.processor.parse.TimeCostProcessor - -com.tencent.supersonic.chat.server.processor.execute.ExecuteResultProcessor=\ - com.tencent.supersonic.chat.server.processor.execute.MetricRecommendProcessor,\ - com.tencent.supersonic.chat.server.processor.execute.DimensionRecommendProcessor,\ - com.tencent.supersonic.chat.server.processor.execute.MetricRatioProcessor - -### auth-authentication SPIs - -com.tencent.supersonic.auth.authentication.interceptor.AuthenticationInterceptor=\ - com.tencent.supersonic.auth.authentication.interceptor.DefaultAuthenticationInterceptor - -com.tencent.supersonic.auth.api.authentication.adaptor.UserAdaptor=\ - com.tencent.supersonic.auth.authentication.adaptor.DefaultUserAdaptor - - -### common SPIs - -dev.langchain4j.store.embedding.S2EmbeddingStore=\ - dev.langchain4j.store.embedding.InMemoryS2EmbeddingStore