diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java index 5f81d101f..4e3554282 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java @@ -3,8 +3,8 @@ package com.tencent.supersonic.headless.api.pojo.response; import com.google.common.collect.Lists; import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.DrillDownDimension; +import com.tencent.supersonic.headless.api.pojo.Field; import com.tencent.supersonic.headless.api.pojo.Identify; -import com.tencent.supersonic.headless.api.pojo.Measure; import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import lombok.Data; @@ -78,17 +78,9 @@ public class ModelResp extends SchemaItem { if (modelDetail == null) { return fieldSet; } - if (!CollectionUtils.isEmpty(modelDetail.getIdentifiers())) { - fieldSet.addAll(modelDetail.getIdentifiers().stream() - .map(Identify::getFieldName).collect(Collectors.toSet())); - } - if (!CollectionUtils.isEmpty(modelDetail.getDimensions())) { - fieldSet.addAll(modelDetail.getDimensions().stream() - .map(Dim::getFieldName).collect(Collectors.toSet())); - } - if (!CollectionUtils.isEmpty(modelDetail.getMeasures())) { - fieldSet.addAll(modelDetail.getMeasures().stream() - .map(Measure::getFieldName).collect(Collectors.toSet())); + if (!CollectionUtils.isEmpty(modelDetail.getFields())) { + fieldSet.addAll(modelDetail.getFields().stream() + .map(Field::getFieldName).collect(Collectors.toSet())); } return fieldSet; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java index ae2398770..e9be8e689 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java @@ -36,7 +36,6 @@ import com.tencent.supersonic.headless.server.service.DatabaseService; 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.ModelRelaService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.ViewService; import com.tencent.supersonic.headless.server.utils.ModelConverter; @@ -75,8 +74,6 @@ public class ModelServiceImpl implements ModelService { private DomainService domainService; - private ModelRelaService modelRelaService; - private UserService userService; private ViewService viewService; @@ -87,7 +84,6 @@ public class ModelServiceImpl implements ModelService { DatabaseService databaseService, @Lazy DimensionService dimensionService, @Lazy MetricService metricService, - ModelRelaService modelRelaService, DomainService domainService, UserService userService, ViewService viewService, @@ -97,7 +93,6 @@ public class ModelServiceImpl implements ModelService { this.dimensionService = dimensionService; this.metricService = metricService; this.domainService = domainService; - this.modelRelaService = modelRelaService; this.userService = userService; this.viewService = viewService; this.dateInfoRepository = dateInfoRepository; @@ -200,6 +195,9 @@ public class ModelServiceImpl implements ModelService { @Override public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) { + if (CollectionUtils.isEmpty(fieldRemovedReq.getFields())) { + return UnAvailableItemResp.builder().build(); + } MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId())); metaFilter.setFieldsDepend(fieldRemovedReq.getFields()); List metricResps = metricService.getMetrics(metaFilter); diff --git a/headless/server/src/test/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownCheckerTest.java b/headless/server/src/test/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownCheckerTest.java index 708118d6a..e9a4bd119 100644 --- a/headless/server/src/test/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownCheckerTest.java +++ b/headless/server/src/test/java/com/tencent/supersonic/headless/server/aspect/MetricDrillDownCheckerTest.java @@ -50,6 +50,14 @@ public class MetricDrillDownCheckerTest { metricDrillDownChecker.checkQuery(semanticSchemaResp, sql); } + @Test + void test_groupBy_no_necessary_dimension_setting_no_metric() { + MetricDrillDownChecker metricDrillDownChecker = new MetricDrillDownChecker(); + String sql = "select user_name, page, count(*) from t_1 group by user_name,page"; + SemanticSchemaResp semanticSchemaResp = mockModelSchemaNoDimensionSetting(); + metricDrillDownChecker.checkQuery(semanticSchemaResp, sql); + } + private SemanticSchemaResp mockModelSchemaResp() { SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp(); semanticSchemaResp.setMetrics(mockMetrics()); diff --git a/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java b/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java index 16baa480d..87f15489e 100644 --- a/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java +++ b/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java @@ -74,12 +74,11 @@ class ModelServiceImplTest { DatabaseService databaseService = Mockito.mock(DatabaseService.class); DomainService domainService = Mockito.mock(DomainService.class); UserService userService = Mockito.mock(UserService.class); - ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class); DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class); ViewService viewService = Mockito.mock(ViewService.class); return new ModelServiceImpl(modelRepository, databaseService, - dimensionService, metricService, modelRelaService, domainService, - userService, viewService, dateInfoRepository); + dimensionService, metricService, domainService, userService, + viewService, dateInfoRepository); } private ModelReq mockModelReq() {