(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.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;
}

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.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<MetricResp> metricResps = metricService.getMetrics(metaFilter);

View File

@@ -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());

View File

@@ -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() {