in src/main/java/org/apache/datasketches/server/DataQueryHandler.java [52:98]
protected JsonObject processQuery(final JsonObject query) {
if (!query.has(QUERY_NAME_FIELD)) {
throw new IllegalArgumentException("Query missing sketch name field");
}
final String key = query.get(QUERY_NAME_FIELD).getAsString();
if (!sketches.contains(key)) {
throw new IllegalArgumentException("Invalid sketch name: " + key);
}
JsonObject result = new JsonObject();
// we do need to lock the sketch even for query processing
synchronized (key.intern()) {
final SketchStorage.SketchEntry se = sketches.getSketch(key);
// pre-populate with the sketch name, but may be overwritten with
// null depending on the query
result.addProperty(QUERY_NAME_FIELD, key);
switch (se.family_) {
case UNION:
case HLL:
case CPC:
result = processDistinctQuery(result, query, se.family_, se.sketch_);
break;
case KLL:
result = processQuantilesQuery(result, query, se.family_, se.sketch_);
break;
case FREQUENCY:
result = processFrequencyQuery(result, query, se.family_, se.sketch_);
break;
case RESERVOIR:
case VAROPT:
result = processSamplingQuery(result, query, se.family_, se.sketch_);
break;
default:
throw new IllegalStateException("Unexpected sketch family: " + se.family_);
}
}
return result;
}