From e7f13572d77fc71b085b3054129f253bc382a1b1 Mon Sep 17 00:00:00 2001 From: LXW <1264174498@qq.com> Date: Tue, 2 Jan 2024 16:43:28 +0800 Subject: [PATCH] (improvement)(headless) Modify the headless module structure to api, core and server (#588) Co-authored-by: jolunoluo --- chat/api/pom.xml | 2 +- .../api/component/SemanticInterpreter.java | 28 +-- chat/core/pom.xml | 4 +- .../chat/config/EntityInternalDetail.java | 4 +- .../chat/mapper/EmbeddingMatchStrategy.java | 14 +- .../parser/sql/llm/LLMRequestService.java | 4 +- .../execute/MetricRecommendProcessor.java | 2 +- .../chat/query/BaseSemanticQuery.java | 14 +- .../llm/analytics/MetricAnalyzeQuery.java | 4 +- .../chat/query/llm/s2sql/LLMSqlQuery.java | 4 +- .../chat/query/rule/RuleSemanticQuery.java | 6 +- .../query/rule/metric/MetricFilterQuery.java | 4 +- .../rule/metric/MetricSemanticQuery.java | 2 +- .../query/rule/metric/MetricTagQuery.java | 4 +- .../chat/rest/ChatConfigController.java | 12 +- .../chat/service/SemanticService.java | 4 +- .../chat/service/impl/ConfigServiceImpl.java | 12 +- .../chat/service/impl/PluginServiceImpl.java | 2 +- .../chat/service/impl/QueryServiceImpl.java | 4 +- .../supersonic/chat/utils/DictMetaHelper.java | 4 +- .../chat/utils/DictQueryHelper.java | 4 +- .../chat/utils/QueryReqBuilder.java | 6 +- .../chat/test/context/ContextTest.java | 14 +- .../test/context/MockBeansConfiguration.java | 35 ++-- .../chat/utils/QueryReqBuilderTest.java | 4 +- chat/knowledge/pom.xml | 2 +- .../semantic/BaseSemanticInterpreter.java | 2 +- .../semantic/LocalSemanticInterpreter.java | 38 ++-- .../semantic/ModelSchemaBuilder.java | 12 +- .../semantic/RemoteSemanticInterpreter.java | 30 +-- headless/api/pom.xml | 65 +++++-- .../headless/api/rest/ApiQueryController.java | 43 ----- .../headless/api/service/ApiQueryService.java | 47 ----- .../api/service/impl/ApiQueryServiceImpl.java | 177 ------------------ .../common/core}/enums/AggOption.java | 2 +- .../common/core}/enums/QueryOptMode.java | 2 +- .../common/core/enums/QueryTypeBack.java} | 10 +- .../headless/common/core}/pojo/Cache.java | 2 +- .../common/core}/pojo/MetricTable.java | 7 +- .../headless/common/core}/pojo/Param.java | 6 +- .../core/pojo/SingleItemQueryResult.java | 15 ++ .../core}/request/BatchDownloadReq.java | 2 +- .../core}/request/DownloadStructReq.java | 2 +- .../common/core}/request/ExplainSqlReq.java | 6 +- .../common/core}/request/ItemUseReq.java | 2 +- .../common/core}/request/MetaQueryApiReq.java | 2 +- .../common/core}/request/MetricReq.java | 2 +- .../common/core}/request/ParseSqlReq.java | 4 +- .../core}/request/QueryDimValueReq.java | 2 +- .../common/core/request/QueryItemReq.java} | 7 +- .../core}/request/QueryMultiStructReq.java | 2 +- .../common/core}/request/QueryS2SQLReq.java | 2 +- .../common/core}/request/QueryStructReq.java | 6 +- .../core/response/ItemQueryResultResp.java | 15 ++ .../common/core}/response/ItemUseResp.java | 2 +- .../common/core}/response/SqlParserResp.java | 2 +- .../common/server/enums/AppStatus.java} | 12 +- .../common/server/enums/DataType.java} | 14 +- .../common/server/enums/DimensionType.java | 9 + .../common/server/enums/IdentifyType.java | 8 + .../common/server/enums/MetricType.java | 9 + .../common/server/enums/ModelSourceType.java} | 12 +- .../common/server/enums/QueryType.java} | 10 +- .../common/server/enums/SemanticType.java | 10 + .../common/server}/pojo/AppConfig.java | 2 +- .../headless/common/server}/pojo/Dim.java | 2 +- .../common/server}/pojo/DimValueMap.java | 2 +- .../server}/pojo/DimensionTimeTypeParams.java | 2 +- .../server}/pojo/DrillDownDimension.java | 2 +- .../headless/common/server}/pojo/Entity.java | 2 +- .../common/server}/pojo/Identify.java | 2 +- .../headless/common/server}/pojo/Item.java | 2 +- .../common/server}/pojo/ItemDateFilter.java | 2 +- .../headless/common/server}/pojo/Measure.java | 2 +- .../pojo/MetricQueryDefaultConfig.java | 2 +- .../common/server}/pojo/MetricTypeParams.java | 2 +- .../common/server}/pojo/ModelDetail.java | 6 +- .../common/server}/pojo/QueryResult.java | 7 +- .../common/server}/pojo/QueryStat.java | 2 +- .../common/server}/pojo/RelateDimension.java | 2 +- .../common/server}/pojo/SchemaItem.java | 2 +- .../common/server}/request/AppQueryReq.java | 8 +- .../common/server}/request/AppReq.java | 4 +- .../common/server}/request/DatabaseReq.java | 6 +- .../common/server}/request/DateInfoReq.java | 2 +- .../common/server}/request/DimensionReq.java | 6 +- .../common/server}/request/DomainReq.java | 4 +- .../server}/request/DomainUpdateReq.java | 2 +- .../common/server}/request/MetaBatchReq.java | 2 +- .../common/server}/request/MetricBaseReq.java | 6 +- .../common/server}/request/MetricReq.java | 16 +- .../common/server}/request/ModelReq.java | 10 +- .../server}/request/ModelSchemaFilterReq.java | 2 +- .../server}/request/PageDimensionReq.java | 2 +- .../common/server}/request/PageMetricReq.java | 2 +- .../server}/request/PageSchemaItemReq.java | 2 +- .../common/server}/request/SqlExecuteReq.java | 2 +- .../common/server}/request/ViewInfoReq.java | 2 +- .../server}/response/AppDetailResp.java | 2 +- .../common/server}/response/AppResp.java | 8 +- .../common/server}/response/DatabaseResp.java | 9 +- .../server}/response/DimSchemaResp.java | 2 +- .../server}/response/DimensionResp.java | 6 +- .../common/server}/response/DomainResp.java | 11 +- .../common/server}/response/ExplainResp.java | 5 +- .../common/server}/response/MeasureResp.java | 2 +- .../common/server}/response/MetricResp.java | 12 +- .../server}/response/MetricSchemaResp.java | 2 +- .../common/server}/response/ModelResp.java | 12 +- .../server}/response/ModelSchemaRelaResp.java | 2 +- .../server}/response/ModelSchemaResp.java | 4 +- .../response/QueryResultWithSchemaResp.java | 10 +- headless/common/pom.xml | 69 ------- .../common/model/enums/DimensionTypeEnum.java | 10 - .../common/model/enums/IdentifyTypeEnum.java | 9 - .../common/model/enums/MetricTypeEnum.java | 9 - .../common/model/enums/OperatorEnum.java | 32 ---- .../common/model/enums/SemanticTypeEnum.java | 10 - .../common/model/pojo/DatasourceType.java | 19 -- .../query/pojo/ApiQuerySingleResult.java | 15 -- .../common/query/pojo/Materialization.java | 16 -- .../query/request/QueryApiPreviewReq.java | 14 -- .../query/response/ApiQueryResultResp.java | 15 -- headless/{query => core}/pom.xml | 6 +- .../core}/annotation/ApiHeaderCheck.java | 2 +- .../core}/annotation/S2SQLDataPermission.java | 2 +- .../annotation/StructDataPermission.java | 2 +- .../core}/aspect/ApiHeaderCheckAspect.java | 12 +- .../core/aspect/AuthCheckBaseAspect.java} | 20 +- .../headless/core/aspect}/DimValueAspect.java | 24 +-- .../core}/aspect/S2SQLDataAspect.java | 49 +++-- .../core}/aspect/StructDataAspect.java | 43 ++--- .../headless/core}/executor/JdbcExecutor.java | 12 +- .../headless/core/executor/QueryExecutor.java | 12 ++ .../headless/core}/optimizer/DetailQuery.java | 7 +- .../core/optimizer/QueryOptimizer.java | 8 + .../core/parser/HeadlessConverter.java | 12 ++ .../headless/core}/parser/QueryParser.java | 27 +-- .../headless/core/parser/SqlParser.java | 10 + .../parser/calcite/CalciteSqlParser.java | 20 +- .../core}/parser/calcite/Configuration.java | 8 +- .../parser/calcite/HeadlessSchemaManager.java | 63 ++++--- .../parser/calcite/planner/AggPlanner.java | 37 ++-- .../planner/MaterializationPlanner.java | 32 ++-- .../core/parser/calcite/planner/Planner.java | 17 ++ .../core}/parser/calcite/s2sql/Constants.java | 2 +- .../parser/calcite/s2sql/DataSource.java | 5 +- .../core}/parser/calcite/s2sql/DataType.java | 2 +- .../core}/parser/calcite/s2sql/Dimension.java | 4 +- .../s2sql/DimensionTimeTypeParams.java | 2 +- .../parser/calcite/s2sql/HeadlessModel.java | 2 +- .../core}/parser/calcite/s2sql/Identify.java | 2 +- .../parser/calcite/s2sql/JoinRelation.java | 2 +- .../parser/calcite/s2sql/Materialization.java | 2 +- .../calcite/s2sql/MaterializationElement.java | 2 +- .../core}/parser/calcite/s2sql/Measure.java | 2 +- .../core}/parser/calcite/s2sql/Metric.java | 5 +- .../calcite/s2sql/MetricTypeParams.java | 2 +- .../core}/parser/calcite/s2sql/TimeRange.java | 2 +- .../calcite/schema/DataSourceTable.java | 2 +- .../parser/calcite/schema/HeadlessSchema.java | 14 +- .../schema/HeadlessSqlConformance.java | 2 +- .../schema/HeadlessSqlTypeFactoryImpl.java | 2 +- .../parser/calcite/schema/RuntimeOptions.java | 2 +- .../parser/calcite/schema/SchemaBuilder.java | 7 +- .../parser/calcite/schema/SemanticItem.java | 6 + .../calcite/schema/SemanticSqlDialect.java | 2 +- .../calcite/schema/ViewExpanderImpl.java | 2 +- .../core/parser/calcite/sql/Optimization.java | 10 + .../core}/parser/calcite/sql/Renderer.java | 24 +-- .../calcite/sql/S2SQLSqlValidatorImpl.java | 2 +- .../core}/parser/calcite/sql/TableView.java | 4 +- .../calcite/sql/node/AggFunctionNode.java | 2 +- .../calcite/sql/node/DataSourceNode.java | 24 +-- .../calcite/sql/node/DimensionNode.java | 6 +- .../parser/calcite/sql/node/ExtendNode.java | 2 +- .../parser/calcite/sql/node/FilterNode.java | 2 +- .../parser/calcite/sql/node/IdentifyNode.java | 6 +- .../parser/calcite/sql/node/JoinNode.java | 2 +- .../parser/calcite/sql/node/MeasureNode.java | 4 +- .../parser/calcite/sql/node/MetricNode.java | 4 +- .../parser/calcite/sql/node/SemanticNode.java | 8 +- .../node/extend/LateralViewExplodeNode.java | 4 +- .../sql/optimizer/FilterToGroupScanRule.java | 5 +- .../calcite/sql/render/FilterRender.java | 25 +-- .../parser/calcite/sql/render/JoinRender.java | 99 +++++----- .../calcite/sql/render/OutputRender.java | 17 +- .../calcite/sql/render/SourceRender.java | 52 ++--- .../parser/convert/CalculateAggConverter.java | 37 ++-- .../convert/DefaultDimValueConverter.java | 25 +-- .../parser/convert/MetricCheckConverter.java | 29 +-- .../convert/ParserDefaultConverter.java | 21 ++- .../parser/convert/QueryReqConverter.java | 51 ++--- .../parser/convert/ZipperModelConverter.java | 27 +-- .../core}/persistence/mapper/StatMapper.java | 6 +- .../core/persistence}/pojo/DataDownload.java | 2 +- .../persistence/pojo/ParserSvrResponse.java | 2 +- .../persistence/pojo/QueryStatement.java | 8 +- .../repository/StatRepository.java | 15 ++ .../repository/StatRepositoryImpl.java | 22 ++- .../headless/core}/rest/QueryController.java | 58 +++--- .../headless/core}/rest/SchemaController.java | 27 +-- .../core}/service/DownloadService.java | 6 +- .../core/service/HeadlessQueryEngine.java | 21 +++ .../headless/core/service/QueryService.java | 47 +++++ .../headless/core/service/SchemaService.java | 28 +++ .../service/impl}/DownloadServiceImpl.java | 32 ++-- .../impl}/HeadlessQueryEngineImpl.java | 25 +-- .../core/service/impl}/QueryServiceImpl.java | 163 +++++++++++++--- .../core/service/impl}/SchemaServiceImpl.java | 36 ++-- .../core}/utils/ComponentFactory.java | 26 +-- .../core}/utils/DataTransformUtils.java | 2 +- .../core}/utils/QueryStructUtils.java | 69 +++---- .../headless/core}/utils/QueryUtils.java | 47 ++--- .../core}/utils/SqlGenerateUtils.java | 4 +- .../headless/core}/utils/StatUtils.java | 34 ++-- .../src/main/resources/mapper/StatMapper.xml | 6 +- .../calcite/HeadlessParserServiceTest.java | 28 +-- .../calcite/MaterializationQueryTest.java | 12 +- .../service/DownloadServiceImplTest.java | 29 +-- .../query/utils/DataTransformUtilsTest.java | 1 + .../headless/model/domain/Catalog.java | 44 ----- .../model/domain/pojo/Datasource.java | 22 --- .../headless/model/domain/pojo/Dimension.java | 33 ---- .../headless/model/domain/pojo/Domain.java | 37 ---- .../headless/model/domain/pojo/Metric.java | 31 --- .../headless/model/domain/pojo/Model.java | 32 ---- .../domain/repository/DateInfoRepository.java | 16 -- headless/pom.xml | 5 +- .../query/executor/QueryExecutor.java | 12 -- .../query/optimizer/QueryOptimizer.java | 8 - .../query/parser/HeadlessConverter.java | 13 -- .../headless/query/parser/SqlParser.java | 10 - .../query/parser/calcite/planner/Planner.java | 17 -- .../parser/calcite/schema/SemanticItem.java | 6 - .../parser/calcite/sql/Optimization.java | 10 - .../repository/StatRepository.java | 15 -- .../query/service/HeadlessQueryEngine.java | 21 --- .../headless/query/service/QueryService.java | 38 ---- .../headless/query/service/SchemaService.java | 28 --- headless/{model => server}/pom.xml | 16 +- .../engineadapter/ClickHouseAdaptor.java | 2 +- .../server}/engineadapter/EngineAdaptor.java | 2 +- .../engineadapter/EngineAdaptorFactory.java | 4 +- .../server}/engineadapter/H2Adaptor.java | 2 +- .../server}/engineadapter/MysqlAdaptor.java | 2 +- .../listener/MetaEmbeddingListener.java | 9 +- .../server}/manager/DimensionYamlManager.java | 23 +-- .../server}/manager/MetricYamlManager.java | 17 +- .../server/manager/ModelYamlManager.java} | 69 +++---- .../server}/persistence/dataobject/AppDO.java | 2 +- .../persistence}/dataobject/CollectDO.java | 2 +- .../persistence}/dataobject/DatabaseDO.java | 2 +- .../dataobject/DatabaseDOExample.java | 2 +- .../persistence}/dataobject/DateInfoDO.java | 2 +- .../persistence}/dataobject/DimensionDO.java | 3 +- .../persistence}/dataobject/DomainDO.java | 2 +- .../dataobject/DomainDOExample.java | 2 +- .../persistence}/dataobject/MetricDO.java | 3 +- .../MetricQueryDefaultConfigDO.java | 2 +- .../persistence}/dataobject/ModelDO.java | 3 +- .../persistence}/dataobject/ModelRelaDO.java | 2 +- .../persistence}/dataobject/ViewInfoDO.java | 3 +- .../dataobject/ViewInfoDOExample.java | 2 +- .../server}/persistence/mapper/AppMapper.java | 4 +- .../persistence}/mapper/CollectMapper.java | 5 +- .../persistence}/mapper/DatabaseDOMapper.java | 7 +- .../persistence}/mapper/DateInfoMapper.java | 6 +- .../mapper/DimensionDOCustomMapper.java | 10 +- .../mapper/DimensionDOMapper.java | 4 +- .../persistence}/mapper/DomainDOMapper.java | 4 +- .../mapper/MetricDOCustomMapper.java | 8 +- .../persistence}/mapper/MetricDOMapper.java | 4 +- .../MetricQueryDefaultConfigDOMapper.java | 5 +- .../mapper/ModelDOCustomMapper.java | 5 +- .../persistence}/mapper/ModelDOMapper.java | 4 +- .../mapper/ModelRelaDOMapper.java | 5 +- .../persistence}/mapper/ViewInfoDOMapper.java | 4 +- .../repository/DatabaseRepository.java | 5 +- .../repository/DateInfoRepository.java | 16 ++ .../repository/DimensionRepository.java | 8 +- .../repository/DomainRepository.java | 5 +- .../repository/MetricRepository.java | 10 +- .../repository/ModelRepository.java | 6 +- .../repository/ViewInfoRepository.java | 5 +- .../impl}/DatabaseRepositoryImpl.java | 13 +- .../impl}/DateInfoRepositoryImpl.java | 12 +- .../impl}/DimensionRepositoryImpl.java | 13 +- .../impl}/DomainRepositoryImpl.java | 8 +- .../impl}/MetricRepositoryImpl.java | 16 +- .../repository/impl}/ModelRepositoryImpl.java | 12 +- .../impl}/ViewInfoRepositoryImpl.java | 9 +- .../headless/server}/pojo/ConnectInfo.java | 2 +- .../headless/server}/pojo/Database.java | 5 +- .../server}/pojo/DatasourceQueryEnum.java | 2 +- .../server}/pojo/DimensionFilter.java | 2 +- .../headless/server}/pojo/EngineTypeEnum.java | 2 +- .../headless/server}/pojo/JdbcDataSource.java | 50 ++--- .../headless/server}/pojo/MetaFilter.java | 2 +- .../headless/server}/pojo/MetricFilter.java | 2 +- .../headless/server}/pojo/ModelFilter.java | 2 +- .../server/pojo}/yaml/DataModelYamlTpl.java | 9 +- .../yaml/DimensionTimeTypeParamsTpl.java | 2 +- .../server/pojo}/yaml/DimensionYamlTpl.java | 2 +- .../server/pojo}/yaml/IdentifyYamlTpl.java | 2 +- .../server/pojo}/yaml/MeasureYamlTpl.java | 2 +- .../pojo}/yaml/MetricTypeParamsYamlTpl.java | 5 +- .../server/pojo}/yaml/MetricYamlTpl.java | 5 +- .../headless/server}/rest/AppController.java | 12 +- .../server}/rest/CollectController.java | 7 +- .../server}/rest/DatabaseController.java | 19 +- .../server}/rest/DimensionController.java | 18 +- .../server}/rest/DomainController.java | 23 ++- .../server}/rest/MetricController.java | 20 +- .../server}/rest/ModelController.java | 25 +-- .../server}/rest/ModelRelaController.java | 4 +- .../server}/rest/ViewInfoController.java | 12 +- .../headless/server}/service/AppService.java | 10 +- .../headless/server/service/Catalog.java | 47 +++++ .../server/service}/CollectService.java | 6 +- .../server/service}/DatabaseService.java | 9 +- .../server/service}/DimensionService.java | 19 +- .../server/service}/DomainService.java | 8 +- .../server/service}/MetricService.java | 17 +- .../server/service}/ModelRelaService.java | 2 +- .../server/service}/ModelService.java | 27 +-- .../server}/service/impl/AppServiceImpl.java | 44 ++--- .../server/service/impl}/CatalogImpl.java | 70 ++++--- .../service/impl}/CollectServiceImpl.java | 13 +- .../service/impl}/DatabaseServiceImpl.java | 32 ++-- .../service/impl}/DimensionServiceImpl.java | 61 +++--- .../service/impl}/DomainServiceImpl.java | 20 +- .../service/impl}/MetricServiceImpl.java | 47 ++--- .../service/impl}/ModelRelaServiceImpl.java | 8 +- .../service/impl}/ModelServiceImpl.java | 101 +++++----- .../service/impl}/ViewInfoServiceImpl.java | 24 +-- .../server}/utils/DatabaseConverter.java | 12 +- .../server}/utils/DimensionConverter.java | 27 +-- .../headless/server}/utils/DomainConvert.java | 12 +- .../server}/utils/JdbcDataSourceUtils.java | 14 +- .../server}/utils/MetricConverter.java | 36 ++-- .../server}/utils/ModelConverter.java | 48 ++--- .../server}/utils/NameCheckUtils.java | 2 +- .../headless/server}/utils/SqlUtils.java | 14 +- .../utils/SysTimeDimensionBuilder.java | 19 +- .../application/ModelServiceImplTest.java | 63 ++++--- launchers/headless/pom.xml | 4 +- launchers/standalone/pom.xml | 4 +- .../supersonic/BenchMarkDemoDataLoader.java | 62 +++--- .../supersonic/HeadlessDemoLoader.java | 2 +- .../supersonic/ModelDemoDataLoader.java | 78 ++++---- .../model/MetricServiceImplTest.java | 11 +- 352 files changed, 2296 insertions(+), 2675 deletions(-) delete mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/api/rest/ApiQueryController.java delete mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/api/service/ApiQueryService.java delete mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/api/service/impl/ApiQueryServiceImpl.java rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/enums/AggOption.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/core}/enums/QueryOptMode.java (50%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeBackEnum.java => api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryTypeBack.java} (62%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/pojo/Cache.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/pojo/MetricTable.java (66%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/pojo/Param.java (92%) create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/SingleItemQueryResult.java rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/BatchDownloadReq.java (79%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/DownloadStructReq.java (78%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/ExplainSqlReq.java (59%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/ItemUseReq.java (90%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/MetaQueryApiReq.java (83%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/MetricReq.java (87%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/ParseSqlReq.java (79%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/QueryDimValueReq.java (81%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiReq.java => api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryItemReq.java} (65%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/QueryMultiStructReq.java (88%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/QueryS2SQLReq.java (89%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/request/QueryStructReq.java (98%) create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemQueryResultResp.java rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => api/src/main/java/com/tencent/supersonic/headless/common/core}/response/ItemUseResp.java (88%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/core}/response/SqlParserResp.java (89%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model/enums/AppStatusEnum.java => api/src/main/java/com/tencent/supersonic/headless/common/server/enums/AppStatus.java} (53%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DataTypeEnum.java => api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DataType.java} (87%) create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DimensionType.java create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/IdentifyType.java create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/MetricType.java rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model/enums/ModelSourceTypeEnum.java => api/src/main/java/com/tencent/supersonic/headless/common/server/enums/ModelSourceType.java} (57%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeEnum.java => api/src/main/java/com/tencent/supersonic/headless/common/server/enums/QueryType.java} (57%) create mode 100644 headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/SemanticType.java rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/AppConfig.java (88%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/Dim.java (96%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/DimValueMap.java (86%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/DimensionTimeTypeParams.java (81%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/DrillDownDimension.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/Entity.java (86%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/Identify.java (90%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/Item.java (87%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/ItemDateFilter.java (81%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/Measure.java (91%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/MetricQueryDefaultConfig.java (82%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/MetricTypeParams.java (77%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/ModelDetail.java (79%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/QueryResult.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/QueryStat.java (98%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/RelateDimension.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/pojo/SchemaItem.java (96%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/AppQueryReq.java (64%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/AppReq.java (81%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/DatabaseReq.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/DateInfoReq.java (94%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/DimensionReq.java (73%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/DomainReq.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/DomainUpdateReq.java (62%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/MetaBatchReq.java (68%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/MetricBaseReq.java (77%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/MetricReq.java (54%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/ModelReq.java (79%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/ModelSchemaFilterReq.java (75%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/PageDimensionReq.java (65%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/PageMetricReq.java (64%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/PageSchemaItemReq.java (89%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/SqlExecuteReq.java (91%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/request/ViewInfoReq.java (82%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/AppDetailResp.java (62%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/AppResp.java (75%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/DatabaseResp.java (95%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/DimSchemaResp.java (78%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/DimensionResp.java (76%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/DomainResp.java (83%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/ExplainResp.java (82%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/MeasureResp.java (86%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/MetricResp.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/MetricSchemaResp.java (71%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/ModelResp.java (78%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/ModelSchemaRelaResp.java (78%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/ModelSchemaResp.java (86%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => api/src/main/java/com/tencent/supersonic/headless/common/server}/response/QueryResultWithSchemaResp.java (64%) delete mode 100644 headless/common/pom.xml delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DimensionTypeEnum.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/IdentifyTypeEnum.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/MetricTypeEnum.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/OperatorEnum.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/SemanticTypeEnum.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DatasourceType.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/ApiQuerySingleResult.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Materialization.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiPreviewReq.java delete mode 100644 headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ApiQueryResultResp.java rename headless/{query => core}/pom.xml (96%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => core/src/main/java/com/tencent/supersonic/headless/core}/annotation/ApiHeaderCheck.java (83%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/annotation/S2SQLDataPermission.java (84%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/annotation/StructDataPermission.java (83%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => core/src/main/java/com/tencent/supersonic/headless/core}/aspect/ApiHeaderCheckAspect.java (85%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/service/AuthCommonService.java => core/src/main/java/com/tencent/supersonic/headless/core/aspect/AuthCheckBaseAspect.java} (94%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/utils => core/src/main/java/com/tencent/supersonic/headless/core/aspect}/DimValueAspect.java (93%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/aspect/S2SQLDataAspect.java (79%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/aspect/StructDataAspect.java (79%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/executor/JdbcExecutor.java (73%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/optimizer/DetailQuery.java (87%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/QueryOptimizer.java create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/HeadlessConverter.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/QueryParser.java (90%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/SqlParser.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/CalciteSqlParser.java (72%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/Configuration.java (94%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/HeadlessSchemaManager.java (89%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/planner/AggPlanner.java (79%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/planner/MaterializationPlanner.java (92%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/Planner.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Constants.java (93%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/DataSource.java (62%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/DataType.java (92%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Dimension.java (72%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/DimensionTimeTypeParams.java (66%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/HeadlessModel.java (88%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Identify.java (81%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/JoinRelation.java (81%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Materialization.java (94%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/MaterializationElement.java (73%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Measure.java (85%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/Metric.java (67%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/MetricTypeParams.java (68%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/s2sql/TimeRange.java (66%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/DataSourceTable.java (98%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/HeadlessSchema.java (86%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/HeadlessSqlConformance.java (98%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java (85%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/RuntimeOptions.java (76%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/SchemaBuilder.java (94%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticItem.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/SemanticSqlDialect.java (97%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/schema/ViewExpanderImpl.java (86%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Optimization.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/Renderer.java (81%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/S2SQLSqlValidatorImpl.java (88%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/TableView.java (92%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/AggFunctionNode.java (90%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/DataSourceNode.java (95%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/DimensionNode.java (91%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/ExtendNode.java (94%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/FilterNode.java (92%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/IdentifyNode.java (86%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/JoinNode.java (75%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/MeasureNode.java (93%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/MetricNode.java (86%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/SemanticNode.java (97%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/node/extend/LateralViewExplodeNode.java (93%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/optimizer/FilterToGroupScanRule.java (96%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/render/FilterRender.java (73%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/render/JoinRender.java (85%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/render/OutputRender.java (74%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/calcite/sql/render/SourceRender.java (89%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/CalculateAggConverter.java (96%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/DefaultDimValueConverter.java (77%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/MetricCheckConverter.java (81%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/ParserDefaultConverter.java (84%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/QueryReqConverter.java (88%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/parser/convert/ZipperModelConverter.java (76%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/persistence/mapper/StatMapper.java (52%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/query => core/src/main/java/com/tencent/supersonic/headless/core/persistence}/pojo/DataDownload.java (73%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/persistence/pojo/ParserSvrResponse.java (88%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/persistence/pojo/QueryStatement.java (75%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepository.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/persistence/repository/StatRepositoryImpl.java (90%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/rest/QueryController.java (71%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/rest/SchemaController.java (78%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/service/DownloadService.java (66%) create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/service/HeadlessQueryEngine.java create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/service/QueryService.java create mode 100644 headless/core/src/main/java/com/tencent/supersonic/headless/core/service/SchemaService.java rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/service => core/src/main/java/com/tencent/supersonic/headless/core/service/impl}/DownloadServiceImpl.java (91%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/service => core/src/main/java/com/tencent/supersonic/headless/core/service/impl}/HeadlessQueryEngineImpl.java (77%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/service => core/src/main/java/com/tencent/supersonic/headless/core/service/impl}/QueryServiceImpl.java (62%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query/service => core/src/main/java/com/tencent/supersonic/headless/core/service/impl}/SchemaServiceImpl.java (77%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/ComponentFactory.java (73%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/DataTransformUtils.java (98%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/QueryStructUtils.java (93%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/QueryUtils.java (91%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/SqlGenerateUtils.java (96%) rename headless/{query/src/main/java/com/tencent/supersonic/headless/query => core/src/main/java/com/tencent/supersonic/headless/core}/utils/StatUtils.java (84%) rename headless/{query => core}/src/main/resources/mapper/StatMapper.xml (93%) rename headless/{query => core}/src/test/java/com/tencent/supersonic/headless/query/domain/calcite/HeadlessParserServiceTest.java (90%) rename headless/{query => core}/src/test/java/com/tencent/supersonic/headless/query/domain/calcite/MaterializationQueryTest.java (83%) rename headless/{query => core}/src/test/java/com/tencent/supersonic/headless/query/service/DownloadServiceImplTest.java (86%) rename headless/{query => core}/src/test/java/com/tencent/supersonic/headless/query/utils/DataTransformUtilsTest.java (95%) delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/Catalog.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/pojo/Datasource.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/pojo/Dimension.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/pojo/Domain.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/pojo/Metric.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/pojo/Model.java delete mode 100644 headless/model/src/main/java/com/tencent/supersonic/headless/model/domain/repository/DateInfoRepository.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/executor/QueryExecutor.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/optimizer/QueryOptimizer.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/HeadlessConverter.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/SqlParser.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/Planner.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SemanticItem.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/Optimization.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/repository/StatRepository.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/service/HeadlessQueryEngine.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/service/QueryService.java delete mode 100644 headless/query/src/main/java/com/tencent/supersonic/headless/query/service/SchemaService.java rename headless/{model => server}/pom.xml (89%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/adaptor => server/src/main/java/com/tencent/supersonic/headless/server}/engineadapter/ClickHouseAdaptor.java (96%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/adaptor => server/src/main/java/com/tencent/supersonic/headless/server}/engineadapter/EngineAdaptor.java (82%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/adaptor => server/src/main/java/com/tencent/supersonic/headless/server}/engineadapter/EngineAdaptorFactory.java (80%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/adaptor => server/src/main/java/com/tencent/supersonic/headless/server}/engineadapter/H2Adaptor.java (96%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/adaptor => server/src/main/java/com/tencent/supersonic/headless/server}/engineadapter/MysqlAdaptor.java (96%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/listener/MetaEmbeddingListener.java (97%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/manager/DimensionYamlManager.java (56%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/manager/MetricYamlManager.java (60%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain/manager/DatasourceYamlManager.java => server/src/main/java/com/tencent/supersonic/headless/server/manager/ModelYamlManager.java} (50%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => server/src/main/java/com/tencent/supersonic/headless/server}/persistence/dataobject/AppDO.java (90%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/CollectDO.java (94%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DatabaseDO.java (98%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DatabaseDOExample.java (99%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DateInfoDO.java (83%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DimensionDO.java (92%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DomainDO.java (94%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/DomainDOExample.java (99%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/MetricDO.java (95%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/MetricQueryDefaultConfigDO.java (90%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/ModelDO.java (93%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/ModelRelaDO.java (86%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/ViewInfoDO.java (90%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/dataobject/ViewInfoDOExample.java (99%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => server/src/main/java/com/tencent/supersonic/headless/server}/persistence/mapper/AppMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/CollectMapper.java (65%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/DatabaseDOMapper.java (82%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/DateInfoMapper.java (51%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/DimensionDOCustomMapper.java (62%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/DimensionDOMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/DomainDOMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/MetricDOCustomMapper.java (60%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/MetricDOMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/MetricQueryDefaultConfigDOMapper.java (56%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/ModelDOCustomMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/ModelDOMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/ModelRelaDOMapper.java (55%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/mapper/ViewInfoDOMapper.java (54%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/DatabaseRepository.java (64%) create mode 100644 headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/DateInfoRepository.java rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/DimensionRepository.java (64%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/DomainRepository.java (64%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/MetricRepository.java (65%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/ModelRepository.java (57%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/persistence}/repository/ViewInfoRepository.java (65%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/DatabaseRepositoryImpl.java (70%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/DateInfoRepositoryImpl.java (83%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/DimensionRepositoryImpl.java (73%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/DomainRepositoryImpl.java (75%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/MetricRepositoryImpl.java (78%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/ModelRepositoryImpl.java (79%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/infrastructure/repository => server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl}/ViewInfoRepositoryImpl.java (77%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/ConnectInfo.java (74%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/Database.java (90%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/DatasourceQueryEnum.java (81%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/DimensionFilter.java (65%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/EngineTypeEnum.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/JdbcDataSource.java (89%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/MetaFilter.java (89%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/MetricFilter.java (63%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/pojo/ModelFilter.java (73%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/DataModelYamlTpl.java (64%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/DimensionTimeTypeParamsTpl.java (70%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/DimensionYamlTpl.java (84%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/IdentifyYamlTpl.java (82%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/MeasureYamlTpl.java (85%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/MetricTypeParamsYamlTpl.java (73%) rename headless/{common/src/main/java/com/tencent/supersonic/headless/common/model => server/src/main/java/com/tencent/supersonic/headless/server/pojo}/yaml/MetricYamlTpl.java (78%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => server/src/main/java/com/tencent/supersonic/headless/server}/rest/AppController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/CollectController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/DatabaseController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/DimensionController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/DomainController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/MetricController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/ModelController.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/ModelRelaController.java (92%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model => server/src/main/java/com/tencent/supersonic/headless/server}/rest/ViewInfoController.java (82%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => server/src/main/java/com/tencent/supersonic/headless/server}/service/AppService.java (59%) create mode 100644 headless/server/src/main/java/com/tencent/supersonic/headless/server/service/Catalog.java rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/CollectService.java (70%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/DatabaseService.java (71%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/DimensionService.java (65%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/DomainService.java (74%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/MetricService.java (70%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/ModelRelaService.java (88%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server/service}/ModelService.java (62%) rename headless/{api/src/main/java/com/tencent/supersonic/headless/api => server/src/main/java/com/tencent/supersonic/headless/server}/service/impl/AppServiceImpl.java (85%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/CatalogImpl.java (62%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/CollectServiceImpl.java (84%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/DatabaseServiceImpl.java (84%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/DimensionServiceImpl.java (89%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/DomainServiceImpl.java (93%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/MetricServiceImpl.java (91%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/ModelRelaServiceImpl.java (89%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/ModelServiceImpl.java (86%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/application => server/src/main/java/com/tencent/supersonic/headless/server/service/impl}/ViewInfoServiceImpl.java (77%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/DatabaseConverter.java (86%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/DimensionConverter.java (78%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/DomainConvert.java (84%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/JdbcDataSourceUtils.java (92%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/MetricConverter.java (75%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/ModelConverter.java (84%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/NameCheckUtils.java (84%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/SqlUtils.java (94%) rename headless/{model/src/main/java/com/tencent/supersonic/headless/model/domain => server/src/main/java/com/tencent/supersonic/headless/server}/utils/SysTimeDimensionBuilder.java (83%) rename headless/{model => server}/src/test/java/com/tencent/supersonic/headless/model/application/ModelServiceImplTest.java (81%) diff --git a/chat/api/pom.xml b/chat/api/pom.xml index 99e66fef1..90a96f0bb 100644 --- a/chat/api/pom.xml +++ b/chat/api/pom.xml @@ -23,7 +23,7 @@ com.tencent.supersonic - headless-common + headless-api ${project.version} compile diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java index e5a3c956a..feca6d6fd 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java @@ -4,20 +4,20 @@ import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.common.pojo.enums.AuthType; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryDimValueReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.List; diff --git a/chat/core/pom.xml b/chat/core/pom.xml index 3e746a058..221cae0bb 100644 --- a/chat/core/pom.xml +++ b/chat/core/pom.xml @@ -77,12 +77,12 @@ com.tencent.supersonic - headless-common + headless-api ${project.version} com.tencent.supersonic - headless-query + headless-core ${project.version} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java b/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java index e181374a2..867bdd642 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java @@ -1,8 +1,8 @@ package com.tencent.supersonic.chat.config; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; import java.util.List; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java index 604623ce8..c4f9f9af8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java @@ -9,20 +9,20 @@ import com.tencent.supersonic.common.util.embedding.Retrieval; import com.tencent.supersonic.common.util.embedding.RetrieveQuery; import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult; import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore; +import com.tencent.supersonic.headless.server.listener.MetaEmbeddingListener; import com.tencent.supersonic.knowledge.dictionary.EmbeddingResult; -import com.tencent.supersonic.headless.model.domain.listener.MetaEmbeddingListener; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * EmbeddingMatchStrategy uses vector database to perform diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java index 7521ce98b..326847340 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java @@ -23,8 +23,8 @@ import com.tencent.supersonic.common.pojo.enums.DataFormatTypeEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.DateUtils; import com.tencent.supersonic.knowledge.service.SchemaService; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java b/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java index 126c4941e..3c1c66555 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java @@ -12,7 +12,7 @@ import com.tencent.supersonic.common.util.embedding.Retrieval; import com.tencent.supersonic.common.util.embedding.RetrieveQuery; import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult; import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore; -import com.tencent.supersonic.headless.model.domain.listener.MetaEmbeddingListener; +import com.tencent.supersonic.headless.server.listener.MetaEmbeddingListener; import org.springframework.util.CollectionUtils; import java.util.Collections; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java index cd61070aa..8eb24d30b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java @@ -15,11 +15,11 @@ import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.knowledge.service.SchemaService; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeEnum; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.enums.QueryType; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -48,7 +48,7 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable { if (StringUtils.isNotBlank(sqlInfo.getCorrectS2SQL())) { //sql explainSqlReq = ExplainSqlReq.builder() - .queryTypeEnum(QueryTypeEnum.SQL) + .queryTypeEnum(QueryType.SQL) .queryReq(QueryReqBuilder.buildS2SQLReq( sqlInfo.getCorrectS2SQL(), parseInfo.getModel().getModelIds() )) @@ -56,7 +56,7 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable { } else { //struct explainSqlReq = ExplainSqlReq.builder() - .queryTypeEnum(QueryTypeEnum.STRUCT) + .queryTypeEnum(QueryType.STRUCT) .queryReq(QueryReqBuilder.buildStructReq(parseInfo)) .build(); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java index c584d83d0..eefb7d413 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java @@ -18,8 +18,8 @@ import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java index ece102ee0..cf95a3ad4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java @@ -10,8 +10,8 @@ import com.tencent.supersonic.chat.query.llm.LLMSemanticQuery; import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.chat.utils.QueryReqBuilder; import com.tencent.supersonic.common.pojo.QueryColumn; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java index 67839be5c..1ba521ea1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java @@ -23,9 +23,9 @@ import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java index b79c98d86..f9e838b9c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java @@ -9,8 +9,8 @@ import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.common.pojo.enums.FilterType; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.Filter; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.ArrayList; import java.util.HashSet; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java index 4c262c0e0..bde524c21 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java @@ -18,7 +18,7 @@ import com.tencent.supersonic.chat.service.ConfigService; import com.tencent.supersonic.chat.service.SemanticService; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; import java.time.LocalDate; import java.util.List; import java.util.Objects; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java index e55a6cf1d..b86422b52 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java @@ -10,8 +10,8 @@ import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.enums.FilterType; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.ArrayList; import java.util.HashSet; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java b/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java index 73e49f86c..928b765e2 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java @@ -12,12 +12,12 @@ import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.service.ConfigService; import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.common.pojo.enums.AuthType; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java index 2f5630933..b18c5183d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java @@ -41,8 +41,8 @@ import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.RatioOverType; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.DateUtils; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import com.tencent.supersonic.knowledge.service.SchemaService; import java.text.DecimalFormat; import java.time.DayOfWeek; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java index 6e239e7d7..79168e383 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java @@ -31,12 +31,12 @@ import com.tencent.supersonic.chat.utils.ChatConfigHelper; import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.chat.utils.VisibilityEvent; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.MetricService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java index 6dbcaaf00..ca6582a8e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java @@ -16,7 +16,7 @@ import com.tencent.supersonic.chat.service.PluginService; import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.common.model.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java index 3aea43859..6979bf62f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java @@ -59,8 +59,8 @@ import com.tencent.supersonic.knowledge.dictionary.MultiCustomDictionary; import com.tencent.supersonic.knowledge.service.SearchService; import com.tencent.supersonic.knowledge.utils.HanlpHelper; import com.tencent.supersonic.knowledge.utils.NatureHelper; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java index 3718744e4..5dbbaaeeb 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java @@ -14,8 +14,8 @@ import com.tencent.supersonic.chat.persistence.dataobject.DimValueDO; import com.tencent.supersonic.chat.service.ConfigService; import com.tencent.supersonic.knowledge.dictionary.DictUpdateMode; import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java index 0e6110893..30839342b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java @@ -18,8 +18,8 @@ import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java index 556eb48b3..8e85117f7 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java @@ -13,9 +13,9 @@ import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.util.Strings; diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java index e0b5a89d1..6d49d1a9b 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/ContextTest.java @@ -1,14 +1,14 @@ package com.tencent.supersonic.chat.test.context; -import com.tencent.supersonic.chat.persistence.repository.impl.ChatContextRepositoryImpl; -import com.tencent.supersonic.chat.utils.ComponentFactory; import com.tencent.supersonic.chat.persistence.mapper.ChatContextMapper; -import com.tencent.supersonic.knowledge.semantic.RemoteSemanticInterpreter; +import com.tencent.supersonic.chat.persistence.repository.impl.ChatContextRepositoryImpl; import com.tencent.supersonic.chat.test.ChatBizLauncher; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.query.service.QueryService; +import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.headless.core.service.QueryService; +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.knowledge.semantic.RemoteSemanticInterpreter; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java index d77780e47..ff7a17745 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java @@ -1,9 +1,5 @@ package com.tencent.supersonic.chat.test.context; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.when; - import com.tencent.supersonic.chat.api.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.config.DefaultMetric; @@ -15,24 +11,29 @@ import com.tencent.supersonic.chat.service.ChatService; import com.tencent.supersonic.chat.service.QueryService; import com.tencent.supersonic.chat.service.impl.ConfigServiceImpl; import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.model.domain.pojo.DimensionFilter; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +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.MetricService; +import com.tencent.supersonic.headless.server.service.ModelService; import org.mockito.Mockito; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.when; + @Configuration public class MockBeansConfiguration { diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java b/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java index ffd630301..f2c9283e6 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java @@ -10,8 +10,8 @@ import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.DateModeUtils; import com.tencent.supersonic.common.util.SqlFilterUtils; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/chat/knowledge/pom.xml b/chat/knowledge/pom.xml index 081ef2f6f..197a134e7 100644 --- a/chat/knowledge/pom.xml +++ b/chat/knowledge/pom.xml @@ -100,7 +100,7 @@ com.tencent.supersonic - headless-query + headless-core ${project.version} compile diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java index cb7c4a7c7..1943cc0b7 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java @@ -4,7 +4,7 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; import java.util.ArrayList; import java.util.List; import java.util.Optional; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java index b392d6d48..8022a70b3 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java @@ -5,25 +5,25 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryDimValueReq; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.query.service.QueryService; -import com.tencent.supersonic.headless.query.service.SchemaService; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.service.QueryService; +import com.tencent.supersonic.headless.core.service.SchemaService; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.MetricService; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java index 7584b7344..7b79b1c14 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java @@ -6,12 +6,12 @@ import com.tencent.supersonic.chat.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaValueMap; -import com.tencent.supersonic.headless.common.model.pojo.DimValueMap; -import com.tencent.supersonic.headless.common.model.pojo.RelateDimension; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.pojo.DimValueMap; +import com.tencent.supersonic.headless.common.server.pojo.RelateDimension; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java index b2e53050d..c230b247a 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java +++ b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java @@ -19,21 +19,21 @@ import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.S2ThreadContext; import com.tencent.supersonic.common.util.ThreadContext; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryDimValueReq; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.net.URI; import java.net.URL; import java.util.HashMap; diff --git a/headless/api/pom.xml b/headless/api/pom.xml index 2d3a590f4..386ec4067 100644 --- a/headless/api/pom.xml +++ b/headless/api/pom.xml @@ -1,28 +1,69 @@ - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> com.tencent.supersonic headless ${revision} + 4.0.0 headless-api - - 8 - 8 - UTF-8 - - + + + + + + + com.clickhouse + clickhouse-jdbc + ${clickhouse.jdbc.version} + + all + + com.tencent.supersonic - headless-query + common + ${project.version} + + + + org.projectlombok + lombok + ${lombok.version} + + + jakarta.validation + jakarta.validation-api + + + org.springframework + spring-core + ${spring.version} + + + com.alibaba + fastjson + ${fastjson.version} + compile + + + commons-codec + commons-codec + + + org.springframework.boot + spring-boot-starter-web + ${spring.version} + + + com.tencent.supersonic + auth-api ${project.version} - - \ No newline at end of file + diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/rest/ApiQueryController.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/rest/ApiQueryController.java deleted file mode 100644 index b6e01a0e2..000000000 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/rest/ApiQueryController.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.tencent.supersonic.headless.api.rest; - -import com.tencent.supersonic.headless.api.service.ApiQueryService; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.servlet.http.HttpServletRequest; - -@RestController -@RequestMapping("/api/semantic/apiQuery") -@Slf4j -public class ApiQueryController { - - @Autowired - private ApiQueryService apiQueryService; - - @PostMapping("/metricDataQueryById") - public ApiQueryResultResp metricDataQueryById(@RequestBody QueryApiReq queryApiReq, - HttpServletRequest request) throws Exception { - return apiQueryService.metricDataQueryById(queryApiReq, request); - } - - @PostMapping("/metaQuery") - public Object metaQuery(@RequestBody MetaQueryApiReq metaQueryApiReq, HttpServletRequest request) { - return apiQueryService.metaQuery(metaQueryApiReq, request); - } - - @PostMapping("/dataQueryByStruct") - public QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq, - HttpServletRequest request) throws Exception { - return apiQueryService.dataQueryByStruct(queryStructReq, request); - } - -} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/ApiQueryService.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/ApiQueryService.java deleted file mode 100644 index a171a9ebf..000000000 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/ApiQueryService.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.tencent.supersonic.headless.api.service; - -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp; -import com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck; - -import javax.servlet.http.HttpServletRequest; -/** - * Api service for other apps to query meta info and data - */ -public interface ApiQueryService { - - /** - * Query the metric data based on the metric id. - * The data will be drilled down based on the information configured when applying for the APP. - * @param queryApiReq - * @param request - * @return - * @throws Exception - */ - @ApiHeaderCheck - ApiQueryResultResp metricDataQueryById(QueryApiReq queryApiReq, HttpServletRequest request) throws Exception; - - /** - * Query data based on structure - * @param queryStructReq - * @param request - * @return - * @throws Exception - */ - @ApiHeaderCheck - QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq, - HttpServletRequest request) throws Exception; - - /** - * Query the meta information of the metric, dimension and tag - * @param metaQueryApiReq - * @param request - * @return - */ - @ApiHeaderCheck - Object metaQuery(MetaQueryApiReq metaQueryApiReq, HttpServletRequest request); - -} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/impl/ApiQueryServiceImpl.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/impl/ApiQueryServiceImpl.java deleted file mode 100644 index 11c04e1d7..000000000 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/service/impl/ApiQueryServiceImpl.java +++ /dev/null @@ -1,177 +0,0 @@ -package com.tencent.supersonic.headless.api.service.impl; - -import com.google.common.collect.Lists; -import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.common.pojo.Aggregator; -import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.common.pojo.DateConf; -import com.tencent.supersonic.common.pojo.enums.ApiItemType; -import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; -import com.tencent.supersonic.headless.api.aspect.ApiHeaderCheckAspect; -import com.tencent.supersonic.headless.api.service.ApiQueryService; -import com.tencent.supersonic.headless.api.service.AppService; -import com.tencent.supersonic.headless.common.model.pojo.Item; -import com.tencent.supersonic.headless.common.model.response.AppDetailResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.pojo.ApiQuerySingleResult; -import com.tencent.supersonic.headless.common.query.request.MetaQueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryApiReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ApiQueryResultResp; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.pojo.DimensionFilter; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; -import com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck; -import com.tencent.supersonic.headless.query.service.QueryService; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - - -@Service -public class ApiQueryServiceImpl implements ApiQueryService { - - private static final long result_size = 10000; - - private AppService appService; - - private MetricService metricService; - - private DimensionService dimensionService; - - private QueryService queryService; - - public ApiQueryServiceImpl(AppService appService, - MetricService metricService, - DimensionService dimensionService, - QueryService queryService) { - this.appService = appService; - this.metricService = metricService; - this.dimensionService = dimensionService; - this.queryService = queryService; - } - - @Override - @ApiHeaderCheck - public ApiQueryResultResp metricDataQueryById(QueryApiReq queryApiReq, - HttpServletRequest request) throws Exception { - AppDetailResp appDetailResp = getAppDetailResp(request); - authCheck(appDetailResp, queryApiReq.getIds(), ApiItemType.METRIC); - List results = Lists.newArrayList(); - Map map = appDetailResp.getConfig().getItems().stream() - .collect(Collectors.toMap(Item::getId, i -> i)); - for (Long id : queryApiReq.getIds()) { - Item item = map.get(id); - ApiQuerySingleResult apiQuerySingleResult = dataQuery(appDetailResp.getId(), - item, queryApiReq.getDateConf()); - results.add(apiQuerySingleResult); - } - return ApiQueryResultResp.builder().results(results).build(); - } - - @Override - @ApiHeaderCheck - public QueryResultWithSchemaResp dataQueryByStruct(QueryStructReq queryStructReq, - HttpServletRequest request) throws Exception { - AppDetailResp appDetailResp = getAppDetailResp(request); - structAuthCheck(appDetailResp, queryStructReq); - return queryService.queryByStruct(queryStructReq, User.getAppUser(appDetailResp.getId())); - } - - @Override - @ApiHeaderCheck - public Object metaQuery(MetaQueryApiReq metaQueryApiReq, HttpServletRequest request) { - AppDetailResp appDetailResp = getAppDetailResp(request); - MetaFilter metaFilter = new MetaFilter(); - metaFilter.setIds(metaQueryApiReq.getIds()); - if (ApiItemType.METRIC.equals(metaQueryApiReq.getType())) { - authCheck(appDetailResp, metaQueryApiReq.getIds(), ApiItemType.METRIC); - return metricService.getMetrics(metaFilter); - } else if (ApiItemType.DIMENSION.equals(metaQueryApiReq.getType())) { - authCheck(appDetailResp, metaQueryApiReq.getIds(), ApiItemType.DIMENSION); - return dimensionService.getDimensions(metaFilter); - } else if (ApiItemType.TAG.equals(metaQueryApiReq.getType())) { - throw new InvalidArgumentException("标签元数据类型正在支持中"); - } - throw new InvalidArgumentException("不支持的元数据类型:" + metaQueryApiReq.getType()); - } - - private ApiQuerySingleResult dataQuery(Integer appId, Item item, DateConf dateConf) throws Exception { - MetricResp metricResp = metricService.getMetric(item.getId()); - List items = item.getRelateItems(); - List dimensionResps = Lists.newArrayList(); - if (!CollectionUtils.isEmpty(items)) { - List ids = items.stream().map(Item::getId).collect(Collectors.toList()); - DimensionFilter dimensionFilter = new DimensionFilter(); - dimensionFilter.setIds(ids); - dimensionResps = dimensionService.getDimensions(dimensionFilter); - } - QueryStructReq queryStructReq = buildQueryStructReq(dimensionResps, metricResp, dateConf); - QueryResultWithSchemaResp queryResultWithSchemaResp = - queryService.queryByStruct(queryStructReq, User.getAppUser(appId)); - ApiQuerySingleResult apiQuerySingleResult = new ApiQuerySingleResult(); - apiQuerySingleResult.setItem(item); - apiQuerySingleResult.setResult(queryResultWithSchemaResp); - return apiQuerySingleResult; - } - - private AppDetailResp getAppDetailResp(HttpServletRequest request) { - int appId = Integer.parseInt(request.getHeader(ApiHeaderCheckAspect.APPID)); - return appService.getApp(appId); - } - - private void authCheck(AppDetailResp appDetailResp, List ids, ApiItemType type) { - Set idsInApp = appDetailResp.getConfig().getAllItems().stream() - .filter(item -> type.equals(item.getType())).map(Item::getId).collect(Collectors.toSet()); - if (!idsInApp.containsAll(ids)) { - throw new InvalidArgumentException("查询范围超过应用申请范围, 请检查"); - } - } - - private void structAuthCheck(AppDetailResp appDetailResp, QueryStructReq queryStructReq) { - List metricIdsToQuery = metricService.getMetrics(new MetaFilter(queryStructReq.getModelIds())) - .stream().filter(metricResp -> queryStructReq.getMetrics().contains(metricResp.getBizName())) - .map(MetricResp::getId).collect(Collectors.toList()); - List dimensionIdsToQuery = dimensionService.getDimensions(new MetaFilter(queryStructReq.getModelIds())) - .stream().filter(dimensionResp -> queryStructReq.getGroups().contains(dimensionResp.getBizName())) - .map(DimensionResp::getId).collect(Collectors.toList()); - authCheck(appDetailResp, metricIdsToQuery, ApiItemType.METRIC); - authCheck(appDetailResp, dimensionIdsToQuery, ApiItemType.DIMENSION); - } - - private QueryStructReq buildQueryStructReq(List dimensionResps, - MetricResp metricResp, DateConf dateConf) { - Set modelIds = dimensionResps.stream().map(DimensionResp::getModelId).collect(Collectors.toSet()); - modelIds.add(metricResp.getModelId()); - QueryStructReq queryStructReq = new QueryStructReq(); - queryStructReq.setGroups(dimensionResps.stream() - .map(DimensionResp::getBizName).collect(Collectors.toList())); - queryStructReq.getGroups().add(0, getTimeDimension(dateConf)); - Aggregator aggregator = new Aggregator(); - aggregator.setColumn(metricResp.getBizName()); - queryStructReq.setAggregators(Lists.newArrayList(aggregator)); - queryStructReq.setDateInfo(dateConf); - queryStructReq.setModelIds(modelIds); - queryStructReq.setLimit(result_size); - return queryStructReq; - } - - private String getTimeDimension(DateConf dateConf) { - if (Constants.MONTH.equals(dateConf.getPeriod())) { - return TimeDimensionEnum.MONTH.getName(); - } else if (Constants.WEEK.equals(dateConf.getPeriod())) { - return TimeDimensionEnum.WEEK.getName(); - } else { - return TimeDimensionEnum.DAY.getName(); - } - } - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/enums/AggOption.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/AggOption.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/enums/AggOption.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/AggOption.java index 003ea09fe..748d36c12 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/enums/AggOption.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/AggOption.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.enums; +package com.tencent.supersonic.headless.common.core.enums; public enum AggOption { NATIVE, diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryOptMode.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryOptMode.java similarity index 50% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryOptMode.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryOptMode.java index 6fa35243f..4138a3b15 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryOptMode.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryOptMode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.core.enums; public enum QueryOptMode { diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeBackEnum.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryTypeBack.java similarity index 62% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeBackEnum.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryTypeBack.java index 6f3d3054a..61a4069e0 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeBackEnum.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/enums/QueryTypeBack.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.core.enums; -public enum QueryTypeBackEnum { +public enum QueryTypeBack { NORMAL("NORMAL", 0), PRE_FLUSH("PRE_FLUSH", 1); @@ -9,13 +9,13 @@ public enum QueryTypeBackEnum { private String value; private Integer state; - QueryTypeBackEnum(String value, Integer state) { + QueryTypeBack(String value, Integer state) { this.value = value; this.state = state; } - public static QueryTypeBackEnum of(String src) { - for (QueryTypeBackEnum operatorEnum : QueryTypeBackEnum.values()) { + public static QueryTypeBack of(String src) { + for (QueryTypeBack operatorEnum : QueryTypeBack.values()) { if (src.toUpperCase().contains(operatorEnum.value)) { return operatorEnum; } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Cache.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Cache.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Cache.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Cache.java index 8103dd0eb..acd7018d8 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Cache.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Cache.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.pojo; +package com.tencent.supersonic.headless.common.core.pojo; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/MetricTable.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/MetricTable.java similarity index 66% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/MetricTable.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/MetricTable.java index 73a43a099..49829618c 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/MetricTable.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/MetricTable.java @@ -1,9 +1,10 @@ -package com.tencent.supersonic.headless.common.query.pojo; +package com.tencent.supersonic.headless.common.core.pojo; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import java.util.List; +import com.tencent.supersonic.headless.common.core.enums.AggOption; import lombok.Data; +import java.util.List; + @Data public class MetricTable { diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Param.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Param.java similarity index 92% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Param.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Param.java index 2fc5a7959..3dcedde15 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Param.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/Param.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.common.query.pojo; - -import javax.validation.constraints.NotBlank; +package com.tencent.supersonic.headless.common.core.pojo; import lombok.Data; +import javax.validation.constraints.NotBlank; + @Data public class Param { diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/SingleItemQueryResult.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/SingleItemQueryResult.java new file mode 100644 index 000000000..efc0dbe46 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/pojo/SingleItemQueryResult.java @@ -0,0 +1,15 @@ +package com.tencent.supersonic.headless.common.core.pojo; + + +import com.tencent.supersonic.headless.common.server.pojo.Item; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import lombok.Data; + +@Data +public class SingleItemQueryResult { + + private Item item; + + private QueryResultWithSchemaResp result; + +} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/BatchDownloadReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/BatchDownloadReq.java similarity index 79% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/BatchDownloadReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/BatchDownloadReq.java index 91091f697..215a7e268 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/BatchDownloadReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/BatchDownloadReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.tencent.supersonic.common.pojo.DateConf; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/DownloadStructReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/DownloadStructReq.java similarity index 78% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/DownloadStructReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/DownloadStructReq.java index 1817490b2..949ecb4f6 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/DownloadStructReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/DownloadStructReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ExplainSqlReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ExplainSqlReq.java similarity index 59% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ExplainSqlReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ExplainSqlReq.java index 7b75b4738..0f041933b 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ExplainSqlReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ExplainSqlReq.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeEnum; +import com.tencent.supersonic.headless.common.server.enums.QueryType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -14,7 +14,7 @@ import lombok.ToString; @NoArgsConstructor public class ExplainSqlReq { - private QueryTypeEnum queryTypeEnum; + private QueryType queryTypeEnum; private T queryReq; } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ItemUseReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ItemUseReq.java similarity index 90% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ItemUseReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ItemUseReq.java index 085a2af42..3c768d9b6 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ItemUseReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ItemUseReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import java.util.List; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetaQueryApiReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetaQueryApiReq.java similarity index 83% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetaQueryApiReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetaQueryApiReq.java index a9ab78db5..95a63fc5d 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetaQueryApiReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetaQueryApiReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.tencent.supersonic.common.pojo.enums.ApiItemType; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetricReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetricReq.java similarity index 87% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetricReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetricReq.java index b71bfb000..2e508a0ea 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/MetricReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/MetricReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.tencent.supersonic.common.pojo.ColumnOrder; import java.util.List; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ParseSqlReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ParseSqlReq.java similarity index 79% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ParseSqlReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ParseSqlReq.java index 9668f5f6e..ea9fc2491 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/ParseSqlReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/ParseSqlReq.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; -import com.tencent.supersonic.headless.common.query.pojo.MetricTable; +import com.tencent.supersonic.headless.common.core.pojo.MetricTable; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryDimValueReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryDimValueReq.java similarity index 81% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryDimValueReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryDimValueReq.java index b28b172cc..ea28dd6d4 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryDimValueReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryDimValueReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.tencent.supersonic.common.pojo.DateConf; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryItemReq.java similarity index 65% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryItemReq.java index b06fdbf16..4a904f982 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryItemReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.tencent.supersonic.common.pojo.DateConf; import lombok.Data; @@ -7,11 +7,14 @@ import javax.validation.constraints.NotEmpty; import java.util.List; @Data -public class QueryApiReq { +public class QueryItemReq { @NotEmpty(message = "ids不可为空") private List ids; private DateConf dateConf = new DateConf(); + //result size of single id + private Long limit; + } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryMultiStructReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryMultiStructReq.java similarity index 88% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryMultiStructReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryMultiStructReq.java index 401bd0bb7..1c415772e 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryMultiStructReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryMultiStructReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.alibaba.fastjson.JSONObject; import java.util.List; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryS2SQLReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryS2SQLReq.java similarity index 89% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryS2SQLReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryS2SQLReq.java index ca3d4c7da..9d5bbcfa1 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryS2SQLReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryS2SQLReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.google.common.collect.Lists; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryStructReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryStructReq.java similarity index 98% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryStructReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryStructReq.java index 1b88b76e5..2c125a8d3 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryStructReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/request/QueryStructReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.request; +package com.tencent.supersonic.headless.common.core.request; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.Aggregator; @@ -12,8 +12,8 @@ import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.DateModeUtils; import com.tencent.supersonic.common.util.SqlFilterUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; -import com.tencent.supersonic.headless.common.query.pojo.Cache; -import com.tencent.supersonic.headless.common.query.pojo.Param; +import com.tencent.supersonic.headless.common.core.pojo.Cache; +import com.tencent.supersonic.headless.common.core.pojo.Param; import lombok.Data; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemQueryResultResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemQueryResultResp.java new file mode 100644 index 000000000..5ac5af28f --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemQueryResultResp.java @@ -0,0 +1,15 @@ +package com.tencent.supersonic.headless.common.core.response; + +import com.tencent.supersonic.headless.common.core.pojo.SingleItemQueryResult; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class ItemQueryResultResp { + + private List results; + +} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ItemUseResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemUseResp.java similarity index 88% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ItemUseResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemUseResp.java index 376868d48..2a9e7d4d2 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ItemUseResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/ItemUseResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.response; +package com.tencent.supersonic.headless.common.core.response; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/SqlParserResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/SqlParserResp.java similarity index 89% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/SqlParserResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/SqlParserResp.java index acbf63c1d..dcf83cad1 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/SqlParserResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/core/response/SqlParserResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.core.response; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/AppStatusEnum.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/AppStatus.java similarity index 53% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/AppStatusEnum.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/AppStatus.java index 1aca8ed9d..a8792ad26 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/AppStatusEnum.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/AppStatus.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.server.enums; -public enum AppStatusEnum { +public enum AppStatus { INIT(0), ONLINE(1), @@ -10,7 +10,7 @@ public enum AppStatusEnum { private Integer code; - AppStatusEnum(Integer code) { + AppStatus(Integer code) { this.code = code; } @@ -18,12 +18,12 @@ public enum AppStatusEnum { return code; } - public static AppStatusEnum fromCode(Integer code) { - for (AppStatusEnum appStatusEnum : AppStatusEnum.values()) { + public static AppStatus fromCode(Integer code) { + for (AppStatus appStatusEnum : AppStatus.values()) { if (appStatusEnum.getCode().equals(code)) { return appStatusEnum; } } - return AppStatusEnum.UNKNOWN; + return AppStatus.UNKNOWN; } } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DataTypeEnum.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DataType.java similarity index 87% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DataTypeEnum.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DataType.java index b6986e7dc..9cb07f5bc 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DataTypeEnum.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DataType.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.server.enums; import com.tencent.supersonic.common.pojo.Constants; import java.util.HashSet; import java.util.Set; -public enum DataTypeEnum { +public enum DataType { MYSQL("mysql", "mysql", "com.mysql.cj.jdbc.Driver", "`", "`", "'", "'"), @@ -50,8 +50,8 @@ public enum DataTypeEnum { private String aliasPrefix; private String aliasSuffix; - DataTypeEnum(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, - String aliasPrefix, String aliasSuffix) { + DataType(String feature, String desc, String driver, String keywordPrefix, String keywordSuffix, + String aliasPrefix, String aliasSuffix) { this.feature = feature; this.desc = desc; this.driver = driver; @@ -61,9 +61,9 @@ public enum DataTypeEnum { this.aliasSuffix = aliasSuffix; } - public static DataTypeEnum urlOf(String jdbcUrl) throws RuntimeException { + public static DataType urlOf(String jdbcUrl) throws RuntimeException { String url = jdbcUrl.toLowerCase().trim(); - for (DataTypeEnum dataTypeEnum : values()) { + for (DataType dataTypeEnum : values()) { if (url.startsWith(String.format(Constants.JDBC_PREFIX_FORMATTER, dataTypeEnum.feature))) { return dataTypeEnum; } @@ -73,7 +73,7 @@ public enum DataTypeEnum { public static Set getAllSupportedDatasourceNameSet() { Set datasourceSet = new HashSet<>(); - for (DataTypeEnum datasource : values()) { + for (DataType datasource : values()) { datasourceSet.add(datasource.getFeature()); } return datasourceSet; diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DimensionType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DimensionType.java new file mode 100644 index 000000000..3eece508f --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/DimensionType.java @@ -0,0 +1,9 @@ +package com.tencent.supersonic.headless.common.server.enums; + + +public enum DimensionType { + + categorical, + time + +} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/IdentifyType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/IdentifyType.java new file mode 100644 index 000000000..8d4859685 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/IdentifyType.java @@ -0,0 +1,8 @@ +package com.tencent.supersonic.headless.common.server.enums; + +public enum IdentifyType { + + primary, + foreign, + +} \ No newline at end of file diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/MetricType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/MetricType.java new file mode 100644 index 000000000..a90f42a98 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/MetricType.java @@ -0,0 +1,9 @@ +package com.tencent.supersonic.headless.common.server.enums; + + +public enum MetricType { + + ATOMIC, + DERIVED + +} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/ModelSourceTypeEnum.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/ModelSourceType.java similarity index 57% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/ModelSourceTypeEnum.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/ModelSourceType.java index 279ca7088..d045e76fa 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/ModelSourceTypeEnum.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/ModelSourceType.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.server.enums; import java.util.Objects; -public enum ModelSourceTypeEnum { +public enum ModelSourceType { FULL, PARTITION, ZIPPER; - public static ModelSourceTypeEnum of(String src) { - for (ModelSourceTypeEnum modelSourceTypeEnum : ModelSourceTypeEnum.values()) { + public static ModelSourceType of(String src) { + for (ModelSourceType modelSourceTypeEnum : ModelSourceType.values()) { if (Objects.nonNull(src) && src.equalsIgnoreCase(modelSourceTypeEnum.name())) { return modelSourceTypeEnum; } @@ -16,12 +16,12 @@ public enum ModelSourceTypeEnum { return null; } - public static boolean isZipper(ModelSourceTypeEnum modelSourceTypeEnum) { + public static boolean isZipper(ModelSourceType modelSourceTypeEnum) { return Objects.nonNull(modelSourceTypeEnum) && ZIPPER.equals(modelSourceTypeEnum); } public static boolean isZipper(String str) { - ModelSourceTypeEnum modelSourceTypeEnum = of(str); + ModelSourceType modelSourceTypeEnum = of(str); return Objects.nonNull(modelSourceTypeEnum) && isZipper(modelSourceTypeEnum); } } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeEnum.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/QueryType.java similarity index 57% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeEnum.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/QueryType.java index 5089c8f8c..6dd0e8406 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/QueryTypeEnum.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/QueryType.java @@ -1,19 +1,19 @@ -package com.tencent.supersonic.headless.common.model.enums; +package com.tencent.supersonic.headless.common.server.enums; -public enum QueryTypeEnum { +public enum QueryType { SQL("SQL"), STRUCT("STRUCT"); private String value; - QueryTypeEnum(String value) { + QueryType(String value) { this.value = value; } - public static QueryTypeEnum of(String src) { - for (QueryTypeEnum operatorEnum : QueryTypeEnum.values()) { + public static QueryType of(String src) { + for (QueryType operatorEnum : QueryType.values()) { if (src.toUpperCase().contains(operatorEnum.value)) { return operatorEnum; } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/SemanticType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/SemanticType.java new file mode 100644 index 000000000..b575ddb83 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/enums/SemanticType.java @@ -0,0 +1,10 @@ +package com.tencent.supersonic.headless.common.server.enums; + +public enum SemanticType { + + CATEGORY, + ID, + DATE, + NUMBER + +} \ No newline at end of file diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/AppConfig.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/AppConfig.java similarity index 88% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/AppConfig.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/AppConfig.java index 149d001c9..e14d9109d 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/AppConfig.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/AppConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.google.common.collect.Lists; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Dim.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Dim.java similarity index 96% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Dim.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Dim.java index 0ec874d04..8dee1013c 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Dim.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Dim.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.tencent.supersonic.common.pojo.Constants; import lombok.AllArgsConstructor; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimValueMap.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimValueMap.java similarity index 86% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimValueMap.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimValueMap.java index 832f6f336..cbf69f5ae 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimValueMap.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimValueMap.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimensionTimeTypeParams.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimensionTimeTypeParams.java similarity index 81% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimensionTimeTypeParams.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimensionTimeTypeParams.java index e89761823..999225fc0 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DimensionTimeTypeParams.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DimensionTimeTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DrillDownDimension.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DrillDownDimension.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DrillDownDimension.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DrillDownDimension.java index c74a768c5..f40da0019 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DrillDownDimension.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/DrillDownDimension.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Entity.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Entity.java similarity index 86% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Entity.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Entity.java index 8a4584f45..1f07500e0 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Entity.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Entity.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Identify.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Identify.java similarity index 90% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Identify.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Identify.java index b0752a341..301be9acb 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Identify.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Identify.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Item.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Item.java similarity index 87% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Item.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Item.java index a026900a1..4ed343919 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Item.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Item.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.enums.ApiItemType; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ItemDateFilter.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ItemDateFilter.java similarity index 81% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ItemDateFilter.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ItemDateFilter.java index 3dfe29a90..9c0ed5b90 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ItemDateFilter.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ItemDateFilter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import java.util.List; import lombok.AllArgsConstructor; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Measure.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Measure.java similarity index 91% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Measure.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Measure.java index 8036f126a..a2a086b77 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/Measure.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/Measure.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricQueryDefaultConfig.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricQueryDefaultConfig.java similarity index 82% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricQueryDefaultConfig.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricQueryDefaultConfig.java index 0acbd56c2..2b2d7943f 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricQueryDefaultConfig.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricQueryDefaultConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.tencent.supersonic.common.pojo.RecordInfo; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricTypeParams.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricTypeParams.java similarity index 77% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricTypeParams.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricTypeParams.java index 6701df515..d2ed32703 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/MetricTypeParams.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/MetricTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import java.util.List; import com.google.common.collect.Lists; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ModelDetail.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ModelDetail.java similarity index 79% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ModelDetail.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ModelDetail.java index e18c23a53..f07e03355 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/ModelDetail.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/ModelDetail.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.google.common.collect.Lists; -import com.tencent.supersonic.headless.common.model.enums.DimensionTypeEnum; +import com.tencent.supersonic.headless.common.server.enums.DimensionType; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; @@ -37,7 +37,7 @@ public class ModelDetail { return Lists.newArrayList(); } return dimensions.stream() - .filter(dim -> DimensionTypeEnum.time.name().equalsIgnoreCase(dim.getType())) + .filter(dim -> DimensionType.time.name().equalsIgnoreCase(dim.getType())) .collect(Collectors.toList()); } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryResult.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryResult.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryResult.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryResult.java index e5dac35ab..f7fa77dcf 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryResult.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryResult.java @@ -1,10 +1,11 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; + +import lombok.Data; +import lombok.ToString; import java.io.Serializable; import java.util.ArrayList; import java.util.List; -import lombok.Data; -import lombok.ToString; @Data @ToString diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryStat.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryStat.java similarity index 98% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryStat.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryStat.java index 649c5dcbc..eb17d4720 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/QueryStat.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/QueryStat.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/RelateDimension.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/RelateDimension.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/RelateDimension.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/RelateDimension.java index ec1041135..0b3e9c594 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/RelateDimension.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/RelateDimension.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/SchemaItem.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/SchemaItem.java similarity index 96% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/SchemaItem.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/SchemaItem.java index dd569aa8c..a856e5733 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/SchemaItem.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/pojo/SchemaItem.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.pojo; +package com.tencent.supersonic.headless.common.server.pojo; import com.google.common.base.Objects; import com.tencent.supersonic.common.pojo.RecordInfo; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppQueryReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppQueryReq.java similarity index 64% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppQueryReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppQueryReq.java index 68abc808a..3add85d28 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppQueryReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppQueryReq.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.PageBaseReq; -import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum; +import com.tencent.supersonic.headless.common.server.enums.AppStatus; import lombok.Data; import org.springframework.util.CollectionUtils; @@ -15,7 +15,7 @@ public class AppQueryReq extends PageBaseReq { private String name; - private List appStatus; + private List appStatus; private String createdBy; @@ -23,7 +23,7 @@ public class AppQueryReq extends PageBaseReq { if (CollectionUtils.isEmpty(appStatus)) { return Lists.newArrayList(); } - return appStatus.stream().map(AppStatusEnum::getCode).collect(Collectors.toList()); + return appStatus.stream().map(AppStatus::getCode).collect(Collectors.toList()); } } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppReq.java similarity index 81% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppReq.java index c3c223177..452455dd3 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/AppReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/AppReq.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.tencent.supersonic.common.pojo.RecordInfo; -import com.tencent.supersonic.headless.common.model.pojo.AppConfig; +import com.tencent.supersonic.headless.common.server.pojo.AppConfig; import lombok.Data; import org.springframework.util.CollectionUtils; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DatabaseReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DatabaseReq.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DatabaseReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DatabaseReq.java index 27f4d9ebc..b34b89e96 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DatabaseReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DatabaseReq.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.google.common.collect.Lists; -import com.tencent.supersonic.headless.common.model.enums.DataTypeEnum; +import com.tencent.supersonic.headless.common.server.enums.DataType; import lombok.Data; import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -46,7 +46,7 @@ public class DatabaseReq { } else { databaseUrl = "/" + database; } - if (type.equalsIgnoreCase(DataTypeEnum.MYSQL.getFeature())) { + if (type.equalsIgnoreCase(DataType.MYSQL.getFeature())) { return String.format("jdbc:%s://%s:%s%s?sessionVariables=sql_mode='IGNORE_SPACE'&allowMultiQueries=true", type, host, port, databaseUrl); } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DateInfoReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DateInfoReq.java similarity index 94% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DateInfoReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DateInfoReq.java index 7a72e18c4..d0ff1fb84 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DateInfoReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DateInfoReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import java.util.ArrayList; import java.util.List; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DimensionReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DimensionReq.java similarity index 73% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DimensionReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DimensionReq.java index f260bcf61..8101fd978 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DimensionReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DimensionReq.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.tencent.supersonic.common.pojo.enums.DataTypeEnums; -import com.tencent.supersonic.headless.common.model.pojo.DimValueMap; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.DimValueMap; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import javax.validation.constraints.NotNull; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainReq.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainReq.java index bd9de521b..48341045a 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainReq.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import java.util.ArrayList; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainUpdateReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainUpdateReq.java similarity index 62% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainUpdateReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainUpdateReq.java index 6b7775458..baafeb637 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/DomainUpdateReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/DomainUpdateReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetaBatchReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetaBatchReq.java similarity index 68% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetaBatchReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetaBatchReq.java index d0f1b0d8c..ea01ea029 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetaBatchReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetaBatchReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import lombok.Data; import java.util.List; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricBaseReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricBaseReq.java similarity index 77% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricBaseReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricBaseReq.java index f30e86b5f..9e373e240 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricBaseReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricBaseReq.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.tencent.supersonic.common.pojo.DataFormat; -import com.tencent.supersonic.headless.common.model.pojo.RelateDimension; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.RelateDimension; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricReq.java similarity index 54% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricReq.java index 56a533217..108bbb727 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/MetricReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/MetricReq.java @@ -1,28 +1,28 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; -import com.tencent.supersonic.headless.common.model.enums.MetricTypeEnum; -import com.tencent.supersonic.headless.common.model.pojo.Measure; -import com.tencent.supersonic.headless.common.model.pojo.MetricTypeParams; +import com.tencent.supersonic.headless.common.server.enums.MetricType; +import com.tencent.supersonic.headless.common.server.pojo.Measure; +import com.tencent.supersonic.headless.common.server.pojo.MetricTypeParams; import lombok.Data; import java.util.List; @Data public class MetricReq extends MetricBaseReq { - private MetricTypeEnum metricType; + private MetricType metricType; private MetricTypeParams typeParams; - public MetricTypeEnum getMetricType() { + public MetricType getMetricType() { if (metricType != null) { return metricType; } List measureList = typeParams.getMeasures(); if (measureList.size() == 1 && typeParams.getExpr().trim().equalsIgnoreCase(measureList.get(0).getBizName())) { - return MetricTypeEnum.ATOMIC; + return MetricType.ATOMIC; } else if (measureList.size() >= 1) { - return MetricTypeEnum.DERIVED; + return MetricType.DERIVED; } throw new RuntimeException("measure can not be none"); } diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelReq.java similarity index 79% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelReq.java index 83ce59c73..082c521ee 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelReq.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.google.common.collect.Lists; -import com.tencent.supersonic.headless.common.model.pojo.Dim; -import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension; -import com.tencent.supersonic.headless.common.model.pojo.ModelDetail; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.Dim; +import com.tencent.supersonic.headless.common.server.pojo.DrillDownDimension; +import com.tencent.supersonic.headless.common.server.pojo.ModelDetail; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import java.util.List; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelSchemaFilterReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelSchemaFilterReq.java similarity index 75% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelSchemaFilterReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelSchemaFilterReq.java index f4bf4f32f..1febd843d 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ModelSchemaFilterReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ModelSchemaFilterReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageDimensionReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageDimensionReq.java similarity index 65% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageDimensionReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageDimensionReq.java index 5ac1837ed..1abd9f6f9 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageDimensionReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageDimensionReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageMetricReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageMetricReq.java similarity index 64% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageMetricReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageMetricReq.java index 586edd3d4..6e362762a 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageMetricReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageMetricReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageSchemaItemReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageSchemaItemReq.java similarity index 89% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageSchemaItemReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageSchemaItemReq.java index a76babe46..49df72767 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/PageSchemaItemReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/PageSchemaItemReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.PageBaseReq; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/SqlExecuteReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/SqlExecuteReq.java similarity index 91% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/SqlExecuteReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/SqlExecuteReq.java index 9781e9a74..4da5d6927 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/SqlExecuteReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/SqlExecuteReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import javax.validation.constraints.NotBlank; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ViewInfoReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ViewInfoReq.java similarity index 82% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ViewInfoReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ViewInfoReq.java index c456613c8..9cb687d33 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/request/ViewInfoReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/request/ViewInfoReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.request; +package com.tencent.supersonic.headless.common.server.request; import java.util.Date; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppDetailResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppDetailResp.java similarity index 62% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppDetailResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppDetailResp.java index 4182c4b7a..707f89550 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppDetailResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppDetailResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppResp.java similarity index 75% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppResp.java index 459bd0647..4a22d4bb1 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/AppResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/AppResp.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.RecordInfo; -import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum; -import com.tencent.supersonic.headless.common.model.pojo.AppConfig; +import com.tencent.supersonic.headless.common.server.enums.AppStatus; +import com.tencent.supersonic.headless.common.server.pojo.AppConfig; import lombok.Data; import org.apache.commons.lang3.StringUtils; @@ -21,7 +21,7 @@ public class AppResp extends RecordInfo { private String description; - private AppStatusEnum appStatus; + private AppStatus appStatus; private AppConfig config; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DatabaseResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DatabaseResp.java similarity index 95% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DatabaseResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DatabaseResp.java index c33741d70..58282a56f 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DatabaseResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DatabaseResp.java @@ -1,8 +1,5 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.RecordInfo; import lombok.AllArgsConstructor; @@ -10,6 +7,10 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + @Data @AllArgsConstructor diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimSchemaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimSchemaResp.java similarity index 78% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimSchemaResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimSchemaResp.java index 53ff0028a..5e89b9c22 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimSchemaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimSchemaResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import lombok.Data; import lombok.ToString; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimensionResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimensionResp.java similarity index 76% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimensionResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimensionResp.java index efb206852..850cbeba9 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DimensionResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DimensionResp.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.tencent.supersonic.common.pojo.enums.DataTypeEnums; -import com.tencent.supersonic.headless.common.model.pojo.DimValueMap; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.DimValueMap; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import lombok.ToString; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DomainResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DomainResp.java similarity index 83% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DomainResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DomainResp.java index 985988296..631bf3538 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/DomainResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/DomainResp.java @@ -1,14 +1,13 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; -import com.tencent.supersonic.headless.common.model.pojo.Entity; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.Entity; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import lombok.Data; +import lombok.ToString; import java.util.List; import java.util.Objects; -import lombok.Data; -import lombok.ToString; - @Data @ToString public class DomainResp extends SchemaItem { diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ExplainResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ExplainResp.java similarity index 82% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ExplainResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ExplainResp.java index 667c96903..2f887023c 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ExplainResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ExplainResp.java @@ -1,12 +1,13 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; -import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; +import java.io.Serializable; + @Data @ToString @Builder diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MeasureResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MeasureResp.java similarity index 86% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MeasureResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MeasureResp.java index 9d551ae1a..6e972a380 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MeasureResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MeasureResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricResp.java similarity index 84% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricResp.java index c0a27b589..073dd97cd 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricResp.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.tencent.supersonic.common.pojo.DataFormat; -import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension; -import com.tencent.supersonic.headless.common.model.pojo.Measure; -import com.tencent.supersonic.headless.common.model.pojo.MetricTypeParams; -import com.tencent.supersonic.headless.common.model.pojo.RelateDimension; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.DrillDownDimension; +import com.tencent.supersonic.headless.common.server.pojo.Measure; +import com.tencent.supersonic.headless.common.server.pojo.MetricTypeParams; +import com.tencent.supersonic.headless.common.server.pojo.RelateDimension; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import lombok.ToString; import org.apache.commons.collections.CollectionUtils; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricSchemaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricSchemaResp.java similarity index 71% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricSchemaResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricSchemaResp.java index 495ad5be0..980e58da5 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/MetricSchemaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/MetricSchemaResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import lombok.Data; import lombok.ToString; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelResp.java similarity index 78% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelResp.java index 04cc8e6eb..73c758b04 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelResp.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.google.common.collect.Lists; -import com.tencent.supersonic.headless.common.model.pojo.Dim; -import com.tencent.supersonic.headless.common.model.pojo.DrillDownDimension; -import com.tencent.supersonic.headless.common.model.pojo.Identify; -import com.tencent.supersonic.headless.common.model.pojo.ModelDetail; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.pojo.Dim; +import com.tencent.supersonic.headless.common.server.pojo.DrillDownDimension; +import com.tencent.supersonic.headless.common.server.pojo.Identify; +import com.tencent.supersonic.headless.common.server.pojo.ModelDetail; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; import lombok.Data; import org.springframework.util.CollectionUtils; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaRelaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaRelaResp.java similarity index 78% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaRelaResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaRelaResp.java index 39d1ac2b2..5c28aa1a1 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaRelaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaRelaResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import lombok.Data; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaResp.java similarity index 86% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaResp.java index 8e510ca89..19886c7ff 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/ModelSchemaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/ModelSchemaResp.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.tencent.supersonic.common.pojo.ModelRela; -import com.tencent.supersonic.headless.common.model.pojo.Identify; +import com.tencent.supersonic.headless.common.server.pojo.Identify; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/QueryResultWithSchemaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/QueryResultWithSchemaResp.java similarity index 64% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/QueryResultWithSchemaResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/QueryResultWithSchemaResp.java index 1961b8e64..50cc9f77c 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/response/QueryResultWithSchemaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/common/server/response/QueryResultWithSchemaResp.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.common.model.response; +package com.tencent.supersonic.headless.common.server.response; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.QueryAuthorization; import com.tencent.supersonic.common.pojo.QueryColumn; -import com.tencent.supersonic.headless.common.model.enums.SemanticTypeEnum; -import com.tencent.supersonic.headless.common.model.pojo.QueryResult; +import com.tencent.supersonic.headless.common.server.enums.SemanticType; +import com.tencent.supersonic.headless.common.server.pojo.QueryResult; import lombok.Data; import lombok.ToString; import java.util.List; @@ -22,13 +22,13 @@ public class QueryResultWithSchemaResp extends QueryResult> public List getMetricColumns() { return columns.stream() - .filter(queryColumn -> SemanticTypeEnum.NUMBER.name().equals(queryColumn.getShowType())) + .filter(queryColumn -> SemanticType.NUMBER.name().equals(queryColumn.getShowType())) .collect(Collectors.toList()); } public List getDimensionColumns() { return columns.stream() - .filter(queryColumn -> !SemanticTypeEnum.NUMBER.name().equals(queryColumn.getShowType())) + .filter(queryColumn -> !SemanticType.NUMBER.name().equals(queryColumn.getShowType())) .collect(Collectors.toList()); } } diff --git a/headless/common/pom.xml b/headless/common/pom.xml deleted file mode 100644 index 248d5d2ef..000000000 --- a/headless/common/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - com.tencent.supersonic - headless - ${revision} - - 4.0.0 - - headless-common - - - - - - - - - com.clickhouse - clickhouse-jdbc - ${clickhouse.jdbc.version} - - all - - - - com.tencent.supersonic - common - ${project.version} - - - - org.projectlombok - lombok - ${lombok.version} - - - jakarta.validation - jakarta.validation-api - - - org.springframework - spring-core - ${spring.version} - - - com.alibaba - fastjson - ${fastjson.version} - compile - - - commons-codec - commons-codec - - - org.springframework.boot - spring-boot-starter-web - ${spring.version} - - - com.tencent.supersonic - auth-api - ${project.version} - - - diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DimensionTypeEnum.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DimensionTypeEnum.java deleted file mode 100644 index 72d609637..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/DimensionTypeEnum.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.tencent.supersonic.headless.common.model.enums; - - -public enum DimensionTypeEnum { - - categorical, - time - - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/IdentifyTypeEnum.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/IdentifyTypeEnum.java deleted file mode 100644 index 86b08261d..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/IdentifyTypeEnum.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.tencent.supersonic.headless.common.model.enums; - -public enum IdentifyTypeEnum { - - primary, - - foreign, - -} \ No newline at end of file diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/MetricTypeEnum.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/MetricTypeEnum.java deleted file mode 100644 index 02c5e9d18..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/MetricTypeEnum.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.tencent.supersonic.headless.common.model.enums; - - -public enum MetricTypeEnum { - - ATOMIC, - DERIVED - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/OperatorEnum.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/OperatorEnum.java deleted file mode 100644 index 6b62ed11a..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/OperatorEnum.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.tencent.supersonic.headless.common.model.enums; - -public enum OperatorEnum { - - MAX("MAX"), - - MIN("MIN"), - - AVG("AVG"), - - SUM("SUM"), - - DISTINCT("DISTINCT"), - - TOPN("TOPN"), - - PERCENTILE("PERCENTILE"), - - UNKNOWN("UNKNOWN"); - - - private String operator; - - OperatorEnum(String operator) { - this.operator = operator; - } - - public String getOperator() { - return operator; - } - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/SemanticTypeEnum.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/SemanticTypeEnum.java deleted file mode 100644 index c927740c8..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/enums/SemanticTypeEnum.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.tencent.supersonic.headless.common.model.enums; - -public enum SemanticTypeEnum { - - CATEGORY, - ID, - DATE, - NUMBER - -} \ No newline at end of file diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DatasourceType.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DatasourceType.java deleted file mode 100644 index 279685fec..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/model/pojo/DatasourceType.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.tencent.supersonic.headless.common.model.pojo; - -import com.tencent.supersonic.common.pojo.Constants; -import java.util.List; -import lombok.Data; - -@Data -public class DatasourceType { - - private String name; - private String prefix; - private List versions; - - public DatasourceType(String name, List versions) { - this.name = name; - this.prefix = String.format(Constants.JDBC_PREFIX_FORMATTER, name); - this.versions = versions; - } -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/ApiQuerySingleResult.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/ApiQuerySingleResult.java deleted file mode 100644 index b92bb7f89..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/ApiQuerySingleResult.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tencent.supersonic.headless.common.query.pojo; - - -import com.tencent.supersonic.headless.common.model.pojo.Item; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import lombok.Data; - -@Data -public class ApiQuerySingleResult { - - private Item item; - - private QueryResultWithSchemaResp result; - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Materialization.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Materialization.java deleted file mode 100644 index 9f214016a..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/Materialization.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tencent.supersonic.headless.common.query.pojo; - -import java.util.List; -import lombok.Data; - -@Data -public class Materialization { - - private String name; - private String destination; - private String destinationType; - private List depends; - private List metrics; - private List dimensions; - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiPreviewReq.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiPreviewReq.java deleted file mode 100644 index e2d6d9cac..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/request/QueryApiPreviewReq.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.tencent.supersonic.headless.common.query.request; - -import com.tencent.supersonic.common.pojo.DateConf; -import com.tencent.supersonic.headless.common.model.pojo.Item; -import lombok.Data; - -@Data -public class QueryApiPreviewReq { - - private Item item; - - private DateConf dateConf = new DateConf(); - -} diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ApiQueryResultResp.java b/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ApiQueryResultResp.java deleted file mode 100644 index 8b017a12f..000000000 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/response/ApiQueryResultResp.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.tencent.supersonic.headless.common.query.response; - -import com.tencent.supersonic.headless.common.query.pojo.ApiQuerySingleResult; -import lombok.Builder; -import lombok.Data; - -import java.util.List; - -@Data -@Builder -public class ApiQueryResultResp { - - private List results; - -} diff --git a/headless/query/pom.xml b/headless/core/pom.xml similarity index 96% rename from headless/query/pom.xml rename to headless/core/pom.xml index 285484645..1e4286ea3 100644 --- a/headless/query/pom.xml +++ b/headless/core/pom.xml @@ -9,7 +9,7 @@ 4.0.0 - headless-query + headless-core 8 @@ -38,7 +38,7 @@ com.tencent.supersonic - headless-common + headless-api ${project.version} @@ -62,7 +62,7 @@ com.tencent.supersonic - headless-model + headless-server ${project.version} compile diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/annotation/ApiHeaderCheck.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/ApiHeaderCheck.java similarity index 83% rename from headless/api/src/main/java/com/tencent/supersonic/headless/api/annotation/ApiHeaderCheck.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/ApiHeaderCheck.java index dfa7d36c2..c299affd9 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/annotation/ApiHeaderCheck.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/ApiHeaderCheck.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.api.annotation; +package com.tencent.supersonic.headless.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/S2SQLDataPermission.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/S2SQLDataPermission.java similarity index 84% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/S2SQLDataPermission.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/S2SQLDataPermission.java index 26ffe7158..ebe6235b0 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/S2SQLDataPermission.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/S2SQLDataPermission.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.annotation; +package com.tencent.supersonic.headless.core.annotation; import java.lang.annotation.Target; import java.lang.annotation.RetentionPolicy; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/StructDataPermission.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/StructDataPermission.java similarity index 83% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/StructDataPermission.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/StructDataPermission.java index 4c5ec073b..e0e61af70 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/annotation/StructDataPermission.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/annotation/StructDataPermission.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.annotation; +package com.tencent.supersonic.headless.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/aspect/ApiHeaderCheckAspect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/ApiHeaderCheckAspect.java similarity index 85% rename from headless/api/src/main/java/com/tencent/supersonic/headless/api/aspect/ApiHeaderCheckAspect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/ApiHeaderCheckAspect.java index df6993bb5..8f7f9cae6 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/aspect/ApiHeaderCheckAspect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/ApiHeaderCheckAspect.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.api.aspect; +package com.tencent.supersonic.headless.core.aspect; import com.tencent.supersonic.common.pojo.Pair; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; import com.tencent.supersonic.common.util.SignatureUtils; -import com.tencent.supersonic.headless.api.service.AppService; -import com.tencent.supersonic.headless.common.model.enums.AppStatusEnum; -import com.tencent.supersonic.headless.common.model.response.AppDetailResp; +import com.tencent.supersonic.headless.common.server.enums.AppStatus; +import com.tencent.supersonic.headless.common.server.response.AppDetailResp; +import com.tencent.supersonic.headless.server.service.AppService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; @@ -33,7 +33,7 @@ public class ApiHeaderCheckAspect { @Autowired private AppService appService; - @Pointcut("@annotation(com.tencent.supersonic.headless.api.annotation.ApiHeaderCheck)") + @Pointcut("@annotation(com.tencent.supersonic.headless.core.annotation.ApiHeaderCheck)") private void apiPermissionCheck() { } @@ -62,7 +62,7 @@ public class ApiHeaderCheckAspect { if (appDetailResp == null) { throw new InvalidArgumentException("该appId对应的应用不存在"); } - if (!AppStatusEnum.ONLINE.equals(appDetailResp.getAppStatus())) { + if (!AppStatus.ONLINE.equals(appDetailResp.getAppStatus())) { throw new InvalidArgumentException("该应用暂时为非在线状态"); } Pair checkResult = SignatureUtils.isValidSignature(appId, appDetailResp.getAppSecret(), diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/AuthCommonService.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/AuthCheckBaseAspect.java similarity index 94% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/AuthCommonService.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/AuthCheckBaseAspect.java index c4e1436c5..4a94892e4 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/AuthCommonService.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/AuthCheckBaseAspect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.aspect; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -16,14 +16,14 @@ import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.SensitiveLevelEnum; import com.tencent.supersonic.common.pojo.exception.InvalidPermissionException; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +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 lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -41,7 +41,7 @@ import java.util.stream.Collectors; @Service @Slf4j -public class AuthCommonService { +public class AuthCheckBaseAspect { private static final ObjectMapper MAPPER = new ObjectMapper().setDateFormat( new SimpleDateFormat(Constants.DAY_FORMAT)); @Autowired diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DimValueAspect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/DimValueAspect.java similarity index 93% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DimValueAspect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/DimValueAspect.java index 1c554179d..5ebd9123a 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DimValueAspect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/DimValueAspect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.utils; +package com.tencent.supersonic.headless.core.aspect; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.Filter; @@ -8,13 +8,13 @@ import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.jsqlparser.FieldExpression; import com.tencent.supersonic.common.util.jsqlparser.SqlParserReplaceHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.headless.common.model.pojo.DimValueMap; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.pojo.DimValueMap; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.DimensionService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.util.Strings; @@ -47,7 +47,7 @@ public class DimValueAspect { @Autowired private DimensionService dimensionService; - @Around("execution(* com.tencent.supersonic.headless.query.service.QueryServiceImpl.queryBySql(..))") + @Around("execution(* com.tencent.supersonic.headless.core.service.impl.QueryServiceImpl.queryBySql(..))") public Object handleSqlDimValue(ProceedingJoinPoint joinPoint) throws Throwable { if (!dimensionValueMapSqlEnable) { log.debug("sql dimensionValueMapEnable is false, skip dimensionValueMap"); @@ -133,9 +133,9 @@ public class DimValueAspect { filedNameToValueMap.put(fieldName, map); } - @Around("execution(* com.tencent.supersonic.headless.query.rest.QueryController.queryByStruct(..))" - + " || execution(* com.tencent.supersonic.headless.query.service.QueryService.queryByStruct(..))" - + " || execution(* com.tencent.supersonic.headless.query.service.QueryService.queryByStructWithAuth(..))") + @Around("execution(* com.tencent.supersonic.headless.core.rest.QueryController.queryByStruct(..))" + + " || execution(* com.tencent.supersonic.headless.core.service.QueryService.queryByStruct(..))" + + " || execution(* com.tencent.supersonic.headless.core.service.QueryService.queryByStructWithAuth(..))") public Object handleDimValue(ProceedingJoinPoint joinPoint) throws Throwable { if (!dimensionValueMapEnable) { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/S2SQLDataAspect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/S2SQLDataAspect.java similarity index 79% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/S2SQLDataAspect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/S2SQLDataAspect.java index 131d35c6c..495070155 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/S2SQLDataAspect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/S2SQLDataAspect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.aspect; +package com.tencent.supersonic.headless.core.aspect; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -7,16 +7,15 @@ import com.tencent.supersonic.auth.api.authorization.response.AuthorizedResource import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.exception.InvalidPermissionException; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; -import com.tencent.supersonic.headless.model.domain.pojo.ModelFilter; -import com.tencent.supersonic.headless.query.service.AuthCommonService; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.ModelService; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; @@ -46,7 +45,7 @@ import static com.tencent.supersonic.common.pojo.Constants.MINUS; @Aspect @Order(1) @Slf4j -public class S2SQLDataAspect { +public class S2SQLDataAspect extends AuthCheckBaseAspect { @Autowired private QueryStructUtils queryStructUtils; @@ -54,12 +53,10 @@ public class S2SQLDataAspect { private DimensionService dimensionService; @Autowired private ModelService modelService; - @Autowired - private AuthCommonService authCommonService; @Value("${permission.data.enable:true}") private Boolean permissionDataEnable; - @Pointcut("@annotation(com.tencent.supersonic.headless.query.annotation.S2SQLDataPermission)") + @Pointcut("@annotation(com.tencent.supersonic.headless.core.annotation.S2SQLDataPermission)") private void s2SQLPermissionCheck() { } @@ -79,26 +76,25 @@ public class S2SQLDataAspect { List modelIds = queryS2SQLReq.getModelIds(); //1. determine whether admin of the model - if (authCommonService.doModelAdmin(user, modelIds)) { + if (doModelAdmin(user, modelIds)) { log.info("determine whether admin of the model!"); return joinPoint.proceed(); } // 2. determine whether the subject field is visible - authCommonService.doModelVisible(user, modelIds); + doModelVisible(user, modelIds); // 3. fetch data permission meta information Set res4Privilege = queryStructUtils.getResNameEnExceptInternalCol(queryS2SQLReq, user); log.info("modelId:{}, res4Privilege:{}", modelIds, res4Privilege); - Set sensitiveResByModel = authCommonService.getHighSensitiveColsByModelId(modelIds); + Set sensitiveResByModel = getHighSensitiveColsByModelId(modelIds); Set sensitiveResReq = res4Privilege.parallelStream() .filter(sensitiveResByModel::contains).collect(Collectors.toSet()); log.info("this query domainId:{}, sensitiveResReq:{}", modelIds, sensitiveResReq); // query user privilege info - AuthorizedResourceResp authorizedResource = authCommonService - .getAuthorizedResource(user, modelIds, sensitiveResReq); + AuthorizedResourceResp authorizedResource = getAuthorizedResource(user, modelIds, sensitiveResReq); // get sensitiveRes that user has privilege - Set resAuthSet = authCommonService.getAuthResNameSet(authorizedResource, modelIds); + Set resAuthSet = getAuthResNameSet(authorizedResource, modelIds); // 4.if sensitive fields without permission are involved in filter, thrown an exception doFilterCheckLogic(queryS2SQLReq, resAuthSet, sensitiveResReq); @@ -109,20 +105,19 @@ public class S2SQLDataAspect { // 6.proceed QueryResultWithSchemaResp queryResultWithColumns = (QueryResultWithSchemaResp) joinPoint.proceed(); - if (CollectionUtils.isEmpty(sensitiveResReq) || authCommonService - .allSensitiveResReqIsOk(sensitiveResReq, resAuthSet)) { + if (CollectionUtils.isEmpty(sensitiveResReq) || allSensitiveResReqIsOk(sensitiveResReq, resAuthSet)) { // if sensitiveRes is empty log.info("sensitiveResReq is empty"); - return authCommonService.getQueryResultWithColumns(queryResultWithColumns, modelIds, authorizedResource); + return getQueryResultWithColumns(queryResultWithColumns, modelIds, authorizedResource); } // 6.if the column has no permission, hit * Set need2Apply = sensitiveResReq.stream().filter(req -> !resAuthSet.contains(req)) .collect(Collectors.toSet()); log.info("need2Apply:{},sensitiveResReq:{},resAuthSet:{}", need2Apply, sensitiveResReq, resAuthSet); - QueryResultWithSchemaResp queryResultAfterDesensitization = authCommonService - .desensitizationData(queryResultWithColumns, need2Apply); - authCommonService.addPromptInfoInfo(modelIds, queryResultAfterDesensitization, authorizedResource, need2Apply); + QueryResultWithSchemaResp queryResultAfterDesensitization = + desensitizationData(queryResultWithColumns, need2Apply); + addPromptInfoInfo(modelIds, queryResultAfterDesensitization, authorizedResource, need2Apply); return queryResultAfterDesensitization; } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/StructDataAspect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/StructDataAspect.java similarity index 79% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/StructDataAspect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/StructDataAspect.java index 524ef9f0c..4c238c120 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/aspect/StructDataAspect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/aspect/StructDataAspect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.aspect; +package com.tencent.supersonic.headless.core.aspect; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -7,15 +7,14 @@ import com.tencent.supersonic.auth.api.authorization.response.AuthorizedResource import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.exception.InvalidPermissionException; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.model.domain.pojo.MetaFilter; -import com.tencent.supersonic.headless.query.service.AuthCommonService; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.ModelService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; @@ -41,19 +40,17 @@ import static com.tencent.supersonic.common.pojo.Constants.MINUS; @Component @Aspect @Slf4j -public class StructDataAspect { +public class StructDataAspect extends AuthCheckBaseAspect { @Autowired private QueryStructUtils queryStructUtils; @Autowired private DimensionService dimensionService; @Autowired private ModelService modelService; - @Autowired - private AuthCommonService authCommonService; @Value("${permission.data.enable:true}") private Boolean permissionDataEnable; - @Pointcut("@annotation(com.tencent.supersonic.headless.query.annotation.StructDataPermission)") + @Pointcut("@annotation(com.tencent.supersonic.headless.core.annotation.StructDataPermission)") public void dataPermissionAOP() { } @@ -72,28 +69,28 @@ public class StructDataAspect { throw new RuntimeException("lease provide user information"); } //1. determine whether admin of the model - if (authCommonService.doModelAdmin(user, queryStructReq.getModelIds())) { + if (doModelAdmin(user, queryStructReq.getModelIds())) { return point.proceed(); } // 2. determine whether the subject field is visible - authCommonService.doModelVisible(user, queryStructReq.getModelIds()); + doModelVisible(user, queryStructReq.getModelIds()); // 3. fetch data permission meta information List modelIds = queryStructReq.getModelIds(); Set res4Privilege = queryStructUtils.getResNameEnExceptInternalCol(queryStructReq); log.info("modelId:{}, res4Privilege:{}", modelIds, res4Privilege); - Set sensitiveResByModel = authCommonService.getHighSensitiveColsByModelId(modelIds); + Set sensitiveResByModel = getHighSensitiveColsByModelId(modelIds); Set sensitiveResReq = res4Privilege.parallelStream() .filter(sensitiveResByModel::contains).collect(Collectors.toSet()); log.info("this query domainId:{}, sensitiveResReq:{}", modelIds, sensitiveResReq); // query user privilege info - AuthorizedResourceResp authorizedResource = authCommonService.getAuthorizedResource(user, + AuthorizedResourceResp authorizedResource = getAuthorizedResource(user, modelIds, sensitiveResReq); // get sensitiveRes that user has privilege - Set resAuthSet = authCommonService.getAuthResNameSet(authorizedResource, + Set resAuthSet = getAuthResNameSet(authorizedResource, queryStructReq.getModelIds()); // 4.if sensitive fields without permission are involved in filter, thrown an exception @@ -108,21 +105,21 @@ public class StructDataAspect { if (CollectionUtils.isEmpty(sensitiveResReq) || allSensitiveResReqIsOk(sensitiveResReq, resAuthSet)) { // if sensitiveRes is empty log.info("sensitiveResReq is empty"); - return authCommonService.getQueryResultWithColumns(queryResultWithColumns, modelIds, authorizedResource); + return getQueryResultWithColumns(queryResultWithColumns, modelIds, authorizedResource); } // 6.if the column has no permission, hit * Set need2Apply = sensitiveResReq.stream().filter(req -> !resAuthSet.contains(req)) .collect(Collectors.toSet()); QueryResultWithSchemaResp queryResultAfterDesensitization = - authCommonService.desensitizationData(queryResultWithColumns, need2Apply); - authCommonService.addPromptInfoInfo(modelIds, queryResultAfterDesensitization, authorizedResource, need2Apply); + desensitizationData(queryResultWithColumns, need2Apply); + addPromptInfoInfo(modelIds, queryResultAfterDesensitization, authorizedResource, need2Apply); return queryResultAfterDesensitization; } - private boolean allSensitiveResReqIsOk(Set sensitiveResReq, Set resAuthSet) { + public boolean allSensitiveResReqIsOk(Set sensitiveResReq, Set resAuthSet) { if (resAuthSet.containsAll(sensitiveResReq)) { return true; } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/executor/JdbcExecutor.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java similarity index 73% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/executor/JdbcExecutor.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java index 5062b6317..513dc3085 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/executor/JdbcExecutor.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/JdbcExecutor.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.headless.query.executor; +package com.tencent.supersonic.headless.core.executor; -import com.tencent.supersonic.headless.common.model.response.DatabaseResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.model.domain.utils.SqlUtils; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.server.response.DatabaseResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.utils.SqlUtils; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; import org.springframework.stereotype.Component; 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 new file mode 100644 index 000000000..4b9f96e4a --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/executor/QueryExecutor.java @@ -0,0 +1,12 @@ +package com.tencent.supersonic.headless.core.executor; + +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.service.Catalog; + +public interface QueryExecutor { + + boolean accept(QueryStatement queryStatement); + + QueryResultWithSchemaResp execute(Catalog catalog, QueryStatement queryStatement); +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/optimizer/DetailQuery.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/DetailQuery.java similarity index 87% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/optimizer/DetailQuery.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/DetailQuery.java index 71c58ca39..9a1260197 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/optimizer/DetailQuery.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/DetailQuery.java @@ -1,8 +1,9 @@ -package com.tencent.supersonic.headless.query.optimizer; +package com.tencent.supersonic.headless.core.optimizer; import com.google.common.base.Strings; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; + import java.util.Objects; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/QueryOptimizer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/QueryOptimizer.java new file mode 100644 index 000000000..fd02c54d0 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/optimizer/QueryOptimizer.java @@ -0,0 +1,8 @@ +package com.tencent.supersonic.headless.core.optimizer; + +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; + +public interface QueryOptimizer { + void rewrite(QueryStructReq queryStructCmd, QueryStatement queryStatement); +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/HeadlessConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/HeadlessConverter.java new file mode 100644 index 000000000..f06b22fa8 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/HeadlessConverter.java @@ -0,0 +1,12 @@ +package com.tencent.supersonic.headless.core.parser; + +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.service.Catalog; + +public interface HeadlessConverter { + + boolean accept(QueryStatement queryStatement); + + void converter(Catalog catalog, QueryStatement queryStatement) throws Exception; + +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/QueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java similarity index 90% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/QueryParser.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java index 276be5a73..55f0e523a 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/QueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/QueryParser.java @@ -1,24 +1,25 @@ -package com.tencent.supersonic.headless.query.parser; +package com.tencent.supersonic.headless.core.parser; import com.tencent.supersonic.common.util.StringUtil; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.pojo.MetricTable; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.utils.ComponentFactory; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.pojo.MetricTable; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.utils.ComponentFactory; +import com.tencent.supersonic.headless.server.service.Catalog; 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; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + @Component @Slf4j @Primary 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 new file mode 100644 index 000000000..b31fc6d6f --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/SqlParser.java @@ -0,0 +1,10 @@ +package com.tencent.supersonic.headless.core.parser; + +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.service.Catalog; + +public interface SqlParser { + + QueryStatement explain(QueryStatement queryStatement, AggOption aggOption, Catalog catalog) throws Exception; +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/CalciteSqlParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java similarity index 72% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/CalciteSqlParser.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java index 203eea31f..95ce08066 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/CalciteSqlParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/CalciteSqlParser.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.headless.query.parser.calcite; +package com.tencent.supersonic.headless.core.parser.calcite; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.SqlParser; -import com.tencent.supersonic.headless.query.parser.calcite.planner.AggPlanner; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.HeadlessModel; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.schema.RuntimeOptions; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessModel; +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; +import com.tencent.supersonic.headless.core.parser.calcite.schema.RuntimeOptions; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.service.Catalog; import org.springframework.stereotype.Component; @Component("CalciteSqlParser") diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java similarity index 94% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java index c3e021d30..69fc95f1c 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/Configuration.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/Configuration.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.query.parser.calcite; +package com.tencent.supersonic.headless.core.parser.calcite; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSqlTypeFactoryImpl; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticSqlDialect; -import com.tencent.supersonic.headless.query.parser.calcite.schema.ViewExpanderImpl; +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSqlTypeFactoryImpl; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticSqlDialect; +import com.tencent.supersonic.headless.core.parser.calcite.schema.ViewExpanderImpl; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/HeadlessSchemaManager.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/HeadlessSchemaManager.java similarity index 89% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/HeadlessSchemaManager.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/HeadlessSchemaManager.java index 304194226..97df5f204 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/HeadlessSchemaManager.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/HeadlessSchemaManager.java @@ -1,31 +1,41 @@ -package com.tencent.supersonic.headless.query.parser.calcite; +package com.tencent.supersonic.headless.core.parser.calcite; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.tencent.supersonic.common.pojo.ModelRela; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; -import com.tencent.supersonic.headless.common.model.yaml.DataModelYamlTpl; -import com.tencent.supersonic.headless.common.model.yaml.DimensionTimeTypeParamsTpl; -import com.tencent.supersonic.headless.common.model.yaml.DimensionYamlTpl; -import com.tencent.supersonic.headless.common.model.yaml.IdentifyYamlTpl; -import com.tencent.supersonic.headless.common.model.yaml.MeasureYamlTpl; -import com.tencent.supersonic.headless.common.model.yaml.MetricTypeParamsYamlTpl; -import com.tencent.supersonic.headless.common.model.yaml.MetricYamlTpl; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataType; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DimensionTimeTypeParams; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization.TimePartType; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.MetricTypeParams; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.HeadlessModel; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; +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; +import com.tencent.supersonic.headless.server.pojo.yaml.IdentifyYamlTpl; +import com.tencent.supersonic.headless.server.pojo.yaml.MeasureYamlTpl; +import com.tencent.supersonic.headless.server.pojo.yaml.MetricTypeParamsYamlTpl; +import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl; +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.HeadlessModel; +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.schema.HeadlessSchema; +import com.tencent.supersonic.headless.server.service.Catalog; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Triple; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -38,15 +48,6 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.tuple.Triple; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; @Slf4j @Service diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/AggPlanner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java similarity index 79% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/AggPlanner.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java index f238113cf..eb5038838 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/AggPlanner.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/AggPlanner.java @@ -1,23 +1,24 @@ -package com.tencent.supersonic.headless.query.parser.calcite.planner; +package com.tencent.supersonic.headless.core.parser.calcite.planner; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.Configuration; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SchemaBuilder; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticSqlDialect; -import com.tencent.supersonic.headless.query.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.query.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.optimizer.FilterToGroupScanRule; -import com.tencent.supersonic.headless.query.parser.calcite.sql.render.FilterRender; -import com.tencent.supersonic.headless.query.parser.calcite.sql.render.OutputRender; -import com.tencent.supersonic.headless.query.parser.calcite.sql.render.SourceRender; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.core.parser.calcite.Configuration; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; +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.persistence.pojo.QueryStatement; +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.HeadlessSchema; +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.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 java.util.ArrayList; import java.util.LinkedList; import java.util.List; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/MaterializationPlanner.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/MaterializationPlanner.java similarity index 92% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/MaterializationPlanner.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/MaterializationPlanner.java index da33bbf68..13439fdf6 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/planner/MaterializationPlanner.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/MaterializationPlanner.java @@ -1,21 +1,21 @@ -package com.tencent.supersonic.headless.query.parser.calcite.planner; +package com.tencent.supersonic.headless.core.parser.calcite.planner; import com.tencent.supersonic.common.util.calcite.SqlParseUtils; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.Configuration; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization.TimePartType; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.MaterializationElement; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.TimeRange; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SchemaBuilder; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.core.parser.calcite.Configuration; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +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.Materialization.TimePartType; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.MaterializationElement; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.TimeRange; +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; 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/parser/calcite/planner/Planner.java new file mode 100644 index 000000000..8cdb15c81 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/planner/Planner.java @@ -0,0 +1,17 @@ +package com.tencent.supersonic.headless.core.parser.calcite.planner; + + +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; + +public interface Planner { + + public void explain(QueryStatement queryStatement, AggOption aggOption) throws Exception; + + public String getSql(); + + public String getSourceId(); + + public HeadlessSchema findBest(); +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Constants.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java similarity index 93% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Constants.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java index 20146dd52..ff151c0e9 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Constants.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Constants.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; public class Constants { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataSource.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java similarity index 62% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataSource.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java index 9ec3cb649..ae1fb27cd 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataSource.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataSource.java @@ -1,6 +1,5 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization.TimePartType; import java.util.List; import lombok.Builder; import lombok.Data; @@ -26,5 +25,5 @@ public class DataSource { private String aggTime; - private TimePartType timePartType = TimePartType.None; + private Materialization.TimePartType timePartType = Materialization.TimePartType.None; } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataType.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java similarity index 92% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataType.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java index 751fb0f37..9e3ad3671 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DataType.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DataType.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.Arrays; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Dimension.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java similarity index 72% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Dimension.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java index 3822d53c5..8a09d8aee 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Dimension.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Dimension.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticItem; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticItem; import lombok.Builder; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DimensionTimeTypeParams.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java similarity index 66% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DimensionTimeTypeParams.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java index 03699c5a4..3770aa1ef 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/DimensionTimeTypeParams.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/DimensionTimeTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/HeadlessModel.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/HeadlessModel.java similarity index 88% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/HeadlessModel.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/HeadlessModel.java index fa1722167..f7736864b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/HeadlessModel.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/HeadlessModel.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.ArrayList; import java.util.HashMap; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Identify.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java similarity index 81% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Identify.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java index b7446178e..b6ef58da0 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Identify.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Identify.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/JoinRelation.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java similarity index 81% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/JoinRelation.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java index 798647bf8..793912d31 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/JoinRelation.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/JoinRelation.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.List; import lombok.Builder; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Materialization.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java similarity index 94% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Materialization.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java index 7dfabfd04..9fb8a2bcc 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Materialization.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Materialization.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.ArrayList; import java.util.List; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MaterializationElement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java similarity index 73% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MaterializationElement.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java index 606f65b11..7f3d14af8 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MaterializationElement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MaterializationElement.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.List; import lombok.Builder; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Measure.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java similarity index 85% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Measure.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java index 971e03cac..3d2ae3cb5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Measure.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Measure.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Metric.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java similarity index 67% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Metric.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java index 1fd07fb35..78534f845 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/Metric.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/Metric.java @@ -1,7 +1,8 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticItem; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SemanticItem; + import java.util.List; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MetricTypeParams.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java similarity index 68% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MetricTypeParams.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java index 9012b7cef..6c250550d 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/MetricTypeParams.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/MetricTypeParams.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import java.util.List; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/TimeRange.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java similarity index 66% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/TimeRange.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java index 25b7065a6..c633684e2 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/s2sql/TimeRange.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/s2sql/TimeRange.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.s2sql; +package com.tencent.supersonic.headless.core.parser.calcite.s2sql; import lombok.Builder; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/DataSourceTable.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java similarity index 98% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/DataSourceTable.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java index 074d601f1..70862e004 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/DataSourceTable.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/DataSourceTable.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import java.util.ArrayList; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSchema.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSchema.java similarity index 86% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSchema.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSchema.java index b3705a390..18a23fe3b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSchema.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSchema.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.HeadlessModel; +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.HeadlessModel; import org.apache.calcite.schema.Schema; import org.apache.calcite.schema.SchemaVersion; import org.apache.calcite.schema.Table; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlConformance.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlConformance.java similarity index 98% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlConformance.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlConformance.java index 3699f5618..3983c385e 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlConformance.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlConformance.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import org.apache.calcite.sql.fun.SqlLibrary; import org.apache.calcite.sql.validate.SqlConformance; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java similarity index 85% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java index 50d29dd33..99d50121f 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/HeadlessSqlTypeFactoryImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import java.nio.charset.Charset; import org.apache.calcite.rel.type.RelDataTypeSystem; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/RuntimeOptions.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java similarity index 76% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/RuntimeOptions.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java index 8941e4883..fd18ccab4 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/RuntimeOptions.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/RuntimeOptions.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import lombok.Builder; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SchemaBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java similarity index 94% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SchemaBuilder.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java index dd2298490..9c528dd51 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SchemaBuilder.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SchemaBuilder.java @@ -1,8 +1,9 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; -import com.tencent.supersonic.headless.query.parser.calcite.Configuration; -import com.tencent.supersonic.headless.query.parser.calcite.sql.S2SQLSqlValidatorImpl; +import com.tencent.supersonic.headless.core.parser.calcite.Configuration; +import com.tencent.supersonic.headless.core.parser.calcite.sql.S2SQLSqlValidatorImpl; + import java.util.Collections; import java.util.HashMap; import java.util.Map; 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 new file mode 100644 index 000000000..f9aeb2dd0 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticItem.java @@ -0,0 +1,6 @@ +package com.tencent.supersonic.headless.core.parser.calcite.schema; + +public interface SemanticItem { + + public String getName(); +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SemanticSqlDialect.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java similarity index 97% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SemanticSqlDialect.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java index b7b441cf5..f6c1a5c5b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/SemanticSqlDialect.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/SemanticSqlDialect.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import com.google.common.base.Preconditions; import org.apache.calcite.avatica.util.Casing; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/ViewExpanderImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java similarity index 86% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/ViewExpanderImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java index 29c79a84a..f9a6cced0 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/schema/ViewExpanderImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/schema/ViewExpanderImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.schema; +package com.tencent.supersonic.headless.core.parser.calcite.schema; import java.util.List; import org.apache.calcite.plan.RelOptTable; 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 new file mode 100644 index 000000000..ef5bfd323 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Optimization.java @@ -0,0 +1,10 @@ +package com.tencent.supersonic.headless.core.parser.calcite.sql; + + +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; + + +public interface Optimization { + + public void visit(HeadlessSchema headlessSchema); +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/Renderer.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java similarity index 81% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/Renderer.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java index 096c67fe5..63f5fcb60 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/Renderer.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/Renderer.java @@ -1,16 +1,16 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql; +package com.tencent.supersonic.headless.core.parser.calcite.sql; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.MeasureNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessSchema; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -44,7 +44,7 @@ public abstract class Renderer { } public static MetricNode buildMetricNode(String metric, DataSource datasource, SqlValidatorScope scope, - HeadlessSchema schema, boolean nonAgg, String alias) throws Exception { + HeadlessSchema schema, boolean nonAgg, String alias) throws Exception { Optional metricOpt = getMetricByName(metric, schema); MetricNode metricNode = new MetricNode(); if (metricOpt.isPresent()) { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/S2SQLSqlValidatorImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java similarity index 88% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/S2SQLSqlValidatorImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java index f7c68360d..f246a30a8 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/S2SQLSqlValidatorImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/S2SQLSqlValidatorImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql; +package com.tencent.supersonic.headless.core.parser.calcite.sql; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.sql.SqlOperatorTable; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/TableView.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java similarity index 92% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/TableView.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java index 58e343b04..83ee02265 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/TableView.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/TableView.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql; +package com.tencent.supersonic.headless.core.parser.calcite.sql; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/AggFunctionNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java similarity index 90% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/AggFunctionNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java index f9100eac9..c3204d2d6 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/AggFunctionNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/AggFunctionNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DataSourceNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java similarity index 95% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DataSourceNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java index b8672fa4c..4b1c97c58 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DataSourceNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DataSourceNode.java @@ -1,18 +1,18 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; import com.google.common.collect.Lists; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.Configuration; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SchemaBuilder; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.extend.LateralViewExplodeNode; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessSchema; +import com.tencent.supersonic.headless.core.parser.calcite.schema.SchemaBuilder; +import com.tencent.supersonic.headless.core.parser.calcite.sql.node.extend.LateralViewExplodeNode; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DimensionNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java similarity index 91% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DimensionNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java index 0acd5038d..deac34f8f 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/DimensionNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/DimensionNode.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Constants; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Dimension; import java.util.Arrays; import java.util.List; import java.util.Objects; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/ExtendNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java similarity index 94% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/ExtendNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java index 9cce8ac9f..0db7e931a 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/ExtendNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/ExtendNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; import org.apache.calcite.sql.SqlCall; import org.apache.calcite.sql.SqlInternalOperator; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/FilterNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java similarity index 92% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/FilterNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java index ec870f92e..89b4a4c6b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/FilterNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/FilterNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; import java.util.Set; import org.apache.calcite.sql.SqlBasicCall; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/IdentifyNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java similarity index 86% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/IdentifyNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java index f2eaa7c29..e3d37faee 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/IdentifyNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/IdentifyNode.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify.Type; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Identify.Type; import java.util.List; import java.util.Optional; import java.util.Set; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/JoinNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java similarity index 75% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/JoinNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java index 73d0dd9ac..97b47d3a3 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/JoinNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/JoinNode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; import lombok.Data; import org.apache.calcite.sql.SqlNode; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MeasureNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java similarity index 93% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MeasureNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java index 5fcda2f15..58ede5ffb 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MeasureNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MeasureNode.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Measure; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.validate.SqlValidatorScope; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MetricNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java similarity index 86% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MetricNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java index 994e5e58d..1bfa2f38d 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/MetricNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/MetricNode.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.Metric; import java.util.HashMap; import java.util.Map; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/SemanticNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java similarity index 97% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/SemanticNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java index 403b225ec..dba77f42d 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/SemanticNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/SemanticNode.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node; -import com.tencent.supersonic.headless.query.parser.calcite.Configuration; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.schema.SemanticSqlDialect; +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.SemanticSqlDialect; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/extend/LateralViewExplodeNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java similarity index 93% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/extend/LateralViewExplodeNode.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java index 961ed7040..f16e96c57 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/node/extend/LateralViewExplodeNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/node/extend/LateralViewExplodeNode.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.node.extend; +package com.tencent.supersonic.headless.core.parser.calcite.sql.node.extend; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.ExtendNode; +import com.tencent.supersonic.headless.core.parser.calcite.sql.node.ExtendNode; import java.util.Iterator; import org.apache.calcite.linq4j.Ord; import org.apache.calcite.sql.SqlCall; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/optimizer/FilterToGroupScanRule.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java similarity index 96% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/optimizer/FilterToGroupScanRule.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java index 1c633c0e4..da94c0d85 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/optimizer/FilterToGroupScanRule.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/optimizer/FilterToGroupScanRule.java @@ -1,6 +1,7 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.optimizer; +package com.tencent.supersonic.headless.core.parser.calcite.sql.optimizer; + +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; import java.util.ArrayList; import java.util.Iterator; import java.util.List; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/FilterRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java similarity index 73% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/FilterRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java index bd5a3d45d..5d77a0599 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/FilterRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/FilterRender.java @@ -1,16 +1,17 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.parser.calcite.sql.render; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.query.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessSchema; +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 java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -26,7 +27,7 @@ public class FilterRender extends Renderer { @Override public void render(MetricReq metricCommand, List dataSources, SqlValidatorScope scope, - HeadlessSchema schema, boolean nonAgg) throws Exception { + HeadlessSchema schema, boolean nonAgg) throws Exception { TableView tableView = super.tableView; SqlNode filterNode = null; List queryMetrics = new ArrayList<>(metricCommand.getMetrics()); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/JoinRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java similarity index 85% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/JoinRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java index 9ddc56318..96489dcaf 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/JoinRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/JoinRender.java @@ -1,33 +1,22 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.parser.calcite.sql.render; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization.TimePartType; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.AggFunctionNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.IdentifyNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.JoinRelation; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.query.parser.calcite.sql.TableView; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Queue; -import java.util.Set; -import java.util.stream.Collectors; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessSchema; +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 lombok.extern.slf4j.Slf4j; import org.apache.calcite.sql.JoinConditionType; import org.apache.calcite.sql.SqlBasicCall; @@ -40,12 +29,24 @@ import org.apache.calcite.sql.validate.SqlValidatorScope; import org.apache.commons.lang3.tuple.Triple; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Queue; +import java.util.Set; +import java.util.stream.Collectors; + @Slf4j public class JoinRender extends Renderer { @Override public void render(MetricReq metricCommand, List dataSources, SqlValidatorScope scope, - HeadlessSchema schema, boolean nonAgg) throws Exception { + HeadlessSchema schema, boolean nonAgg) throws Exception { String queryWhere = metricCommand.getWhere(); //dataSources = getOrderSource(dataSources); Set whereFields = new HashSet<>(); @@ -261,8 +262,8 @@ public class JoinRender extends Renderer { joinRelationCondition = getCondition(matchJoinRelation, scope); condition = joinRelationCondition; } - if (TimePartType.ZIPPER.equals(leftTable.getDataSource().getTimePartType()) || TimePartType.ZIPPER.equals( - tableView.getDataSource().getTimePartType())) { + if (Materialization.TimePartType.ZIPPER.equals(leftTable.getDataSource().getTimePartType()) + || Materialization.TimePartType.ZIPPER.equals(tableView.getDataSource().getTimePartType())) { SqlNode zipperCondition = getZipperCondition(leftTable, tableView, dataSource, schema, scope); if (Objects.nonNull(joinRelationCondition)) { condition = new SqlBasicCall( @@ -392,7 +393,7 @@ public class JoinRender extends Renderer { } private void addZipperField(DataSource dataSource, List fields) { - if (TimePartType.ZIPPER.equals(dataSource.getTimePartType())) { + if (Materialization.TimePartType.ZIPPER.equals(dataSource.getTimePartType())) { dataSource.getDimensions().stream() .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())).forEach(t -> { if (t.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_END) @@ -411,8 +412,8 @@ public class JoinRender extends Renderer { private SqlNode getZipperCondition(TableView left, TableView right, DataSource dataSource, HeadlessSchema schema, SqlValidatorScope scope) throws Exception { - if (TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) && TimePartType.ZIPPER.equals( - right.getDataSource().getTimePartType())) { + if (Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) + && Materialization.TimePartType.ZIPPER.equals(right.getDataSource().getTimePartType())) { throw new Exception("not support two zipper table"); } SqlNode condition = null; @@ -426,20 +427,26 @@ public class JoinRender extends Renderer { String endTime = ""; String dateTime = ""; - Optional startTimeOp = (TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? left - : right).getDataSource().getDimensions().stream() - .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())) - .filter(d -> d.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_START)).findFirst(); - Optional endTimeOp = (TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? left - : right).getDataSource().getDimensions().stream() - .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())) - .filter(d -> d.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_END)).findFirst(); + Optional startTimeOp = + (Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? left : right) + .getDataSource().getDimensions().stream() + .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())) + .filter(d -> d.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_START)).findFirst(); + Optional endTimeOp = + (Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? left : right) + .getDataSource().getDimensions().stream() + .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())) + .filter(d -> d.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_END)).findFirst(); if (startTimeOp.isPresent() && endTimeOp.isPresent()) { - TableView zipper = TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? left : right; + TableView zipper = + Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) + ? left : right; TableView partMetric = - TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? right : left; + Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) + ? right : left; Optional partTime = - TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) ? rightTime : leftTime; + Materialization.TimePartType.ZIPPER.equals(left.getDataSource().getTimePartType()) + ? rightTime : leftTime; startTime = zipper.getAlias() + "." + startTimeOp.get().getName(); endTime = zipper.getAlias() + "." + endTimeOp.get().getName(); dateTime = partMetric.getAlias() + "." + partTime.get().getName(); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/OutputRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java similarity index 74% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/OutputRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java index c835599db..b9e51dc9d 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/OutputRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/OutputRender.java @@ -1,13 +1,14 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.parser.calcite.sql.render; -import com.tencent.supersonic.headless.common.query.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.MetricReq; import com.tencent.supersonic.common.pojo.ColumnOrder; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.query.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; +import com.tencent.supersonic.headless.core.parser.calcite.s2sql.DataSource; +import com.tencent.supersonic.headless.core.parser.calcite.schema.HeadlessSchema; +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.SemanticNode; + import java.util.ArrayList; import java.util.List; import org.apache.calcite.sql.SqlNode; @@ -21,7 +22,7 @@ public class OutputRender extends Renderer { @Override public void render(MetricReq metricCommand, List dataSources, SqlValidatorScope scope, - HeadlessSchema schema, boolean nonAgg) throws Exception { + HeadlessSchema schema, boolean nonAgg) throws Exception { TableView selectDataSet = super.tableView; for (String dimension : metricCommand.getDimensions()) { selectDataSet.getMeasure().add(SemanticNode.parse(dimension, scope)); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/SourceRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java similarity index 89% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/SourceRender.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java index e78b7dee6..d2dfb24d2 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/calcite/sql/render/SourceRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/calcite/sql/render/SourceRender.java @@ -1,23 +1,28 @@ -package com.tencent.supersonic.headless.query.parser.calcite.sql.render; +package com.tencent.supersonic.headless.core.parser.calcite.sql.render; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Constants; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.DataSource; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Dimension; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Identify; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Materialization.TimePartType; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Measure; -import com.tencent.supersonic.headless.query.parser.calcite.s2sql.Metric; -import com.tencent.supersonic.headless.query.parser.calcite.schema.HeadlessSchema; -import com.tencent.supersonic.headless.query.parser.calcite.sql.Renderer; -import com.tencent.supersonic.headless.query.parser.calcite.sql.TableView; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.DataSourceNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.DimensionNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.FilterNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.IdentifyNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.MetricNode; -import com.tencent.supersonic.headless.query.parser.calcite.sql.node.SemanticNode; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +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.HeadlessSchema; +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 lombok.extern.slf4j.Slf4j; +import org.apache.calcite.sql.SqlNode; +import org.apache.calcite.sql.validate.SqlValidatorScope; +import org.springframework.util.CollectionUtils; + import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -26,17 +31,14 @@ 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; -import org.springframework.util.CollectionUtils; @Slf4j public class SourceRender extends Renderer { public static TableView renderOne(String alias, List fieldWheres, - List reqMetrics, List reqDimensions, String queryWhere, DataSource datasource, - SqlValidatorScope scope, HeadlessSchema schema, boolean nonAgg) throws Exception { + List reqMetrics, List reqDimensions, + String queryWhere, DataSource datasource, SqlValidatorScope scope, + HeadlessSchema schema, boolean nonAgg) throws Exception { TableView dataSet = new TableView(); TableView output = new TableView(); @@ -289,7 +291,7 @@ public class SourceRender extends Renderer { } private static void addTimeDimension(DataSource dataSource, List queryDimension) { - if (TimePartType.ZIPPER.equals(dataSource.getTimePartType())) { + if (Materialization.TimePartType.ZIPPER.equals(dataSource.getTimePartType())) { Optional startTimeOp = dataSource.getDimensions().stream() .filter(d -> Constants.DIMENSION_TYPE_TIME.equalsIgnoreCase(d.getType())) .filter(d -> d.getName().startsWith(Constants.MATERIALIZATION_ZIPPER_START)).findFirst(); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/CalculateAggConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/CalculateAggConverter.java similarity index 96% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/CalculateAggConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/CalculateAggConverter.java index 53bb22a32..9bbbf14c4 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/CalculateAggConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/CalculateAggConverter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; import com.tencent.supersonic.common.pojo.Aggregator; @@ -6,29 +6,30 @@ import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.DateModeUtils; -import com.tencent.supersonic.headless.common.model.response.DatabaseResp; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.pojo.MetricTable; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.model.domain.pojo.EngineTypeEnum; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.service.HeadlessQueryEngine; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; -import com.tencent.supersonic.headless.query.utils.SqlGenerateUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.pojo.MetricTable; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.DatabaseResp; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.core.utils.SqlGenerateUtils; +import com.tencent.supersonic.headless.server.pojo.EngineTypeEnum; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + @Component("CalculateAggConverter") @Slf4j diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/DefaultDimValueConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/DefaultDimValueConverter.java similarity index 77% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/DefaultDimValueConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/DefaultDimValueConverter.java index 85c759a6b..489e4e1b6 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/DefaultDimValueConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/DefaultDimValueConverter.java @@ -1,19 +1,21 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + @Slf4j @Component("DefaultDimValueConverter") public class DefaultDimValueConverter implements HeadlessConverter { @@ -27,9 +29,10 @@ public class DefaultDimValueConverter implements HeadlessConverter { } @Override - public void converter(Catalog catalog, QueryStatement queryStatement) throws Exception { + public void converter(Catalog catalog, QueryStatement queryStatement) { QueryStructReq queryStructCmd = queryStatement.getQueryStructReq(); - List dimensionResps = catalog.getDimensions(queryStructCmd.getModelIds()); + MetaFilter metaFilter = new MetaFilter(queryStructCmd.getModelIds()); + List dimensionResps = catalog.getDimensions(metaFilter); //dimension which has default values dimensionResps = dimensionResps.stream() .filter(dimensionResp -> !CollectionUtils.isEmpty(dimensionResp.getDefaultValues())) diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/MetricCheckConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/MetricCheckConverter.java similarity index 81% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/MetricCheckConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/MetricCheckConverter.java index d3094c607..daf242e47 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/MetricCheckConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/MetricCheckConverter.java @@ -1,21 +1,23 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.Catalog; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; @Component("MetricCheckConverter") @@ -35,10 +37,11 @@ public class MetricCheckConverter implements HeadlessConverter { } @Override - public void converter(Catalog catalog, QueryStatement queryStatement) throws Exception { + public void converter(Catalog catalog, QueryStatement queryStatement) { QueryStructReq queryStructReq = queryStatement.getQueryStructReq(); - List metricResps = catalog.getMetrics(queryStructReq.getModelIds()); - List dimensionResps = catalog.getDimensions(queryStructReq.getModelIds()); + MetaFilter metaFilter = new MetaFilter(queryStructReq.getModelIds()); + List metricResps = catalog.getMetrics(metaFilter); + List dimensionResps = catalog.getDimensions(metaFilter); Map dimensionMap = dimensionResps.stream() .collect(Collectors.toMap(DimensionResp::getId, d -> d)); List metricBizNames = queryStructReq.getMetrics(); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ParserDefaultConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ParserDefaultConverter.java similarity index 84% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ParserDefaultConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ParserDefaultConverter.java index 3cd953d4a..d7354d6a5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ParserDefaultConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ParserDefaultConverter.java @@ -1,20 +1,21 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; import com.tencent.supersonic.common.pojo.ColumnOrder; -import com.tencent.supersonic.headless.common.query.pojo.Param; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; -import java.util.Objects; -import java.util.stream.Collectors; +import com.tencent.supersonic.headless.common.core.pojo.Param; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Objects; +import java.util.stream.Collectors; + @Component("ParserDefaultConverter") @Slf4j public class ParserDefaultConverter implements HeadlessConverter { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/QueryReqConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/QueryReqConverter.java similarity index 88% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/QueryReqConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/QueryReqConverter.java index d5fc82d33..4cb21cae5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/QueryReqConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/QueryReqConverter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; import com.tencent.supersonic.common.pojo.Aggregator; @@ -9,23 +9,31 @@ import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.jsqlparser.SqlParserReplaceHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectFunctionHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.request.SqlExecuteReq; -import com.tencent.supersonic.headless.common.model.response.DatabaseResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.query.enums.AggOption; -import com.tencent.supersonic.headless.common.query.pojo.MetricTable; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.model.domain.adaptor.engineadapter.EngineAdaptor; -import com.tencent.supersonic.headless.model.domain.adaptor.engineadapter.EngineAdaptorFactory; -import com.tencent.supersonic.headless.model.domain.pojo.EngineTypeEnum; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.service.HeadlessQueryEngine; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; +import com.tencent.supersonic.headless.common.core.enums.AggOption; +import com.tencent.supersonic.headless.common.core.pojo.MetricTable; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.request.SqlExecuteReq; +import com.tencent.supersonic.headless.common.server.response.DatabaseResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.server.engineadapter.EngineAdaptor; +import com.tencent.supersonic.headless.server.engineadapter.EngineAdaptorFactory; +import com.tencent.supersonic.headless.server.pojo.EngineTypeEnum; +import com.tencent.supersonic.headless.server.service.Catalog; +import com.tencent.supersonic.headless.server.service.ModelService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -34,13 +42,6 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; @Component @Slf4j diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ZipperModelConverter.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ZipperModelConverter.java similarity index 76% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ZipperModelConverter.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ZipperModelConverter.java index 3752f7e7b..9a377b6ee 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/parser/convert/ZipperModelConverter.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/parser/convert/ZipperModelConverter.java @@ -1,20 +1,21 @@ -package com.tencent.supersonic.headless.query.parser.convert; +package com.tencent.supersonic.headless.core.parser.convert; -import com.tencent.supersonic.headless.common.model.enums.ModelSourceTypeEnum; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.utils.QueryStructUtils; -import java.util.List; -import java.util.Objects; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.enums.ModelSourceType; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.utils.QueryStructUtils; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Objects; + /** * correct the Query parameters when the model source type is zipper */ @@ -40,7 +41,7 @@ public class ZipperModelConverter implements HeadlessConverter { List modelRespList = catalog.getModelList(queryStructCmd.getModelIds()); if (!CollectionUtils.isEmpty(modelRespList)) { // all data sources are zipper tables - long zipperCnt = modelRespList.stream().filter(m -> ModelSourceTypeEnum.isZipper(m.getSourceType())) + long zipperCnt = modelRespList.stream().filter(m -> ModelSourceType.isZipper(m.getSourceType())) .count(); return modelRespList.size() == zipperCnt; } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/mapper/StatMapper.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/mapper/StatMapper.java similarity index 52% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/mapper/StatMapper.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/mapper/StatMapper.java index 74bf6fdb0..1896009d1 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/mapper/StatMapper.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/mapper/StatMapper.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.query.persistence.mapper; +package com.tencent.supersonic.headless.core.persistence.mapper; -import com.tencent.supersonic.headless.common.model.pojo.QueryStat; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; +import com.tencent.supersonic.headless.common.server.pojo.QueryStat; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; import java.util.List; import org.apache.ibatis.annotations.Mapper; diff --git a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/DataDownload.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/DataDownload.java similarity index 73% rename from headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/DataDownload.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/DataDownload.java index e9e7e4825..60e6517a3 100644 --- a/headless/common/src/main/java/com/tencent/supersonic/headless/common/query/pojo/DataDownload.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/DataDownload.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.common.query.pojo; +package com.tencent.supersonic.headless.core.persistence.pojo; import lombok.Builder; import lombok.Data; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/ParserSvrResponse.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/ParserSvrResponse.java similarity index 88% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/ParserSvrResponse.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/ParserSvrResponse.java index 337ce14ae..32eb8ce4f 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/ParserSvrResponse.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/ParserSvrResponse.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.persistence.pojo; +package com.tencent.supersonic.headless.core.persistence.pojo; public class ParserSvrResponse { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/QueryStatement.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/QueryStatement.java similarity index 75% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/QueryStatement.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/QueryStatement.java index e7a5a6707..32b9cf746 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/pojo/QueryStatement.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/pojo/QueryStatement.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.query.persistence.pojo; +package com.tencent.supersonic.headless.core.persistence.pojo; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import lombok.Data; import org.apache.commons.lang3.tuple.ImmutablePair; diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepository.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepository.java new file mode 100644 index 000000000..6be083b95 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepository.java @@ -0,0 +1,15 @@ +package com.tencent.supersonic.headless.core.persistence.repository; + +import com.tencent.supersonic.headless.common.server.pojo.QueryStat; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import java.util.List; + +public interface StatRepository { + + Boolean createRecord(QueryStat queryStatInfo); + + List getStatInfo(ItemUseReq itemUseCommend); + + List getQueryStatInfoWithoutCache(ItemUseReq itemUseCommend); +} \ No newline at end of file diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/repository/StatRepositoryImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepositoryImpl.java similarity index 90% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/repository/StatRepositoryImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepositoryImpl.java index ba89d7b76..d9854a0ae 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/persistence/repository/StatRepositoryImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/persistence/repository/StatRepositoryImpl.java @@ -1,13 +1,17 @@ -package com.tencent.supersonic.headless.query.persistence.repository; +package com.tencent.supersonic.headless.core.persistence.repository; -import static com.tencent.supersonic.common.pojo.Constants.AT_SYMBOL; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.tencent.supersonic.headless.common.model.pojo.QueryStat; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; -import com.tencent.supersonic.headless.common.query.response.ItemUseResp; import com.tencent.supersonic.common.pojo.enums.TypeEnums; -import com.tencent.supersonic.headless.query.persistence.mapper.StatMapper; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.common.server.pojo.QueryStat; +import com.tencent.supersonic.headless.core.persistence.mapper.StatMapper; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.util.Strings; +import org.springframework.stereotype.Repository; + import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -15,10 +19,8 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.apache.logging.log4j.util.Strings; -import org.springframework.stereotype.Repository; + +import static com.tencent.supersonic.common.pojo.Constants.AT_SYMBOL; @Slf4j @Repository diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/QueryController.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/QueryController.java similarity index 71% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/QueryController.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/QueryController.java index e32a7ec84..422fc50c5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/QueryController.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/QueryController.java @@ -1,26 +1,28 @@ -package com.tencent.supersonic.headless.query.rest; +package com.tencent.supersonic.headless.core.rest; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeEnum; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.model.response.SqlParserResp; -import com.tencent.supersonic.headless.common.query.request.BatchDownloadReq; -import com.tencent.supersonic.headless.common.query.request.DownloadStructReq; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryDimValueReq; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ItemUseResp; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.service.DownloadService; -import com.tencent.supersonic.headless.query.service.QueryService; -import com.tencent.supersonic.headless.query.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.common.core.request.BatchDownloadReq; +import com.tencent.supersonic.headless.common.core.request.DownloadStructReq; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryItemReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.response.ItemQueryResultResp; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.common.server.enums.QueryType; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.response.SqlParserResp; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.service.DownloadService; +import com.tencent.supersonic.headless.core.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.core.service.QueryService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -52,7 +54,7 @@ public class QueryController { HttpServletResponse response) throws Exception { User user = UserHolder.findUser(request, response); Object queryBySql = queryService.queryBySql(queryS2SQLReq, user); - log.info("queryBySql:{},queryBySql"); + log.info("queryBySql:{}", queryBySql); return queryBySql; } @@ -64,6 +66,12 @@ public class QueryController { return queryService.queryByStructWithAuth(queryStructReq, user); } + @PostMapping("/metricDataQueryById") + public ItemQueryResultResp metricDataQueryById(@RequestBody QueryItemReq queryApiReq, + HttpServletRequest request) throws Exception { + return queryService.metricDataQueryById(queryApiReq, request); + } + @PostMapping("/download/struct") public void downloadByStruct(@RequestBody DownloadStructReq downloadStructReq, HttpServletRequest request, @@ -86,9 +94,7 @@ public class QueryController { } @PostMapping("/struct/parse") - public SqlParserResp parseByStruct(@RequestBody ParseSqlReq parseSqlReq, - HttpServletRequest request, - HttpServletResponse response) throws Exception { + public SqlParserResp parseByStruct(@RequestBody ParseSqlReq parseSqlReq) throws Exception { QueryStructReq queryStructCmd = new QueryStructReq(); QueryStatement queryStatement = headlessQueryEngine.physicalSql(queryStructCmd, parseSqlReq); SqlParserResp sqlParserResp = new SqlParserResp(); @@ -133,16 +139,16 @@ public class QueryController { User user = UserHolder.findUser(request, response); String queryReqJson = JsonUtil.toString(explainSqlReq.getQueryReq()); - QueryTypeEnum queryTypeEnum = explainSqlReq.getQueryTypeEnum(); + QueryType queryTypeEnum = explainSqlReq.getQueryTypeEnum(); - if (QueryTypeEnum.SQL.equals(queryTypeEnum)) { + if (QueryType.SQL.equals(queryTypeEnum)) { QueryS2SQLReq queryS2SQLReq = JsonUtil.toObject(queryReqJson, QueryS2SQLReq.class); ExplainSqlReq explainSqlReqNew = ExplainSqlReq.builder() .queryReq(queryS2SQLReq) .queryTypeEnum(queryTypeEnum).build(); return queryService.explain(explainSqlReqNew, user); } - if (QueryTypeEnum.STRUCT.equals(queryTypeEnum)) { + if (QueryType.STRUCT.equals(queryTypeEnum)) { QueryStructReq queryStructReq = JsonUtil.toObject(queryReqJson, QueryStructReq.class); ExplainSqlReq explainSqlReqNew = ExplainSqlReq.builder() .queryReq(queryStructReq) diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/SchemaController.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/SchemaController.java similarity index 78% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/SchemaController.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/SchemaController.java index 1b5cf9872..441c9601b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/rest/SchemaController.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/rest/SchemaController.java @@ -1,21 +1,18 @@ -package com.tencent.supersonic.headless.query.rest; +package com.tencent.supersonic.headless.core.rest; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.common.pojo.enums.AuthType; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.query.service.SchemaService; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.core.service.SchemaService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -24,6 +21,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + @RestController @RequestMapping("/api/semantic/schema") public class SchemaController { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadService.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/DownloadService.java similarity index 66% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadService.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/service/DownloadService.java index a17baf21e..5b0e4a46a 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadService.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/DownloadService.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.headless.common.query.request.BatchDownloadReq; -import com.tencent.supersonic.headless.common.query.request.DownloadStructReq; +import com.tencent.supersonic.headless.common.core.request.BatchDownloadReq; +import com.tencent.supersonic.headless.common.core.request.DownloadStructReq; import javax.servlet.http.HttpServletResponse; public interface DownloadService { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/HeadlessQueryEngine.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/HeadlessQueryEngine.java new file mode 100644 index 000000000..75ec78d64 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/HeadlessQueryEngine.java @@ -0,0 +1,21 @@ +package com.tencent.supersonic.headless.core.service; + +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.executor.QueryExecutor; + +public interface HeadlessQueryEngine { + + QueryStatement plan(QueryStatement queryStatement) throws Exception; + + QueryExecutor route(QueryStatement queryStatement); + + QueryResultWithSchemaResp execute(QueryStatement queryStatement); + + QueryStatement physicalSql(QueryStructReq queryStructCmd, ParseSqlReq sqlCommend) throws Exception; + + QueryStatement physicalSql(QueryStructReq queryStructCmd, MetricReq sqlCommend) throws Exception; +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/QueryService.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/QueryService.java new file mode 100644 index 000000000..fc7836c61 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/QueryService.java @@ -0,0 +1,47 @@ +package com.tencent.supersonic.headless.core.service; + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.headless.common.core.request.QueryItemReq; +import com.tencent.supersonic.headless.common.core.response.ItemQueryResultResp; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.core.annotation.ApiHeaderCheck; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public interface QueryService { + + Object queryBySql(QueryS2SQLReq querySqlCmd, User user) throws Exception; + + QueryResultWithSchemaResp queryByStruct(QueryStructReq queryStructCmd, User user) throws Exception; + + QueryResultWithSchemaResp queryByStructWithAuth(QueryStructReq queryStructCmd, User user) + throws Exception; + + QueryResultWithSchemaResp queryByMultiStruct(QueryMultiStructReq queryMultiStructCmd, User user) throws Exception; + + QueryResultWithSchemaResp queryDimValue(QueryDimValueReq queryDimValueReq, User user); + + Object queryByQueryStatement(QueryStatement queryStatement); + + List getStatInfo(ItemUseReq itemUseCommend); + + ExplainResp explain(ExplainSqlReq explainSqlReq, User user) throws Exception; + + @ApiHeaderCheck + ItemQueryResultResp metricDataQueryById(QueryItemReq queryApiReq, + HttpServletRequest request) throws Exception; + + QueryStatement parseMetricReq(MetricReq metricReq) throws Exception; + +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/SchemaService.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/SchemaService.java new file mode 100644 index 000000000..ad3a922a0 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/SchemaService.java @@ -0,0 +1,28 @@ +package com.tencent.supersonic.headless.core.service; + +import com.github.pagehelper.PageInfo; +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.common.pojo.enums.AuthType; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; + +import java.util.List; + +public interface SchemaService { + + List fetchModelSchema(ModelSchemaFilterReq filter, User user); + + PageInfo queryDimension(PageDimensionReq pageDimensionReq, User user); + + PageInfo queryMetric(PageMetricReq pageMetricReq, User user); + + List getDomainList(User user); + + List getModelList(User user, AuthType authType, Long domainId); +} diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadServiceImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/DownloadServiceImpl.java similarity index 91% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadServiceImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/DownloadServiceImpl.java index 447689ac8..d66060c90 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/DownloadServiceImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/DownloadServiceImpl.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; @@ -12,19 +12,21 @@ import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.DateUtils; -import com.tencent.supersonic.headless.common.model.enums.SemanticTypeEnum; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.pojo.DataDownload; -import com.tencent.supersonic.headless.common.query.request.BatchDownloadReq; -import com.tencent.supersonic.headless.common.query.request.DownloadStructReq; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.query.utils.DataTransformUtils; +import com.tencent.supersonic.headless.core.persistence.pojo.DataDownload; +import com.tencent.supersonic.headless.common.core.request.BatchDownloadReq; +import com.tencent.supersonic.headless.common.core.request.DownloadStructReq; +import com.tencent.supersonic.headless.common.server.enums.SemanticType; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.service.QueryService; +import com.tencent.supersonic.headless.core.utils.DataTransformUtils; +import com.tencent.supersonic.headless.core.service.DownloadService; +import com.tencent.supersonic.headless.server.service.ModelService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; @@ -149,7 +151,7 @@ public class DownloadServiceImpl implements DownloadService { private List> buildHeader(List queryColumns, List dateList) { List> headers = Lists.newArrayList(); for (QueryColumn queryColumn : queryColumns) { - if (SemanticTypeEnum.DATE.name().equals(queryColumn.getShowType())) { + if (SemanticType.DATE.name().equals(queryColumn.getShowType())) { continue; } headers.add(Lists.newArrayList(queryColumn.getName())); diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/HeadlessQueryEngineImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/HeadlessQueryEngineImpl.java similarity index 77% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/HeadlessQueryEngineImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/HeadlessQueryEngineImpl.java index 4ead0ef82..e88d31e93 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/HeadlessQueryEngineImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/HeadlessQueryEngineImpl.java @@ -1,16 +1,17 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.service.impl; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.executor.QueryExecutor; -import com.tencent.supersonic.headless.query.optimizer.QueryOptimizer; -import com.tencent.supersonic.headless.query.parser.QueryParser; -import com.tencent.supersonic.headless.query.utils.ComponentFactory; -import com.tencent.supersonic.headless.query.utils.QueryUtils; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.core.executor.QueryExecutor; +import com.tencent.supersonic.headless.core.optimizer.QueryOptimizer; +import com.tencent.supersonic.headless.core.parser.QueryParser; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.core.utils.ComponentFactory; +import com.tencent.supersonic.headless.core.utils.QueryUtils; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/QueryServiceImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/QueryServiceImpl.java similarity index 62% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/QueryServiceImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/QueryServiceImpl.java index 54a761760..0c412056b 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/QueryServiceImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/QueryServiceImpl.java @@ -1,48 +1,69 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.service.impl; import com.google.common.cache.CacheBuilder; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.common.pojo.Aggregator; +import com.tencent.supersonic.common.pojo.Constants; +import com.tencent.supersonic.common.pojo.DateConf; +import com.tencent.supersonic.common.pojo.enums.ApiItemType; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; +import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.cache.CacheUtils; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeEnum; -import com.tencent.supersonic.headless.common.model.pojo.Dim; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.ExplainResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.pojo.Cache; -import com.tencent.supersonic.headless.common.query.request.ExplainSqlReq; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; -import com.tencent.supersonic.headless.common.query.request.MetricReq; -import com.tencent.supersonic.headless.common.query.request.QueryDimValueReq; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ItemUseResp; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; -import com.tencent.supersonic.headless.query.executor.QueryExecutor; -import com.tencent.supersonic.headless.query.parser.convert.QueryReqConverter; -import com.tencent.supersonic.headless.query.annotation.StructDataPermission; -import com.tencent.supersonic.headless.query.utils.QueryUtils; -import com.tencent.supersonic.headless.query.annotation.S2SQLDataPermission; -import com.tencent.supersonic.headless.query.utils.StatUtils; +import com.tencent.supersonic.headless.common.core.pojo.SingleItemQueryResult; +import com.tencent.supersonic.headless.common.core.pojo.Cache; +import com.tencent.supersonic.headless.common.core.request.ExplainSqlReq; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.request.MetricReq; +import com.tencent.supersonic.headless.common.core.request.QueryItemReq; +import com.tencent.supersonic.headless.common.core.request.QueryDimValueReq; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.response.ItemQueryResultResp; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.common.server.enums.QueryType; +import com.tencent.supersonic.headless.common.server.pojo.Dim; +import com.tencent.supersonic.headless.common.server.pojo.Item; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.response.AppDetailResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.ExplainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.annotation.ApiHeaderCheck; +import com.tencent.supersonic.headless.core.annotation.S2SQLDataPermission; +import com.tencent.supersonic.headless.core.annotation.StructDataPermission; +import com.tencent.supersonic.headless.core.aspect.ApiHeaderCheckAspect; +import com.tencent.supersonic.headless.core.executor.QueryExecutor; +import com.tencent.supersonic.headless.core.parser.convert.QueryReqConverter; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.core.service.HeadlessQueryEngine; +import com.tencent.supersonic.headless.core.service.QueryService; +import com.tencent.supersonic.headless.core.service.SchemaService; +import com.tencent.supersonic.headless.core.utils.QueryUtils; +import com.tencent.supersonic.headless.core.utils.StatUtils; +import com.tencent.supersonic.headless.server.pojo.DimensionFilter; +import com.tencent.supersonic.headless.server.service.AppService; +import com.tencent.supersonic.headless.server.service.Catalog; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -59,6 +80,7 @@ public class QueryServiceImpl implements QueryService { private final QueryUtils queryUtils; private final QueryReqConverter queryReqConverter; private final Catalog catalog; + private final AppService appService; @Value("${query.cache.enable:true}") private Boolean cacheEnable; @@ -71,13 +93,15 @@ public class QueryServiceImpl implements QueryService { QueryUtils queryUtils, QueryReqConverter queryReqConverter, HeadlessQueryEngine headlessQueryEngine, - Catalog catalog) { + Catalog catalog, + AppService appService) { this.statUtils = statUtils; this.cacheUtils = cacheUtils; this.queryUtils = queryUtils; this.queryReqConverter = queryReqConverter; this.headlessQueryEngine = headlessQueryEngine; this.catalog = catalog; + this.appService = appService; } @Override @@ -233,21 +257,21 @@ public class QueryServiceImpl implements QueryService { @Override public ExplainResp explain(ExplainSqlReq explainSqlReq, User user) throws Exception { - QueryTypeEnum queryTypeEnum = explainSqlReq.getQueryTypeEnum(); + QueryType queryTypeEnum = explainSqlReq.getQueryTypeEnum(); T queryReq = explainSqlReq.getQueryReq(); - if (QueryTypeEnum.SQL.equals(queryTypeEnum) && queryReq instanceof QueryS2SQLReq) { + if (QueryType.SQL.equals(queryTypeEnum) && queryReq instanceof QueryS2SQLReq) { QueryStatement queryStatement = convertToQueryStatement((QueryS2SQLReq) queryReq, user); return getExplainResp(queryStatement); } - if (QueryTypeEnum.STRUCT.equals(queryTypeEnum) && queryReq instanceof QueryStructReq) { + if (QueryType.STRUCT.equals(queryTypeEnum) && queryReq instanceof QueryStructReq) { QueryStatement queryStatement = new QueryStatement(); queryStatement.setQueryStructReq((QueryStructReq) queryReq); queryStatement.setIsS2SQL(false); queryStatement = headlessQueryEngine.plan(queryStatement); return getExplainResp(queryStatement); } - if (QueryTypeEnum.STRUCT.equals(queryTypeEnum) && queryReq instanceof QueryMultiStructReq) { + if (QueryType.STRUCT.equals(queryTypeEnum) && queryReq instanceof QueryMultiStructReq) { QueryMultiStructReq queryMultiStructReq = (QueryMultiStructReq) queryReq; QueryStatement queryStatement = getQueryStatementByMultiStruct(queryMultiStructReq); return getExplainResp(queryStatement); @@ -256,6 +280,83 @@ public class QueryServiceImpl implements QueryService { throw new IllegalArgumentException("Parameters are invalid, explainSqlReq: " + explainSqlReq); } + @Override + @ApiHeaderCheck + public ItemQueryResultResp metricDataQueryById(QueryItemReq queryItemReq, + HttpServletRequest request) throws Exception { + AppDetailResp appDetailResp = getAppDetailResp(request); + authCheck(appDetailResp, queryItemReq.getIds(), ApiItemType.METRIC); + List results = Lists.newArrayList(); + Map map = appDetailResp.getConfig().getItems().stream() + .collect(Collectors.toMap(Item::getId, i -> i)); + for (Long id : queryItemReq.getIds()) { + Item item = map.get(id); + SingleItemQueryResult apiQuerySingleResult = dataQuery(appDetailResp.getId(), + item, queryItemReq.getDateConf(), queryItemReq.getLimit()); + results.add(apiQuerySingleResult); + } + return ItemQueryResultResp.builder().results(results).build(); + } + + private SingleItemQueryResult dataQuery(Integer appId, Item item, DateConf dateConf, Long limit) throws Exception { + MetricResp metricResp = catalog.getMetric(item.getId()); + List items = item.getRelateItems(); + List dimensionResps = Lists.newArrayList(); + if (!org.springframework.util.CollectionUtils.isEmpty(items)) { + List ids = items.stream().map(Item::getId).collect(Collectors.toList()); + DimensionFilter dimensionFilter = new DimensionFilter(); + dimensionFilter.setIds(ids); + dimensionResps = catalog.getDimensions(dimensionFilter); + } + QueryStructReq queryStructReq = buildQueryStructReq(dimensionResps, metricResp, dateConf, limit); + QueryResultWithSchemaResp queryResultWithSchemaResp = + queryByStruct(queryStructReq, User.getAppUser(appId)); + SingleItemQueryResult apiQuerySingleResult = new SingleItemQueryResult(); + apiQuerySingleResult.setItem(item); + apiQuerySingleResult.setResult(queryResultWithSchemaResp); + return apiQuerySingleResult; + } + + private AppDetailResp getAppDetailResp(HttpServletRequest request) { + int appId = Integer.parseInt(request.getHeader(ApiHeaderCheckAspect.APPID)); + return appService.getApp(appId); + } + + private QueryStructReq buildQueryStructReq(List dimensionResps, + MetricResp metricResp, DateConf dateConf, Long limit) { + Set modelIds = dimensionResps.stream().map(DimensionResp::getModelId).collect(Collectors.toSet()); + modelIds.add(metricResp.getModelId()); + QueryStructReq queryStructReq = new QueryStructReq(); + queryStructReq.setGroups(dimensionResps.stream() + .map(DimensionResp::getBizName).collect(Collectors.toList())); + queryStructReq.getGroups().add(0, getTimeDimension(dateConf)); + Aggregator aggregator = new Aggregator(); + aggregator.setColumn(metricResp.getBizName()); + queryStructReq.setAggregators(Lists.newArrayList(aggregator)); + queryStructReq.setDateInfo(dateConf); + queryStructReq.setModelIds(modelIds); + queryStructReq.setLimit(limit); + return queryStructReq; + } + + private String getTimeDimension(DateConf dateConf) { + if (Constants.MONTH.equals(dateConf.getPeriod())) { + return TimeDimensionEnum.MONTH.getName(); + } else if (Constants.WEEK.equals(dateConf.getPeriod())) { + return TimeDimensionEnum.WEEK.getName(); + } else { + return TimeDimensionEnum.DAY.getName(); + } + } + + private void authCheck(AppDetailResp appDetailResp, List ids, ApiItemType type) { + Set idsInApp = appDetailResp.getConfig().getAllItems().stream() + .filter(item -> type.equals(item.getType())).map(Item::getId).collect(Collectors.toSet()); + if (!idsInApp.containsAll(ids)) { + throw new InvalidArgumentException("查询范围超过应用申请范围, 请检查"); + } + } + private ExplainResp getExplainResp(QueryStatement queryStatement) { String sql = ""; if (Objects.nonNull(queryStatement)) { diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/SchemaServiceImpl.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/SchemaServiceImpl.java similarity index 77% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/service/SchemaServiceImpl.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/SchemaServiceImpl.java index b28f9c163..f45e50ab5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/service/SchemaServiceImpl.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/service/impl/SchemaServiceImpl.java @@ -1,25 +1,27 @@ -package com.tencent.supersonic.headless.query.service; +package com.tencent.supersonic.headless.core.service.impl; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.TypeEnums; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.request.PageDimensionReq; -import com.tencent.supersonic.headless.common.model.request.PageMetricReq; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.DomainResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; -import com.tencent.supersonic.headless.common.model.response.ModelResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; -import com.tencent.supersonic.headless.common.query.response.ItemUseResp; -import com.tencent.supersonic.headless.model.domain.DimensionService; -import com.tencent.supersonic.headless.model.domain.DomainService; -import com.tencent.supersonic.headless.model.domain.MetricService; -import com.tencent.supersonic.headless.model.domain.ModelService; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.request.PageDimensionReq; +import com.tencent.supersonic.headless.common.server.request.PageMetricReq; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.DomainResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.core.service.QueryService; +import com.tencent.supersonic.headless.core.service.SchemaService; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.DomainService; +import com.tencent.supersonic.headless.server.service.MetricService; +import com.tencent.supersonic.headless.server.service.ModelService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/ComponentFactory.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java similarity index 73% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/ComponentFactory.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java index 02a243365..1f6f55fa1 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/ComponentFactory.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/ComponentFactory.java @@ -1,18 +1,18 @@ -package com.tencent.supersonic.headless.query.utils; +package com.tencent.supersonic.headless.core.utils; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.query.parser.calcite.CalciteSqlParser; -import com.tencent.supersonic.headless.query.parser.convert.DefaultDimValueConverter; -import com.tencent.supersonic.headless.query.parser.convert.ZipperModelConverter; -import com.tencent.supersonic.headless.query.executor.JdbcExecutor; -import com.tencent.supersonic.headless.query.executor.QueryExecutor; -import com.tencent.supersonic.headless.query.optimizer.DetailQuery; -import com.tencent.supersonic.headless.query.optimizer.QueryOptimizer; -import com.tencent.supersonic.headless.query.parser.HeadlessConverter; -import com.tencent.supersonic.headless.query.parser.SqlParser; -import com.tencent.supersonic.headless.query.parser.convert.CalculateAggConverter; -import com.tencent.supersonic.headless.query.parser.convert.MetricCheckConverter; -import com.tencent.supersonic.headless.query.parser.convert.ParserDefaultConverter; +import com.tencent.supersonic.headless.core.parser.HeadlessConverter; +import com.tencent.supersonic.headless.core.parser.SqlParser; +import com.tencent.supersonic.headless.core.parser.calcite.CalciteSqlParser; +import com.tencent.supersonic.headless.core.parser.convert.DefaultDimValueConverter; +import com.tencent.supersonic.headless.core.parser.convert.ZipperModelConverter; +import com.tencent.supersonic.headless.core.executor.JdbcExecutor; +import com.tencent.supersonic.headless.core.executor.QueryExecutor; +import com.tencent.supersonic.headless.core.optimizer.DetailQuery; +import com.tencent.supersonic.headless.core.optimizer.QueryOptimizer; +import com.tencent.supersonic.headless.core.parser.convert.CalculateAggConverter; +import com.tencent.supersonic.headless.core.parser.convert.MetricCheckConverter; +import com.tencent.supersonic.headless.core.parser.convert.ParserDefaultConverter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DataTransformUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/DataTransformUtils.java similarity index 98% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DataTransformUtils.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/DataTransformUtils.java index 57a44c10b..f3980ff68 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/DataTransformUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/DataTransformUtils.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.utils; +package com.tencent.supersonic.headless.core.utils; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.Constants; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryStructUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryStructUtils.java similarity index 93% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryStructUtils.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryStructUtils.java index f9091cd42..94f35cd59 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryStructUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryStructUtils.java @@ -1,10 +1,4 @@ -package com.tencent.supersonic.headless.query.utils; - -import static com.tencent.supersonic.common.pojo.Constants.DAY; -import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT; -import static com.tencent.supersonic.common.pojo.Constants.MONTH; -import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE; -import static com.tencent.supersonic.common.pojo.Constants.WEEK; +package com.tencent.supersonic.headless.core.utils; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; @@ -20,20 +14,30 @@ import com.tencent.supersonic.common.util.jsqlparser.FieldExpression; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserRemoveHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.headless.common.model.pojo.ItemDateFilter; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.request.ModelSchemaFilterReq; -import com.tencent.supersonic.headless.common.model.response.DimSchemaResp; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.MetricSchemaResp; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ParseSqlReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.model.domain.pojo.EngineTypeEnum; -import com.tencent.supersonic.headless.query.service.SchemaService; +import com.tencent.supersonic.headless.common.core.request.ParseSqlReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.server.pojo.ItemDateFilter; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.request.ModelSchemaFilterReq; +import com.tencent.supersonic.headless.common.server.response.DimSchemaResp; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.MetricSchemaResp; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.core.service.SchemaService; +import com.tencent.supersonic.headless.server.pojo.EngineTypeEnum; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.Catalog; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Triple; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -47,14 +51,12 @@ 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.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Triple; -import org.apache.logging.log4j.util.Strings; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; + +import static com.tencent.supersonic.common.pojo.Constants.DAY; +import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT; +import static com.tencent.supersonic.common.pojo.Constants.MONTH; +import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE; +import static com.tencent.supersonic.common.pojo.Constants.WEEK; @Slf4j @@ -95,7 +97,8 @@ public class QueryStructUtils { private List getDimensionIds(QueryStructReq queryStructCmd) { List dimensionIds = new ArrayList<>(); - List dimensions = catalog.getDimensions(queryStructCmd.getModelIds()); + MetaFilter metaFilter = new MetaFilter(queryStructCmd.getModelIds()); + List dimensions = catalog.getDimensions(metaFilter); Map> pair = dimensions.stream() .collect(Collectors.groupingBy(DimensionResp::getBizName)); for (String group : queryStructCmd.getGroups()) { @@ -116,7 +119,8 @@ public class QueryStructUtils { private List getMetricIds(QueryStructReq queryStructCmd) { List metricIds = new ArrayList<>(); - List metrics = catalog.getMetrics(queryStructCmd.getModelIds()); + MetaFilter metaFilter = new MetaFilter(queryStructCmd.getModelIds()); + List metrics = catalog.getMetrics(metaFilter); Map> pair = metrics.stream().collect(Collectors.groupingBy(SchemaItem::getBizName)); for (Aggregator agg : queryStructCmd.getAggregators()) { if (pair.containsKey(agg.getColumn())) { @@ -252,7 +256,8 @@ public class QueryStructUtils { public String generateInternalMetricName(Long modelId, List groups) { String internalMetricNamePrefix = ""; - List dimensions = catalog.getDimensions(Collections.singletonList(modelId)); + MetaFilter modelFilter = new MetaFilter(Collections.singletonList(modelId)); + List dimensions = catalog.getDimensions(modelFilter); if (!CollectionUtils.isEmpty(dimensions)) { internalMetricNamePrefix = dimensions.get(0).getModelBizName(); } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryUtils.java similarity index 91% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryUtils.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryUtils.java index 05617606d..f280464f5 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/QueryUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/QueryUtils.java @@ -1,20 +1,25 @@ -package com.tencent.supersonic.headless.query.utils; - -import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE; -import static com.tencent.supersonic.common.pojo.Constants.UNIONALL; +package com.tencent.supersonic.headless.core.utils; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.cache.CacheUtils; -import com.tencent.supersonic.headless.common.model.enums.SemanticTypeEnum; -import com.tencent.supersonic.headless.common.model.response.DimensionResp; -import com.tencent.supersonic.headless.common.model.response.MetricResp; -import com.tencent.supersonic.headless.common.model.response.QueryResultWithSchemaResp; -import com.tencent.supersonic.headless.common.query.request.QueryMultiStructReq; -import com.tencent.supersonic.headless.model.domain.Catalog; -import com.tencent.supersonic.headless.query.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.common.core.request.QueryMultiStructReq; +import com.tencent.supersonic.headless.common.server.enums.SemanticType; +import com.tencent.supersonic.headless.common.server.response.DimensionResp; +import com.tencent.supersonic.headless.common.server.response.MetricResp; +import com.tencent.supersonic.headless.common.server.response.QueryResultWithSchemaResp; +import com.tencent.supersonic.headless.core.persistence.pojo.QueryStatement; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; +import com.tencent.supersonic.headless.server.service.Catalog; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; @@ -26,12 +31,9 @@ import java.util.concurrent.CompletableFuture; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import javax.annotation.PostConstruct; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; + +import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE; +import static com.tencent.supersonic.common.pojo.Constants.UNIONALL; @Slf4j @@ -72,8 +74,9 @@ public class QueryUtils { } public void fillItemNameInfo(QueryResultWithSchemaResp queryResultWithColumns, List modelIds) { - List metricDescList = catalog.getMetrics(modelIds); - List dimensionDescList = catalog.getDimensions(modelIds); + MetaFilter metaFilter = new MetaFilter(modelIds); + List metricDescList = catalog.getMetrics(metaFilter); + List dimensionDescList = catalog.getDimensions(metaFilter); Map metricRespMap = metricDescList.stream().collect(Collectors.toMap(MetricResp::getBizName, a -> a, (k1, k2) -> k1)); Map namePair = new HashMap<>(); @@ -81,7 +84,7 @@ public class QueryUtils { addSysTimeDimension(namePair, nameTypePair); metricDescList.forEach(metricDesc -> { namePair.put(metricDesc.getBizName(), metricDesc.getName()); - nameTypePair.put(metricDesc.getBizName(), SemanticTypeEnum.NUMBER.name()); + nameTypePair.put(metricDesc.getBizName(), SemanticType.NUMBER.name()); }); dimensionDescList.forEach(dimensionDesc -> { namePair.put(dimensionDesc.getBizName(), dimensionDesc.getName()); @@ -109,14 +112,14 @@ public class QueryUtils { column.setShowType(nameTypePair.get(nameEn)); } if (!nameTypePair.containsKey(nameEn) && isNumberType(column.getType())) { - column.setShowType(SemanticTypeEnum.NUMBER.name()); + column.setShowType(SemanticType.NUMBER.name()); } if (metricRespMap.containsKey(nameEn)) { column.setDataFormatType(metricRespMap.get(nameEn).getDataFormatType()); column.setDataFormat(metricRespMap.get(nameEn).getDataFormat()); } if (StringUtils.isEmpty(column.getShowType())) { - column.setShowType(SemanticTypeEnum.CATEGORY.name()); + column.setShowType(SemanticType.CATEGORY.name()); } }); } diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/SqlGenerateUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java similarity index 96% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/SqlGenerateUtils.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java index 10aed2480..1dcddf889 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/SqlGenerateUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/SqlGenerateUtils.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.headless.query.utils; +package com.tencent.supersonic.headless.core.utils; import static com.tencent.supersonic.common.pojo.Constants.JOIN_UNDERLINE; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/StatUtils.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/StatUtils.java similarity index 84% rename from headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/StatUtils.java rename to headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/StatUtils.java index 4f7641bfa..5e6c1c7e9 100644 --- a/headless/query/src/main/java/com/tencent/supersonic/headless/query/utils/StatUtils.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/utils/StatUtils.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.headless.query.utils; +package com.tencent.supersonic.headless.core.utils; import com.alibaba.ttl.TransmittableThreadLocal; import com.fasterxml.jackson.core.JsonProcessingException; @@ -7,18 +7,18 @@ import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.util.SqlFilterUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.headless.common.model.enums.QueryOptMode; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeBackEnum; -import com.tencent.supersonic.headless.common.model.enums.QueryTypeEnum; -import com.tencent.supersonic.headless.common.model.pojo.QueryStat; -import com.tencent.supersonic.headless.common.model.pojo.SchemaItem; -import com.tencent.supersonic.headless.common.model.response.ModelSchemaResp; -import com.tencent.supersonic.headless.common.query.request.ItemUseReq; -import com.tencent.supersonic.headless.common.query.request.QueryS2SQLReq; -import com.tencent.supersonic.headless.common.query.request.QueryStructReq; -import com.tencent.supersonic.headless.common.query.response.ItemUseResp; -import com.tencent.supersonic.headless.model.domain.ModelService; -import com.tencent.supersonic.headless.query.persistence.repository.StatRepository; +import com.tencent.supersonic.headless.common.core.request.ItemUseReq; +import com.tencent.supersonic.headless.common.core.request.QueryS2SQLReq; +import com.tencent.supersonic.headless.common.core.request.QueryStructReq; +import com.tencent.supersonic.headless.common.core.response.ItemUseResp; +import com.tencent.supersonic.headless.common.core.enums.QueryOptMode; +import com.tencent.supersonic.headless.common.core.enums.QueryTypeBack; +import com.tencent.supersonic.headless.common.server.enums.QueryType; +import com.tencent.supersonic.headless.common.server.pojo.QueryStat; +import com.tencent.supersonic.headless.common.server.pojo.SchemaItem; +import com.tencent.supersonic.headless.common.server.response.ModelSchemaResp; +import com.tencent.supersonic.headless.core.persistence.repository.StatRepository; +import com.tencent.supersonic.headless.server.service.ModelService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.logging.log4j.util.Strings; @@ -103,8 +103,8 @@ public class StatUtils { queryStatInfo.setTraceId("") .setModelId(queryS2SQLReq.getModelIds().get(0)) .setUser(userName) - .setQueryType(QueryTypeEnum.SQL.getValue()) - .setQueryTypeBack(QueryTypeBackEnum.NORMAL.getState()) + .setQueryType(QueryType.SQL.getValue()) + .setQueryTypeBack(QueryTypeBack.NORMAL.getState()) .setQuerySqlCmd(queryS2SQLReq.toString()) .setQuerySqlCmdMd5(DigestUtils.md5Hex(queryS2SQLReq.toString())) .setStartTime(System.currentTimeMillis()) @@ -131,8 +131,8 @@ public class StatUtils { queryStatInfo.setTraceId(traceId) .setModelId(1L) .setUser(user) - .setQueryType(QueryTypeEnum.STRUCT.getValue()) - .setQueryTypeBack(QueryTypeBackEnum.NORMAL.getState()) + .setQueryType(QueryType.STRUCT.getValue()) + .setQueryTypeBack(QueryTypeBack.NORMAL.getState()) .setQueryStructCmd(queryStructCmd.toString()) .setQueryStructCmdMd5(DigestUtils.md5Hex(queryStructCmd.toString())) .setStartTime(System.currentTimeMillis()) diff --git a/headless/query/src/main/resources/mapper/StatMapper.xml b/headless/core/src/main/resources/mapper/StatMapper.xml similarity index 93% rename from headless/query/src/main/resources/mapper/StatMapper.xml rename to headless/core/src/main/resources/mapper/StatMapper.xml index fe40a6cc3..99e43ddf0 100644 --- a/headless/query/src/main/resources/mapper/StatMapper.xml +++ b/headless/core/src/main/resources/mapper/StatMapper.xml @@ -2,10 +2,10 @@ - + + type="com.tencent.supersonic.headless.common.server.pojo.QueryStat"> @@ -55,7 +55,7 @@