(improvement)(headless) When the field list provided by the front end is empty, the availability of the corresponding metric dimension is not verified. (#729)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2024-02-20 20:09:48 +08:00
committed by GitHub
parent b85778babd
commit 3317f1b7ec
4 changed files with 17 additions and 20 deletions

View File

@@ -3,8 +3,8 @@ package com.tencent.supersonic.headless.api.pojo.response;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.Dim;
import com.tencent.supersonic.headless.api.pojo.DrillDownDimension; 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.Identify;
import com.tencent.supersonic.headless.api.pojo.Measure;
import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.ModelDetail;
import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.SchemaItem;
import lombok.Data; import lombok.Data;
@@ -78,17 +78,9 @@ public class ModelResp extends SchemaItem {
if (modelDetail == null) { if (modelDetail == null) {
return fieldSet; return fieldSet;
} }
if (!CollectionUtils.isEmpty(modelDetail.getIdentifiers())) { if (!CollectionUtils.isEmpty(modelDetail.getFields())) {
fieldSet.addAll(modelDetail.getIdentifiers().stream() fieldSet.addAll(modelDetail.getFields().stream()
.map(Identify::getFieldName).collect(Collectors.toSet())); .map(Field::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()));
} }
return fieldSet; return fieldSet;
} }

View File

@@ -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.DimensionService;
import com.tencent.supersonic.headless.server.service.DomainService; import com.tencent.supersonic.headless.server.service.DomainService;
import com.tencent.supersonic.headless.server.service.MetricService; 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.ModelService;
import com.tencent.supersonic.headless.server.service.ViewService; import com.tencent.supersonic.headless.server.service.ViewService;
import com.tencent.supersonic.headless.server.utils.ModelConverter; import com.tencent.supersonic.headless.server.utils.ModelConverter;
@@ -75,8 +74,6 @@ public class ModelServiceImpl implements ModelService {
private DomainService domainService; private DomainService domainService;
private ModelRelaService modelRelaService;
private UserService userService; private UserService userService;
private ViewService viewService; private ViewService viewService;
@@ -87,7 +84,6 @@ public class ModelServiceImpl implements ModelService {
DatabaseService databaseService, DatabaseService databaseService,
@Lazy DimensionService dimensionService, @Lazy DimensionService dimensionService,
@Lazy MetricService metricService, @Lazy MetricService metricService,
ModelRelaService modelRelaService,
DomainService domainService, DomainService domainService,
UserService userService, UserService userService,
ViewService viewService, ViewService viewService,
@@ -97,7 +93,6 @@ public class ModelServiceImpl implements ModelService {
this.dimensionService = dimensionService; this.dimensionService = dimensionService;
this.metricService = metricService; this.metricService = metricService;
this.domainService = domainService; this.domainService = domainService;
this.modelRelaService = modelRelaService;
this.userService = userService; this.userService = userService;
this.viewService = viewService; this.viewService = viewService;
this.dateInfoRepository = dateInfoRepository; this.dateInfoRepository = dateInfoRepository;
@@ -200,6 +195,9 @@ public class ModelServiceImpl implements ModelService {
@Override @Override
public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) { public UnAvailableItemResp getUnAvailableItem(FieldRemovedReq fieldRemovedReq) {
if (CollectionUtils.isEmpty(fieldRemovedReq.getFields())) {
return UnAvailableItemResp.builder().build();
}
MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId())); MetaFilter metaFilter = new MetaFilter(Lists.newArrayList(fieldRemovedReq.getModelId()));
metaFilter.setFieldsDepend(fieldRemovedReq.getFields()); metaFilter.setFieldsDepend(fieldRemovedReq.getFields());
List<MetricResp> metricResps = metricService.getMetrics(metaFilter); List<MetricResp> metricResps = metricService.getMetrics(metaFilter);

View File

@@ -50,6 +50,14 @@ public class MetricDrillDownCheckerTest {
metricDrillDownChecker.checkQuery(semanticSchemaResp, sql); 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() { private SemanticSchemaResp mockModelSchemaResp() {
SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp(); SemanticSchemaResp semanticSchemaResp = new SemanticSchemaResp();
semanticSchemaResp.setMetrics(mockMetrics()); semanticSchemaResp.setMetrics(mockMetrics());

View File

@@ -74,12 +74,11 @@ class ModelServiceImplTest {
DatabaseService databaseService = Mockito.mock(DatabaseService.class); DatabaseService databaseService = Mockito.mock(DatabaseService.class);
DomainService domainService = Mockito.mock(DomainService.class); DomainService domainService = Mockito.mock(DomainService.class);
UserService userService = Mockito.mock(UserService.class); UserService userService = Mockito.mock(UserService.class);
ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class);
DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class); DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class);
ViewService viewService = Mockito.mock(ViewService.class); ViewService viewService = Mockito.mock(ViewService.class);
return new ModelServiceImpl(modelRepository, databaseService, return new ModelServiceImpl(modelRepository, databaseService,
dimensionService, metricService, modelRelaService, domainService, dimensionService, metricService, domainService, userService,
userService, viewService, dateInfoRepository); viewService, dateInfoRepository);
} }
private ModelReq mockModelReq() { private ModelReq mockModelReq() {