/** * Calculate the depth of the candidate TemplateDruidQuery. * * @param candidate TemplateDruidQuery to calculate the depth of * * @return The depth of the candidate query */ private int calculateDepth(TemplateDruidQuery candidate) { int theDepth = 1; Optional<TemplateDruidQuery> iterator = candidate.getInnerQuery(); while (iterator.isPresent()) { theDepth++; iterator = iterator.get().getInnerQuery(); } return theDepth; }
@Override public TemplateDruidQuery updateOuterQuery( TemplateDruidQuery outerQuery, Map<String, String> oldFieldNameToNewFieldNameMap ) { Map<String, Aggregation> oldNameToNewAggregationMapping = new HashMap<>(); Set<Aggregation> updatedOuterAggs = updateQueryAggs( outerQuery.getAggregations(), oldFieldNameToNewFieldNameMap, oldNameToNewAggregationMapping ); //Update the FieldAccessors from the outer query post aggs to access the correct aggs. Set<PostAggregation> updateOuterPostAggs = new HashSet<>(); for (PostAggregation postAggregation: outerQuery.getPostAggregations()) { updateOuterPostAggs.add(replacePostAggWithPostAggFromMap(postAggregation, oldNameToNewAggregationMapping)); } //create new TDQ using updated aggs, updatedPostAggs, updatedInnerQuery and timegrain of outerQuery return new TemplateDruidQuery( updatedOuterAggs, updateOuterPostAggs, outerQuery.getInnerQuery().orElse(null), outerQuery.getTimeGrain() ); }
@Override protected LogicalMetric makeInner(LogicalMetricInfo logicalMetricInfo, List<String> dependentMetrics) { LogicalMetric sourceMetric = metricDictionary.get(dependentMetrics.get(0)); Aggregation sourceAggregation = assertDependentIsAggregationMetric(sourceMetric); FilteredAggregation filteredAggregation = new FilteredAggregation( logicalMetricInfo.getName(), sourceAggregation, filter ); return new LogicalMetric( new TemplateDruidQuery( ImmutableSet.of(filteredAggregation), Collections.emptySet(), sourceMetric.getTemplateDruidQuery().getInnerQuery().orElse(null) ), sourceMetric.getCalculation(), logicalMetricInfo ); }
updatedAggs, updatedPostAggs, query.getInnerQuery().orElse(null), query.getTimeGrain() );
template.getInnerQuery().get(), table, mergedGranularity,
templateDruidQuery.getInnerQuery().get(), metricFilterObject, dimensionDictionary,
self.nestedQuery.merge(sibling.getInnerQuery().get()) : null; return new TemplateDruidQuery(