in hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java [270:311]
public static void extractAggregateFunc(Step<?, ?> newStep,
Traversal.Admin<?, ?> traversal) {
PropertiesStep<?> propertiesStep = null;
Step<?, ?> step = newStep;
do {
step = step.getNextStep();
if (step instanceof PropertiesStep) {
PropertiesStep<?> propStep = (PropertiesStep<?>) step;
if (propStep.getReturnType() == PropertyType.VALUE &&
propStep.getPropertyKeys().length == 1) {
propertiesStep = propStep;
}
} else if (propertiesStep != null &&
step instanceof ReducingBarrierStep) {
Aggregate.AggregateFunc aggregateFunc;
if (step instanceof CountGlobalStep) {
aggregateFunc = Aggregate.AggregateFunc.COUNT;
} else if (step instanceof MaxGlobalStep) {
aggregateFunc = Aggregate.AggregateFunc.MAX;
} else if (step instanceof MinGlobalStep) {
aggregateFunc = Aggregate.AggregateFunc.MIN;
} else if (step instanceof MeanGlobalStep) {
aggregateFunc = Aggregate.AggregateFunc.AVG;
} else if (step instanceof SumGlobalStep) {
aggregateFunc = Aggregate.AggregateFunc.SUM;
} else {
aggregateFunc = null;
}
if (aggregateFunc != null) {
QueryHolder holder = (QueryHolder) newStep;
holder.setAggregate(aggregateFunc,
propertiesStep.getPropertyKeys()[0]);
traversal.removeStep(step);
traversal.removeStep(propertiesStep);
}
}
} while (step instanceof FilterStep ||
step instanceof PropertiesStep ||
step instanceof IdentityStep ||
step instanceof NoOpBarrierStep);
}