diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java index 813b25be..4b184246 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/RequestHandler.java @@ -88,16 +88,21 @@ public RequestHandler( @Override public ExploreResponse.Builder handleRequest( ExploreRequestContext requestContext, ExploreRequest request) { - QueryRequest queryRequest = + Optional maybeQueryRequest = buildQueryRequest(requestContext, request, attributeMetadataProvider); + if (maybeQueryRequest.isEmpty()) { + return ExploreResponse.newBuilder(); + } + + QueryRequest queryRequest = maybeQueryRequest.get(); Iterator resultSetChunkIterator = executeQuery(requestContext, queryRequest); return handleQueryServiceResponse( request, requestContext, resultSetChunkIterator, requestContext, attributeMetadataProvider); } - QueryRequest buildQueryRequest( + Optional buildQueryRequest( ExploreRequestContext requestContext, ExploreRequest request, AttributeMetadataProvider attributeMetadataProvider) { @@ -113,12 +118,18 @@ QueryRequest buildQueryRequest( attributeMetadataProvider.getAttributesMetadata(requestContext, request.getContext()); if (hasOnlyAttributeSource(request.getFilter(), AttributeSource.EDS, attributeMetadataMap)) { entityIds = getEntityIdsToFilterFromSourceEDS(requestContext, request, attributeMetadataMap); + + if (entityIds.isEmpty()) { + return Optional.empty(); + } + qsSourceFilter = buildFilter(request.getFilter(), AttributeSource.QS, attributeMetadataMap) .orElse(request.getFilter()); } QueryRequest.Builder builder = QueryRequest.newBuilder(); + // 1. Add selections. All selections should either be only column or only function, never both. // The validator should catch this. List aggregatedSelections = @@ -160,7 +171,7 @@ QueryRequest buildQueryRequest( // 4. Add order by along with setting limit, offset addSortLimitAndOffset(request, requestContext, builder); - return builder.build(); + return Optional.of(builder.build()); } // This is to get all the entity Ids for the EDS source filter. diff --git a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java index 97f704b9..b4034e0f 100644 --- a/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java +++ b/gateway-service-impl/src/main/java/org/hypertrace/gateway/service/explore/TimeAggregationsRequestHandler.java @@ -51,7 +51,7 @@ public class TimeAggregationsRequestHandler extends RequestHandler { } @Override - QueryRequest buildQueryRequest( + Optional buildQueryRequest( ExploreRequestContext requestContext, ExploreRequest request, AttributeMetadataProvider attributeMetadataProvider) { @@ -79,7 +79,7 @@ QueryRequest buildQueryRequest( // 6. Set Limit. builder.setLimit(request.getLimit()); - return builder.build(); + return Optional.of(builder.build()); } private void addTimeAggregationsAsSelectionsToRequest(