protected JsonObject processQuery()

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